格罗弗算法

格罗弗算法（英語：Grover's algorithm）是一種量子算法，於1996年由電腦科學家洛夫·格罗弗提出。假設現在有一個未知的函數，格罗弗算法只需測試此未知的函數 O ( N ) {\displaystyle O({\sqrt {N}})} 次，其中 N {\displaystyle N} 為此未知函數的定义域的大小，即可以很高的概率找到一特定的輸入值，此輸入值能使此未知函數輸出特定的值。 同樣的問題在經典運算下，需要至少做 O ( N ) {\displaystyle O(N)} 次測試（因為在最壞的情況下，可能第 N {\displaystyle N} 個定義域裡的值才是正確答案）。在格罗弗發表他的算法前後，Bennett, Bernstein, Brassard, 和 Vazirani 在相近的時間證明了，任何量子算法解決此問題都最少需要對此未知的函數做 Ω ( N ) {\displaystyle \Omega ({\sqrt {N}})} 次測試，因此格罗弗算法是渐进最优的。 非局域隱變量量子計算機已經被證明可以在最多 O ( N 3 ) {\displaystyle O({\sqrt[{3}]{N}})} 步內實現在N個條目的數據庫裡的搜索，這比格罗弗算法的 O ( N ) {\displaystyle O({\sqrt {N}})} 還快，然而這些搜索算法並不能使量子計算機在多項式時間內解決NP-Complete 問題。 不像其他的量子算法可能會比相應的經典算法有指數級的加快，格罗弗算法二次方的加快，不過當 N {\displaystyle N} 很大時二次方的加快也相當可觀。格罗弗算法可以在大約 264次迭代內窮舉破解一個128比特的對稱密鑰，在大約 2128次迭代內窮舉破解一個256比特的密鑰。因此，有人提倡對稱密鑰的長度應該加倍以因應未來的量子攻擊。 像其他的量子算法一樣，格罗弗算法是概率性的，意味著這個算法以小於1的概率給出正確答案。雖然實際上對於需要多少次重複才能給出正確的答案並沒有一個上界，但是期望的重複次數並不隨 N {\displaystyle N} 成長。在格罗弗發表此算法的原始論文中稱此算法為數據庫搜索算法，此說法至今仍普遍。此處數據庫相當於是一張存有未知函數的所有輸出值的表，以對應的輸入值為索引。 雖然格罗弗算法的用處一直被認為是數據庫搜索，但是它也可以被認為是函數取反。 考虑一个有N个元素的无序数据集，我们设函数 f : { 0 , 1 , … , N − 1 } → { 0 , 1 } {\displaystyle {\displaystyle f:\{0,1,\ldots ,N-1\}\to \{0,1\}}} 。我们假设，在所有的下标x中，有且仅有一个下标x有 f ( x ) = 1 {\displaystyle f(x)=1} ，我们记这个下标x为 ω {\displaystyle \omega } ，并且称 ω {\displaystyle \omega } 为这个搜索问题的解。而格罗弗算法的目标便是找到下标 ω {\displaystyle \omega } 。为此，我们构建一个酉算子 U ω {\displaystyle U_{\omega }} ，如下 { U ω | x ⟩ = − | x ⟩ for  x = ω U ω | x ⟩ = | x ⟩ for  x ≠ ω {\displaystyle {\displaystyle {\begin{cases}U_{\omega }|x\rangle =-|x\rangle &{\text{for }}x=\omega \\U_{\omega }|x\rangle =|x\rangle &{\text{for }}x\neq \omega \end{cases}}}} 或者可以简写为 U ω | x ⟩ = ( − 1 ) f ( x ) | x ⟩ {\displaystyle U_{\omega }|x\rangle =(-1)^{f(x)}|x\rangle } 事实上，我们一般构建另一种酉算子 U f {\displaystyle U_{f}} ，如下所示 U f | x ⟩ | y ⟩ = | x ⟩ | y ⊕ f ( x ) ⟩ {\displaystyle U_{f}|x\rangle |y\rangle =|x\rangle |y\oplus f(x)\rangle } 我们一般将 U f {\displaystyle U_{f}} 作用在态矢量和 | − ⟩ {\displaystyle |-\rangle } 的叠加态上，以实现相回传(Phase Kickback)，具体流程如下 U f | x ⟩ | − ⟩ = U f | x ⟩ [ | 0 ⟩ − | 1 ⟩ 2 ] = { 1 2 ( | x ⟩ | 1 ⟩ − | x ⟩ | 0 ⟩ ) for  x = ω 1 2 ( | x ⟩ | 0 ⟩ − | x ⟩ | 1 ⟩ ) for  x ≠ ω = ( − 1 ) f ( x ) | x ⟩ | − ⟩ {\displaystyle {\begin{aligned}U_{f}|x\rangle |-\rangle &=U_{f}|x\rangle \left[{\frac {|0\rangle -|1\rangle }{\sqrt {2}}}\right]\\&={\begin{cases}{\frac {1}{\sqrt {2}}}(|x\rangle |1\rangle -|x\rangle |0\rangle )&{\text{for }}x=\omega \\{\frac {1}{\sqrt {2}}}(|x\rangle |0\rangle -|x\rangle |1\rangle )&{\text{for }}x\neq \omega \end{cases}}\\&=(-1)^{f(x)}|x\rangle |-\rangle \end{aligned}}} 与一般的 U ω {\displaystyle U_{\omega }} 相比， U f {\displaystyle U_{f}} 使用了一个辅助的qubit。 格罗弗算法的步骤如下 构建量子叠加态 | s ⟩ = H ⊗ N | 0 ⟩ ⊗ N = 1 N ∑ x = 0 N − 1 | x ⟩ {\displaystyle |s\rangle =H^{\otimes N}|0\rangle ^{\otimes N}={\frac {1}{\sqrt {N}}}\sum _{x=0}^{N-1}|x\rangle } 2. 做 p ( N ) {\displaystyle p(N)} 次“格罗弗迭代”，具体操作如下 将 U ω {\displaystyle U_{\omega }} 作用在 | s ⟩ {\displaystyle |s\rangle } 上 将 U s = 2 | s ⟩ ⟨ s | − I {\displaystyle U_{s}=2|s\rangle \langle s|-I} 作用在 | s ⟩ {\displaystyle |s\rangle } 上 其中， U s {\displaystyle U_{s}} 被称为格罗弗扩散算子 3. 测量 | s ⟩ {\displaystyle |s\rangle } ，得到求得的结果 一般而言， p ( N ) {\displaystyle p(N)} 的值会很大程度上影响得到正确结果的概率，且并不是 p ( N ) {\displaystyle p(N)} 越大得到正确结果的概率越大。分析表明最优的 p ( N ) {\displaystyle p(N)} 有 p ( N ) ≤ ⌈ π 4 N ⌉ {\displaystyle p(N)\leq {\Big \lceil }{\frac {\pi }{4}}{\sqrt {N}}{\Big \rceil }} ，因而格罗弗算法的复杂度为 O ( N ) {\displaystyle {\mathcal {O}}({\sqrt {N}})} 格罗弗算法使用的技巧为振幅减枝(Amplitude amplification)，实则是通过将其他态的振幅转移为解的振幅，而是在测量时使得坍塌为解的概率增加。具体如下 考虑，我们将态矢量改为以 | x ⟩ , | ω ⟩ {\displaystyle |x\rangle ,|\omega \rangle } 为基，其中 ω {\displaystyle \omega } 为解。写作 | s ⟩ = a | ω ⟩ + b | x ⟩ {\displaystyle |s\rangle =a|\omega \rangle +b|x\rangle } 在这种表示下，我们可以将 U s {\displaystyle U_{s}} 和 U ω {\displaystyle U_{\omega }} 表示为 U s : a | ω ⟩ + b | x ⟩ ↦ [ | ω ⟩ | x ⟩ ] [ − 1 0 2 / N 1 ] [ a b ] . {\displaystyle U_{s}:a|\omega \rangle +b|x\rangle \mapsto [|\omega \rangle \,|x\rangle ]{\begin{bmatrix}-1&0\\2/{\sqrt {N}}&1\end{bmatrix}}{\begin{bmatrix}a\\b\end{bmatrix}}.} U ω : a | ω ⟩ + b | x ⟩ ↦ [ | ω ⟩ | x ⟩ ] [ − 1 − 2 / N 0 1 ] [ a b ] . {\displaystyle U_{\omega }:a|\omega \rangle +b|x\rangle \mapsto [|\omega \rangle \,|x\rangle ]{\begin{bmatrix}-1&-2/{\sqrt {N}}\\0&1\end{bmatrix}}{\begin{bmatrix}a\\b\end{bmatrix}}.} U s U ω = [ − 1 0 2 / N 1 ] [ − 1 − 2 / N 0 1 ] = [ 1 2 / N − 2 / N 1 − 4 / N ] . {\displaystyle U_{s}U_{\omega }={\begin{bmatrix}-1&0\\2/{\sqrt {N}}&1\end{bmatrix}}{\begin{bmatrix}-1&-2/{\sqrt {N}}\\0&1\end{bmatrix}}={\begin{bmatrix}1&2/{\sqrt {N}}\\-2/{\sqrt {N}}&1-4/N\end{bmatrix}}.} 我们可以通过设 t = arcsin ⁡ ( 1 / N ) {\displaystyle t=\arcsin(1/{\sqrt {N}})} ，将上式改写为（所谓Jordan form） U s U ω = M [ e 2 i t 0 0 e − 2 i t ] M − 1 {\displaystyle U_{s}U_{\omega }=M{\begin{bmatrix}e^{2it}&0\\0&e^{-2it}\end{bmatrix}}M^{-1}} where M = [ − i i e i t e − i t ] . {\displaystyle M={\begin{bmatrix}-i&i\\e^{it}&e^{-it}\end{bmatrix}}.} 作用r次 U s {\displaystyle U_{s}} U ω {\displaystyle U_{\omega }} 则将得到 ( U s U ω ) r = M [ e 2 r i t 0 0 e − 2 r i t ] M − 1 . {\displaystyle (U_{s}U_{\omega })^{r}=M{\begin{bmatrix}e^{2rit}&0\\0&e^{-2rit}\end{bmatrix}}M^{-1}.} 注意到，我们的目的是区别解以及其他一般的数据，而为了达到这个目的，我们使 | x ⟩ , | ω ⟩ {\displaystyle |x\rangle ,|\omega \rangle } 的振幅差别越大越好，换言之，要使得2rt和−2rt的差别足够大，便有 2 r t ≈ π / 2 {\displaystyle 2rt\approx \pi /2} , 或 r = π / 4 t = π / 4 arcsin ⁡ ( 1 / N ) ≈ π N / 4 {\displaystyle r=\pi /4t=\pi /4\arcsin(1/{\sqrt {N}})\approx \pi {\sqrt {N}}/4} . 这样以来，就有 ( U s U ω ) r = M [ i 0 0 − i ] M − 1 . {\displaystyle (U_{s}U_{\omega })^{r}=M{\begin{bmatrix}i&0\\0&-i\end{bmatrix}}M^{-1}.} 作用在初始态上将会有 [ | ω ⟩ | x ⟩ ] ( U s U ω ) r [ 0 1 ] ≈ [ | ω ⟩ | x ⟩ ] M [ i 0 0 − i ] M − 1 [ 0 1 ] = | ω ⟩ 1 cos ⁡ ( t ) − | x ⟩ sin ⁡ ( t ) cos ⁡ ( t ) . {\displaystyle [|\omega \rangle \,|x\rangle ](U_{s}U_{\omega })^{r}{\begin{bmatrix}0\\1\end{bmatrix}}\approx [|\omega \rangle \,|x\rangle ]M{\begin{bmatrix}i&0\\0&-i\end{bmatrix}}M^{-1}{\begin{bmatrix}0\\1\end{bmatrix}}=|\omega \rangle {\frac {1}{\cos(t)}}-|x\rangle {\frac {\sin(t)}{\cos(t)}}.} 简短的计算表明，格罗弗算法将具有 O ( 1 N ) {\displaystyle O\left({\frac {1}{N}}\right)} 量级的误差. Amplitude amplification（英语：Amplitude amplification） 秀爾演算法 Bennett C.H.; Bernstein E.; Brassard G.; Vazirani U. The strengths and weaknesses of quantum computation. SIAM Journal on Computing（英语：SIAM Journal on Computing）. 1997, 26 (5): 1510–1523 [2019-06-12]. arXiv:quant-ph/9701001 . doi:10.1137/s0097539796300933. （原始内容存档于2016-03-06）.  Aaronson, Scott. Quantum Computing and Hidden Variables (PDF). （原始内容存档 (PDF)于2020-12-03）.  Daniel J. Bernstein. Grover vs. McEliece (PDF). 2010-03-03 [2019-06-12]. （原始内容 (PDF)存档于2010-10-10）.  维基语录上的格罗弗算法语录 Davy Wybiral. Quantum Circuit Simulator. [2017-01-13]. （原始内容存档于2017-01-16）.  Craig Gidney. Grover’s Quantum Search Algorithm. 2013-03-05 [2019-06-12]. （原始内容存档于2020-11-17）.  François Schwarzentruber. Grover's algorithm. 2013-05-18 [2019-06-12]. （原始内容存档于2020-11-16）.  Alexander Prokopenya. Quantum Circuit Implementing Grover's Search Algorithm. Wolfram Alpha. [2019-06-12]. （原始内容存档于2020-11-20）.  Hazewinkel, Michiel (编), Quantum computation, theory of, 数学百科全书, Springer, 2001, ISBN 978-1-55608-010-4  Roberto Maestre. Grover's Algorithm implemented in R and C. 2018-05-11 [2019-06-12]. （原始内容存档于2021-10-17）.