量子计算机不是更快的电脑
量子计算每次上新闻,评论区都会出现同一种论调:「n 个量子比特可以同时是 2ⁿ 个状态,那不就是同时试所有答案?一步出结果,当然快。」
量子计算机不是更快的电脑
量子计算每次上新闻,评论区都会出现同一种论调:「n 个量子比特可以同时是 2ⁿ 个状态,那不就是同时试所有答案?一步出结果,当然快。」
这个推理看着严丝合缝,其实从第二步就错了。它错得如此流行,以至于值得单独写一篇把它拆干净——因为理解了它错在哪,量子计算真正的工作原理反而就清楚了。
对的一半:指数大的空间是真的
一个普通比特只有 0 和 1 两种状态。一个量子比特可以处在两者的叠加态——不是「要么 0 要么 1,只是我们不知道」,而是真真切切同时带着两者的成分,像一枚旋转中的硬币,还没落地。数学上写成 α|0⟩+β|1⟩,α 和 β 叫振幅,是两个复数;测量时看到 0 的概率是 |α|²,看到 1 的概率是 |β|²。
n 个量子比特放在一起,状态空间就是 2ⁿ 维的。50 个比特,一千万亿个振幅同时存在。这部分没有争议——第一篇入门里讲过,空间是指数大的。真正的问题在下一步。
错的一半:你只能看一次
量子计算的全部输出,最终都要经过一次测量。测量就是硬币落地:2ⁿ 个振幅瞬间塌缩,吐出一个确定的比特串。一次。
如果量子计算机的工作方式真是「并行试完所有答案」,那它测一次给你的,是一个从 2ⁿ 个候选里随机抽出来的答案。随机答案一文不值——它几乎必然是错的。照「并行试所有」的逻辑推到底,量子计算机就是一台造价上亿、必须泡在接近绝对零度的稀释制冷机里的随机数发生器。
所以,那 2ⁿ 个振幅不是 2ⁿ 个「正在运行的程序」。它们是 2ⁿ 道正在振动的波。
真正的机制:干涉
振幅是复数,复数可以相加,也可以相消——一个正数加一个负数会变小,两道反相的波会互相抹平。这就是干涉,水面上两圈涟漪相遇时发生的事:有些地方浪更高,有些地方平如镜。
量子算法的全部艺术,就是编排一串量子门操作,让这 2ⁿ 道波彼此干涉:错误答案的振幅峰谷相对,逐步抵消;正确答案的振幅峰峰相叠,越涨越高。跑完最后一道门,测量落地——大概率砸在正确答案上。
换句话说,量子计算不是「试出」答案,是「筛出」答案。筛子是波的运动,筛的是整个指数空间。
这也解释了为什么有效的量子算法少得可怜。写经典算法,想清楚步骤就行;写量子算法,你得给一个 2ⁿ 维的复数空间设计一套编舞,让波纹最后恰好堆在你想要的那个角落。三十年过去,真正通用的量子算法屈指可数。
两个标杆,两种加速
屈指可数的算法里,有两个必须认识。
Shor 算法,1994 年。分解一个大整数,经典计算机没有好办法,数字每长一位,耗时暴涨——2048 位的大数,现有经典方法要跑到天荒地老。Shor 的洞察是把因数分解改写成「求周期」,而周期恰好是波的属性,干涉结构现成。结果:指数级加速。一旦有足够大的容错量子机,分解 RSA-2048 只需一周以内——这是最新的工程估算,也是整个密码学界焦虑的源头,因为互联网的锁正是建在「分解很难」上。
Grover 算法,1996 年。在 N 个无序条目里找一个目标,经典办法平均要看 N/2 个,Grover 只要约 √N 次。一亿个条目,一万次。注意:这是平方根加速,不是指数加速——好,但没有魔法。而且数学上已经证明这到了头:任何量子搜索算法都不可能快于 √N 量级。想找「更快的 Grover」,原理上就是死路。
这两个数摆在一起,量子计算的真实轮廓就出来了:对有周期、代数这类波结构的问题,它能指数加速;对一般性的搜索,只能平方加速;至于你的浏览器、视频解码、游戏渲染——那些没有任何干涉结构可借的日常计算——它一微秒也省不下来。
回到那句话
现在可以精确说出开头那句流行论调错在哪了:叠加给出的不是「同时运行的所有答案」,是「同时振动的一片波」。没有算法家的干涉编排,这片波落地之后只是噪声。
量子计算机不是更快的电脑。它是一台用干涉做筛选的机器——对世界上绝大多数计算任务礼貌地毫无用处,对少数几个问题快到改写规则。哪些问题在「少数几个」名单上、哪些新闻把话说过头了,下一篇接着说。
(量子入门系列之二。第一篇《量子计算入门:难的从来不是数学,是一套没见过的词汇》十天前发在本号;本篇与后续两篇,把第一篇没展开的几层拆开细讲。)