簡單的量子演算法(二):Simon's Algorithm

夏天喵發表於2019-07-22

前情回顧:

簡單的量子演算法(一):Hadamard 變換、Parity Problem

好的,現在開始正版的故事,Simon’s Algorithm

問題:

有一個secret string,是n位的0,1串 \(s \in \{0,1 \} ^n\)

現在有一個黑盒子,f(x),我們對他唯一的瞭解就是 \(f(x)=f(x \oplus s)\) ,輸入的x也是n位的0,1串 \(x \in \{0,1 \} ^n\)

請問,要多少次,我們可以找到這個secret string?

經典解法:

如果我們能找到 \(x\)\(x \oplus s\) ,那麼非常容易,就可以得到s,只要 \(x\oplus x\oplus s\)

那麼如果找到兩個輸入擁有相同的輸出呢?

這個問題其實是另一個大家都很熟悉的問題的變形,一群人中,要多少人就有兩個人的生日是相同的,印象中,23人兩個人的生日是相同的概率就大於50%了,如果有60個人,那麼兩個人生日相同的概率就超過99%了。

這個問題和生日問題的解法是一樣的,就不再累述了,想要知道的請搜尋生日問題,在這裡,我們給出一個大概的答案,是 \(2^{n/2}\) c次。

量子解法:

量子解法一共有三步:

  • set up random superposition $ \frac{1}{\sqrt2} |r\rangle +\frac{1}{\sqrt2} |r \oplus s \rangle$
  • Fourier Sample to get a random y: \(y·s=0 (\mod 2)\)
  • repeat step n-1 times to generate n-1 linear equation.

接下來,我們來一步一步的看每個步驟在做什麼,以及怎麼做:

簡單的量子演算法(二):Simon's Algorithm

第一步,製造疊加態 $ \frac{1}{\sqrt2} |r\rangle +\frac{1}{\sqrt2} |r \oplus s \rangle$ ,這個可以通過圖a實現。

首先通過第一個\(H ^{\otimes n}\) 門,我們n位元的 \(|0\rangle\) 就成功的變成了疊加態 $\frac{1}{2^{\frac{n}{2}}} \sum_x |x\rangle $

\(|b\rangle\) 一起通過 \(U_f\) ,得到的結果是 $\frac{1}{2^{\frac{n}{2}}} \sum_x |x\rangle|b\oplus f(x) \rangle $

測量 \(|b\oplus f(x) \rangle\) ,只有結果是測量結果的 \(|x\rangle\)還在,其他的 \(|x\rangle\) 都會坍縮,基於這個黑盒子的特性,那麼只有 $|r\rangle $ 和 \(|r \oplus s \rangle\) 會留下來,因為他們的f(x)是一樣的,r是任意的一個序列,測量的結果對應哪個r就是哪個r。

至此我們得到了想要的疊加態 $ \frac{1}{\sqrt2} |r\rangle +\frac{1}{\sqrt2} |r \oplus s \rangle$

第二步,Fourier Sampling

對我們得到的疊加態 $ \frac{1}{\sqrt2} |r\rangle +\frac{1}{\sqrt2} |r \oplus s \rangle$ Fourier Sampling

再次通過\(H ^{\otimes n}\) 我們能得到什麼?

依照我們在簡單的量子演算法(一)中的結論,我們知道 \(H^{\otimes n} |u\rangle = \sum_x \frac{-1^{u·x}}{2^{\frac{n}{2}}} |x\rangle\)

那麼

\[\begin{align} H^{\otimes n} ( \frac{1}{\sqrt2} |r\rangle +\frac{1}{\sqrt2} |r \oplus s \rangle) &= \frac{1}{\sqrt2}\sum_x \frac{-1^{r·x}}{2^{n/2}} |x\rangle+\frac{1}{\sqrt2}\sum_x \frac{-1^{(r\oplus s)·x}}{2^{n/2}} |x\rangle \\ &=\sum_x (\frac{-1^{r·x}}{2^{(n+1)/2}}+\frac{-1^{(r\oplus s)·x}}{2^{(n+1)/2}}) |x\rangle \\ &= \sum_x\frac{1^{r·x}+(-1)^{(r\oplus s)·x}}{2^{(n+1)/2}}|x\rangle \end{align}\]

此時,我們的問題已經集中在了 \(1^{r·x}+(-1)^{(r\oplus s)·x}\) 上。

\((-1)^{(r\oplus s)·x}\) 可以寫成\((-1)^{s·x}*(-1)^{r·x}\) (至於為什麼可以,大家可以試一下都是按位操作,一共也就4種可能

那麼每種可能的概率的公式就可以寫成\(\frac{((-1)^{s·x}+1)*(-1)^{r·x}}{2^{(n+1/2)}}\)

如果 \(s·x=0\) 那麼,這個概率正好為 \(\frac{(-1)^{r·z}}{2^{(n-1)/2}}\)

如果 \(s·x=-1\) 那麼,這個概率正好為0

那麼這又說明了什麼呢?

這個說明只要我們測量 \(|x\rangle\) ,那麼我們得到的x一定是 \(s·x=0\) 的,因為不為0的都被抵消了。

那麼得到了x,又意味著什麼呢?

\(s·x=0\) 事實上我們是得到了一個等式 $s_1x_1+s_2x_2+……+s_nx_n =0 \mod 2 $

第三步:

如果我們把第一次測量得到的x編號為 \(x^1\) ,那麼我們得到了等式 $s_1x_1^1+s_2x_2^1+……+s_nx_n^1 =0 \mod 2 $

第二次測量,得到等式 $s_1x_1^1+s_2x_2^1+……+s_nx_n^1 =0 \mod 2 $

以此類推,測量n-1次,得到了n-1個等式的方程式組。

$s_1x_1^1+s_2x_2^1+……+s_nx_n^1 =0 \mod 2 $

$s_1x_1^1+s_2x_2^1+……+s_nx_n^1 =0 \mod 2 $

……

$s_1x_1^{n-1}+s_2x_2^{n-1}+……+s_nx_n^{n-1} =0 \mod 2 $

n-1個等式,n個未知數( \(s_1,s_2,……,s_n\) ),一般來說會有兩組解,一組是全零的平凡解,這個是我們不要的,而另一組解就是我們的答案 \(s\)

成功的概率:

上述的解方程有一個前提,那就是這是一個線性方程組,如果這個不是線性的,那麼測量n-1次是不可能得答案的。

那麼我測量得到的x組成的方程是線性方程的概率是多少呢?

我們可以列一個表格來看看:

失敗的情況 失敗的概率 成功的概率
\(x^1\) 0 \(\frac{1}{2^{n-1}}\) \(1-\frac{1}{2^{n-1}}\)
\(x^2\) 0、 \(x^1\) \(\frac{2}{2^{n-1}}\) \(1-\frac{1}{2^{n-2}}\)
\(x^3\) 0 、 \(x^1\)\(x^2\)\(x^1+x^2\) \(\frac{4}{2^{n-1}}\) \(1-\frac{1}{2^{n-3}}\)
…… …… ………… \(1-\frac{1}{2^{n-1}}\)
\(x^{n-1}\) 0 、 \(x^1\) ……\(x^1+x^2\)……\(x^1+x^2+……+x^n-2\) \(\frac{2^{n-2}}{2^{n-1}}\) \(1-\frac{1}{2}\)

每次的測量失敗的情況分為以下三種情況:

  • 測量出來全是0
  • 測量出來結果和前面的是一樣的
  • 測量出來的結果是前面測量結果的線性組合

因為這裡算的成功概率都是獨立的成功概率,所以要算整體的成功概率是他們的乘積

\(\frac{1}{2}*\frac{3}{4}*\frac{7}{8}*……*\frac{2^{n-1}-1}{2^{n-1}}\)

上面這個式子求極限是一個q series的問題,感興趣的朋友可以去查一下怎麼求解,這裡直接給出概率,約等於0.28878

注意:

大家是不是以為這樣子就萬事大吉了?

No,這裡還有一個需要注意的地方,可能很多朋友已經意識到了,量子態不是測量完就坍塌嗎?為什麼可以測量n-1次?

事實上,這是把第一部分給做了n-1次,這樣你才可以有n-1個 \(|x\rangle\) 給你測量找出滿足線性條件的x。

參考資料:

Quantume Mechanics & Quantume Computation Lecture 8

相關文章