Grover:让答案自己浮起来
Grover 不是更快查表,是把答案的振幅转上来
8 个抽屉,只有一把钥匙。经典办法是一个个拉开,平均 4 次;Grover 算法 说 2 次就够。它不是手快,也不是同时拉开了 8 个——它让「有钥匙」那个抽屉在概率上自己站起来。
平方根,而不是指数
经典无结构搜索的期望查询次数约为 ,最坏 。Grover 用 次:一百万项时,经典期望约五十万次,Grover 约一千次。差距很大,但它是平方根,不是指数;N 再大,也只是把两个数字一起拉长。
这也是它最容易被说错的地方:Grover 并没有「同时查完所有条目」。它从头到尾只维护一个 项的叠加,真正发生的事在下一节。
下面的柱高是振幅,标记项是最后那根。拖迭代次数,或直接点「跳到最优步数」。
两次翻转,把答案抬起来
初始化后,所有振幅都是 。一步迭代做两件事:神谕 给解的振幅加一个负号,概率不变;随后让所有振幅关于平均值翻转。解的振幅被抬到均值以上,非解被压到以下;重复约 次,测到解的概率接近 1。
这就是 振幅放大。它像把一根横杆从中间顶起来:解那头翘上去,其余那头沉下去。比喻失效的地方在于,这不是一次性的抬升,而是旋转;转多了会越过最高点。
步数很关键。少于最优值,抬得不够;多于它,概率反而回落。演示里把迭代拖过最优点,柱子会矮下去。
它也不给你清单。若有 个解,迭代会把它们一起放大,但一次 测量 只坍缩出一个结果。想列全就要重复运行、每次移走已找到的解,代价会吃掉一部分优势;多个解时最优步数也变成 量级。
还是无结构搜索的下界:有证明说,任何量子算法都不能用更少的查询完成同样任务(差常数倍)。所以 Grover 给的是实打实的二次加速,不是万能加速。
Grover 把答案的振幅转上来,而不是把表查得更快:一步翻符号,一步绕均值翻转, 次后测量。它给的是二次加速,也只给一个解;这两点一起记住,才算真的理解它。