1996-Grover 演算法#
案件摘要#
1996 年,AT&T 實驗室的 Lov Grover 在費米實驗室的一場研討會上宣布:量子電腦可以在 \(O(\sqrt{N})\) 時間內於非結構化資料庫中找到目標項。偵探注意到,這個加速雖然不如 Shor 演算法的指數級,卻適用於「所有」搜尋問題——線索指向「振幅放大」的幾何結構。
前因 -- 為什麼會有這個案子#
- 1994 年 Shor 提出質因數分解演算法,證明量子電腦在某些問題上有指數優勢,但僅限特定代數結構。
- 經典上,在一個毫無結構(亂序、無索引)的 \(N\) 項資料庫中找一個特定項,平均需要 \(N/2\) 次、最壞需要 \(N\) 次查詢。資訊論上,每查一次只能得到 1 bit 的「是/否」資訊。
- Bennett 等人(1994)指出:即使把查詢函數 \(f(x)\) 變成量子 oracle(一次可對疊加態的所有 \(x\) 同時求值),也不能直接「平行讀出」所有答案——量測會坍縮。問題變成:如何讓答案的振幅被「放大」到可測得?
- 這就是本案的謎題:oracle 已經給出,答案藏在振幅裡,如何把它挖出來?
線索與推理 -- 數學式、程式、理論#
問題定義#
給定 \(N = 2^n\) 個項與一個布林函數 \(f\) ,恰有一個解 \(w\) 使得 \(f(w)=1\) 。Oracle 定義為
(相位 oracle,將解的振幅反相)。
Grover 迭代#
從均勻疊加態出發:
Grover 迭代 \(G\) 由兩個算符組成:
其中 \(D = 2|s\rangle\langle s| - I = \frac{2}{N}\sum_{x}\sum_{y}|x\rangle\langle y| - I\) 稱為 diffusion 算符(關於平均值的反轉,inversion about the mean):對任意振幅 \(a_i\) ,它將其映射為 \(2\bar{a} - a_i\) 。
幾何直覺#
把狀態分解為「解平面」上的兩個分量:
其中 \(|r\rangle\) 是所有非解態的歸一化疊加。每次迭代 \(G\) 在 \(\{|w\rangle, |r\rangle\}\) 平面上旋轉 \(2\theta\) 角度,把振幅從 \(|r\rangle\) 搬向 \(|w\rangle\) 。經過 \(k\) 次迭代:
取 \(k \approx \frac{\pi}{4}\sqrt{N}\) 時成功機率接近 1,故查詢次數為 \(O(\sqrt{N})\) 。
例如 \(N = 2^{20} \approx 10^6\) :經典需約 \(5\times 10^5\) 次查詢,Grover 只需約 \(\frac{\pi}{4}\cdot 1024 \approx 805\) 次。
最優性證明#
Bennett–Bernstein–Brassard–Vazirani(BBBV, 1997)用混合態論證證明:任何量子演算法搜尋非結構化資料庫至少需要 \(\Omega(\sqrt{N})\) 次 oracle 查詢。因此 Grover 是漸近最優的——加速最多是二次方,不可能更快。後續 Zalka(1999)更證明常數因子 \(\pi/4\) 也是最優的。
4 量子位 Grover 模擬(Python/qiskit 風格偽碼)#
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
import numpy as np
n, target = 4, 13 # N=16, 找 |1101>
def oracle(qc):
# 對 |1101> 反相:X 翻轉 0 位元,MCZ 反相,再翻回
for q in range(n):
if (target >> q) & 1 == 0:
qc.x(q)
qc.h(3); qc.mcx([0,1,2], 3); qc.h(3)
for q in range(n):
if (target >> q) & 1 == 0:
qc.x(q)
def diffusion(qc):
for q in range(n): qc.h(q)
for q in range(n): qc.x(q)
qc.h(3); qc.mcx([0,1,2], 3); qc.h(3)
for q in range(n): qc.x(q)
for q in range(n): qc.h(q)
qc = QuantumCircuit(n, n)
qc.h(range(n)) # 均勻疊加 |s>
k = int(np.floor(np.pi/4 * np.sqrt(2**n))) # k=3
for _ in range(k):
oracle(qc)
diffusion(qc)
qc.measure(range(n), range(n))
sim = AerSimulator()
result = sim.run(transpile(qc, sim), shots=1024).result()
print(result.get_counts()) # |1101> 出現機率 > 0.95
結案 -- 後果與影響#
- 振幅放大(amplitude amplification)成為通用量子技術:Grover 迭代可推廣為 Brassard–Høyer–Mossard–Tapp 的振幅放大框架,用於量子計數、碰撞問題、NP 完全問題的平方加速。
- 複雜度 \(O(\sqrt{N})\) vs 經典 \(O(N)\) :對 hash 碰撞、 satisfiability 等問題提供實質(但非指數)加速。
- 深遠影響:Grover 演算法迫使對稱式密碼學加倍金鑰長度(AES-128 在量子攻擊下安全度只剩約 64 bit),成為後量子密碼學討論的起點之一;今日所有量子雲端平台上的入門教材,幾乎都以 Grover 作為第二個示範電路。
關鍵人物與文獻#
- Lov K. Grover, A fast quantum mechanical algorithm for database search, Proc. STOC 1996, pp. 212–219.
- Bennett, Bernstein, Brassard, Vazirani, Strengths and weaknesses of quantum computing, SIAM J. Comput. 26(5), 1997(最優性下界).
- Christof Zalka, Grover's quantum searching algorithm is optimal, Phys. Rev. A 60, 1999.
- Brassard, Høyer, Mosca, Tapp, Quantum Amplitude Amplification and Estimation, 2002.