编程量子算法有何不同?如果是为qubit设计的,类似C的语言会是什么样?类型会改变吗?
编程量子算法有何不同?如果是为qubit设计的,类似C的语言会是什么样?类型会改变吗?
Answers:
当我前一段时间对此进行研究时,很明显,量子算法虽然不是特别快,但是却允许指数级的大规模并行性。因此,在涉及在顺序硬件,甚至大规模并行顺序硬件不实用的空间中进行搜索的情况下,它们会大放异彩。
量子算法的一个特性是它们必须是可逆的。通过将足够多的记录保持到允许向后运行的方式,可以将任何给定的算法转换为可逆的算法。
另一个特性是,从量子算法中得到答案是一桩偶然的事情,因为在计算结束时得到的是多个答案,每个答案都有自己的概率。它的运行方式必须使您所需的答案具有很高的概率。这可能涉及多次向前和向后运行算法。
查看Grover的搜索算法。
插入以显示Grover算法的基本操作。假设存在搜索问题。可能的答案是0、1、2和3,但正确的答案是2。因此,将量子计算机置于所有四个状态的叠加上,并通过一系列步骤来确定哪个是正确的,以及反转其幅度,如下面的黑点和箭头所示:
您可以看到箭头2在机器内部已被反转,但是无法在外部分辨出来,因为在外部仅可见概率,它们是振幅平方,当平方时都相等。
但是,振幅具有平均值,用红线表示,可以使计算机执行一系列步骤,以使各个振幅围绕平均值反转。完成后,振幅和几率转移到状态2,正确答案!因此,如果观察到机器,则状态2发光。
这不是那么简单。通常,需要花费机器的多个周期(正向和反向),然后在每个周期的末尾反转,才能最大程度地获得正确答案的可能性。另外,必须注意不要重复次数超过此次数,因为它很容易反转。
那么为什么他们说量子计算机如此之快呢?因为每次将位数增加一倍,就对并行度求平方,但对时间长度不求平方,因此最终取胜。
那不是很有趣吗?
我个人对如何将其应用于软件正确性验证感兴趣。现在,我们通过向软件抛出大量测试输入并(如果过于简单)来查看软件是否达到了断言,从而对软件进行测试。在量子计算机中,可能有可能对一组更为密集的输入并行运行它,并查看是否有任何情况触及了Assert。
就像算法的输入是128字节或1024位一样,也有2 ^ 1024或10 ^ 308个可能的不同输入。无法在传统计算机上测试这么多输入,但是量子计算机可以并行尝试所有输入。
如果是为qubit设计的,类似C的语言会是什么样?类型会改变吗?
这将是如此巨大,以至于无法像C一样理解。
主要问题(据我了解)是,量子计算不能以一种很好的命令性方式工作:“先做到这一点,再做到那件事,然后再做这件事”。试图将C的能力强加到量子计算机的“处理器”中,即使不是不可能的,也将导致效率低下。
量子计算机的编程算法(再次,据我所知)往往更接近于函数式编程样式映射/归约,因为量子计算允许“归约”部分中的所有候选者同时存在并“退出”计算机当观察时。
请注意,即使不存在运行量子计算机的设备,也存在一些用于量子计算机的现有算法。例如西蒙的算法。
为了最有效地利用量子计算机,人们需要能够处理作为量子寄存器状态的输入和输出,对于这种输入和输出,实际上并没有经典的类似物。从量子信息领域的多年经验谈起,我必须警告您,除了C *代数的抽象数学之外,没有人真的对此有一个很好的直觉,而且我被告知,即使这种直觉也证明是不够的如果您开始怀疑相对论。
对于有界量子多项式,在量子计算机上可以有效解决的一类问题称为BQP。这是BPP的量子版本,您可以在本文中找到更多信息:http : //www.scottaaronson.com/papers/bqpph.pdf
量子算法研究人员昨晚才告诉我,有一个非常重要的问题是BQP完全的:求解一个由N个方程组成的线性系统。传统上,这可以通过高斯消除在O(N)步骤中解决。Harrow-Hassidim-Lloyd算法(http://arxiv.org/abs/0811.3171)使用polylog (N)解决了该问题,只要您愿意接受一个答案,且该答案的解编码为量子态即可。如果要充分利用量子计算机,那么似乎有必要具有与量子寄存器的状态相对应的类型。
尽管我现在还不擅长于我的专业知识,但我会猜测,只要您能够访问与魔术状态相对应的类型,就可以对量子计算机进行编程。但是,这是一个困难的概念,需要对此主题进行一些研究。
警告我们拥有量子编程语言已经很长时间了,因为我们处于量子计算研究的非常原始的阶段。现在问量子C就像去Alan Turing并要求他设计Python。我们甚至还没有真空管的量子版本!