算法
振幅放大(amplitude amplification)
把你问题的每一个可能答案,都想象成一台巨型调音台上的一根推子,每根推子的高度就是那个答案的振幅。当你最终测量时,你并不是直接读出推子的高度;得到某个答案的概率,是它那根推子高度的平方。一开始,所有推子都大致停在同样的低位上,所以每个答案的可能性都差不多(同样不太可能)。振幅放大,就是一种小心翼翼、反复进行的轻推:把你想要的那些答案的推子抬高,把其余的压低,这样到最后一测量,几乎总能交给你一个正确答案。
每一轮做两件事:先由一个预言机(oracle)标记出好答案(翻转它们振幅的符号),接着第二步把所有振幅都对它们的平均值做一次反射。从几何上看,这两步合起来,每次都把整个量子态朝被标记的答案稍稍转近一点,就像让指南针的指针一点点逼近正北。但你必须在恰当的时刻停手:一旦转过了头,振幅又会摆回去往下掉,答案反而变得更不可能。这正是 Grover 搜索内部的引擎——在 N 个候选项中找出一个被标记的项,大约只需 sqrt(N) 步。这是一个实实在在、很有用的加速,但它是平方级(二次方)的加速,而不是某些结构化问题(比如 Shor 的整数分解)所享有的那种戏剧性的指数级提升。
p_success ~= sin^2((2k+1) * theta), where sin^2(theta) = M/N
经过 k 次迭代后,在总共 N 个答案中测得 M 个被标记答案之一的概率,遵循这条曲线——它先上升,在 k ≈ (pi/4)*sqrt(N/M) 附近达到峰值,若转过了头便又回落。
它并不是「一次性试遍所有答案」:那种并行性确实存在,但它之所以能见效,全靠人为设计振幅之间的干涉,在你测量之前就把概率集中到正确答案上。
又称
另见