是振幅,不只是概率
普通的比特要么是 0 要么是 1。量子比特却可以处于两者的[[superposition|叠加态]]——但「叠加」这个词被用得太随便了,值得我们放慢脚步细说。一个量子比特的状态用两个数来描述,称为振幅:一个对应结果 0,一个对应结果 1。我们通常把它们叫做 alpha 和 beta。
|psi> = alpha|0> + beta|1>
下面这一点正是量子区别于普通概率之处:振幅不是概率。概率永远是介于 0 和 1 之间的数。而振幅可以是负的,并且一般来说它是一个复数(它带有某种方向,即相位)。这听上去像是个技术细节,但它其实就是问题的全部——正是负振幅和复振幅,才让量子态能做到抛硬币永远做不到的事。
「同时算出所有答案」的迷思
你大概听过这样的说法:量子计算机「同时尝试所有答案」。这是关于量子计算最常见的一句话,而它具有误导性。没错,一组处于叠加态的量子比特确实可以同时持有数量极其庞大的可能性所对应的振幅。但持有振幅,并不等于*知道答案*。
玄机在于你去观测时会发生什么。一次[[quantum-measurement|测量]]并不会把整张可能性清单交给你——它只会返回恰好一个结果,这个结果是随机选出的,概率由振幅决定。其余的一切都随之坍缩消失。如果你只是把一个寄存器置于十亿种可能性的均匀叠加态再去测量它,你得到的不过是一种随机的可能,并不比瞎猜更高明。叠加态本身并不能为你换来任何好处。
干涉:真正的诀窍
正是在这里,那些负振幅和复振幅终于派上了用场。因为振幅可以是正的也可以是负的,它们就能干涉——就像池塘上的涟漪一样。当通向同一结果的两条路径其振幅符号相同时,它们便相加增强(相长干涉)。当符号相反时,它们便相消(相消干涉)。这就是[[quantum-interference|量子干涉]],也是量子计算真正的引擎。
一个真正的量子算法,是对振幅精心编排的一场舞蹈。你要把计算安排得让通向错误答案的振幅相消趋于零,同时让通向正确答案的振幅相加。只有到这时你才去测量。因为此时错误结果的振幅平方已经变得极小,你就极有可能读出自己想要的答案。这里没有平行宇宙式的蛮力——有的只是被刻意设计出来的干涉。
归一化
有一条规则是振幅必须始终遵守的。既然测量总会给出某个结果,那么所有结果的概率加起来就必须等于 1。对单个量子比特来说,这意味着两个振幅大小的平方之和必须等于一:|alpha|^2 + |beta|^2 = 1。这叫做归一化,一个合法的量子态永远是归一化的。
归一化还悄悄地施加了一种取舍。如果一个量子比特被均分,alpha 和 beta 各自的平方大小都是 1/2,于是两个结果你各有 50/50 的机会。把更多振幅推向 0,你就必然要把它从 1 那边拉走。你可以把这份确定性挪来挪去,但你能花的总量永远不会超过 1。
为什么你不能把它全部读出来
人们很容易这样想:你可以准备一个内容丰富的叠加态,测量它,然后设法把藏在里面的所有振幅都还原出来。你做不到。一次[[quantum-measurement|测量]]只返回一个结果——对量子比特来说是 0 或 1——而就在它返回的那一刻,叠加态便消失了(它「坍缩」了)。你永远无法直接看到 alpha 和 beta。你所能得到的,永远只是一个从 |alpha|^2 和 |beta|^2 中抽出的样本。
那么,能不能在测量之前给这个状态备份一个副本,好多了解一些?不能——量子力学直接禁止复制一个未知的状态,这条规则带来的实际后果我们以后会遇到。而把同一段计算运行许多次,也只能给你关于概率的统计数据;它依然永远无法直接揭示底层的振幅或它们的相位。