量子搜索算法 Grover search


問題定義:

Problem:

\(f: \{ 0,1,2,3,……,N-1 \} \rightarrow \{0,1\}\)

找到 \(f(x)=1\) 的x

解法

經典解法:

經典解法很簡單,就是把每一個都看一遍,如果只有一個x對應的f(x)=1,那么平均是要看一半,才能找到那個x。

時間復雜度O(N)

量子解法:

使用Grover search 算法,時間復雜度在 \(O(\sqrt N)\)

Grover search 算法

Grover search 算法一共分為兩步:

  1. Phase Inversion
  2. Inversion about the Mean

然后不斷的迭代這兩步我們就能夠得到結果了。

首先我們先看看這兩個步驟分別在做什么:

我們把 $f(x)=1 $ 的 \(|x\rangle\) 稱為 \(x^*\) ,我們要找的也就是這個 \(x^*\)

Phase Inversion:

這一步主要是把 \(x^*\) 的概率幅翻轉,變成負數,而其他的保持不變。

即,把 \(\sum_{x } \alpha_x|x\rangle\) 變成 \(\sum_{x \neq x^*} \alpha_x|x\rangle -\alpha_{x^*}|x^*\rangle\)

Inversion about the Mean

這一步呢,就是把 \(\alpha_x\) 變成 \(2\mu- \alpha_x\)

\(\mu\) 是所有概率幅的平均值,\(\mu= \frac{\sum_x \alpha_x}{N}\)

用圖可能更好表達這兩個步驟究竟在做什么:

圖1到圖2,就是Phase Inversion,把\(x^*\)的概率幅翻轉到了下面,圖2中的虛線就是我的概率幅的平均值,圖2到圖3 就是我們的Inversion about the Mean,對着平均值翻轉一次,其余x的概率幅是高於平均值的,所以 \(2\mu- \alpha_x\) 讓他們變小了,而我們的 \(x^*\) 他的概率幅是個負數,所以 \(2\mu- \alpha_x\) 后他增加了。

不斷的重復這個步驟, \(x^*\) 他的概率幅會越來越大,最后我們測量的時候就會很容的找到他。

進行了 \(\sqrt N\) 后,他的概率幅就會達到 \(\frac{1}{ \sqrt 2}\) ,算概率就是1/2。

那么接下來的問題就是,這些操作是怎么實現的?

Phase Inversion:

這個步驟要做的事情就是,

\(\sum_{x } \alpha_x|x\rangle\) 變成 \(\sum_{x \neq x^*} \alpha_x|x\rangle -\alpha_{x^*}|x^*\rangle\)

符號是和f(x)是否為1相關的,進一步化簡就是 \(\sum_x (-1)^{f(x)} \alpha_x|x\rangle\)

有沒有一絲熟悉感?

把f(x)的結果給放到相位上去,這是我們在Parity Problem中就遇到的問題。

當時的解決方法是把答案比特變成 \(|-\rangle\)

一般情況,如果我們打算放置答案的比特是 \(|b\rangle\),那么輸入的比特就是\(|b \oplus f(x)\rangle\)

如果f(x)=0 那么\(|( \frac{1}{\sqrt2}|0\rangle-\frac{1}{\sqrt2}|1\rangle) \oplus f(x) \rangle = \frac{1}{\sqrt2}|0\rangle-\frac{1}{\sqrt2}|1\rangle = |-\rangle\)

如果f(x)=1 那么\(( \frac{1}{\sqrt2}|0\rangle-\frac{1}{\sqrt2}|1\rangle) \oplus f(x) \rangle = \frac{1}{\sqrt2}|1\rangle-\frac{1}{\sqrt2}|0\rangle = -|-\rangle\)

最后一個比特的值如果在\(|+\rangle |-\rangle\)坐標下測量,一定是 \(|-\rangle\),f(x)的差別也變到了符號上,即 \((-1)^{f(x)}\)

Inversion about the Mean

\(\alpha_x\) 變成 \(2\mu- \alpha_x\) ,這個就要比前一個麻煩了

這其實是要求我把現在的態對着 \(\mu\) 翻轉。

對着 \(\mu\) 翻轉會嗎?

不太會。

但是我會對着 \(|0\rangle\) 的翻轉啊。

對角線第一個值為1,其余為-1,非對角線的都為0。

\(\left[ \begin{array}{} 1 & 0 & …& 0 \\ 0 & -1 & …& 0 \\…\\0 & 0 & …& -1 \end{array}\right]\left[ \begin{array}{} a_0\\a_1\\…\\a_{n-1} \end{array}\right]=\left[ \begin{array}{} a_0\\-a_1\\…\\-a_{n-1} \end{array}\right]\)

這個矩陣輕而易舉的可以讓 \(|0\rangle\) 保持不變,非 \(|0\rangle\) 的符號全都翻轉。

量子變換要求矩陣式酉矩陣,這個矩陣很明顯滿足 \(UU^\dagger=U^\dagger U=I\)

接下來怎么做呢?

我們先把我們的態整體來一個從 \(|\mu\rangle\)\(|0\rangle\) 的旋轉,對着 \(|0\rangle\) 翻轉后,又從 \(|0\rangle\)\(|\mu\rangle\) 翻轉回去。

\(|\mu\rangle\) 是一個怎樣的態?

所有的x的概率都一樣,也就是我們的superposition \(\frac{1}{2^{\frac{n}{2}}} \sum_{x \in \{0,1 \}^n}|x\rangle\)

\(\frac{1}{2^{\frac{n}{2}}} \sum_{x \in \{0,1 \}^n}|x\rangle\)\(|0\rangle\)之間的相互轉換,這就是我們最最熟悉的Hadamard Transform了

第二部分的電路圖如下:

這個矩陣是可以直接計算的:

我這里直接給出答案,得到的矩陣值呢是下圖左邊的這個矩陣:

在對應的 \(\alpha_x\)的結果恰好是 \(\frac{2}{N} \sum _{y=0}^{N} \alpha_y -\alpha_x\)

\(\frac{2}{N} \sum _{y=0}^{N} \alpha_y\) 恰好就是 \(2\mu\)

至此,呈上最完整的電路圖模塊:

第一個H門是數據的初始化,第二個門是為了翻轉 \(x^*\),第三四五個門是為了對 \(| \mu \rangle\) 翻轉,二三四五這四個門就是要給重復的模塊了,不斷的重復他們就可以不斷的提高 \(x^*\)的概率幅,最終找到 \(x^*\)

參考資料:

Quantume Mechanics & Quantume Computation Lecture 11


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM