【科普】量子計算通識-8-Deutsch-Jozsa算法解析

歡迎關注我的專欄( つ•̀ω•́)つ【人工智能通識】
更多相關文章請點擊【量子計算通識】
上一篇:【科普】量子計算通識-7-Deutsch算法解析


這一篇我們來看一下多伊奇問題n位算法是怎麼推導出來的。關於多伊奇問題請看【上一篇文章】的開始部分。

多位電路

我們先看一下上篇文章使用過的這張電路圖:

上篇文章我們只考慮輸入一個|0>比特,忽略了n

計算\Psi_1

在這個電路里面,輸入的是n|0>和1個|1>比特,即:

\begin{align} \Psi_0&=\underbrace{|0>\otimes|0>\otimes \dots |0>}_{n} \otimes|1>\\ &=|0>^{\otimes n}|1> \end{align}

很多時候,量子位之間的\otimes被省略。

每個量子位都經過Hadamard門,即|0>變爲\frac{|0>+|1>}{\sqrt{2}},即|1>變爲\frac{|0>-|1>}{\sqrt{2}},這就得到\Psi_1

\begin{align} \Psi_1&=H^{\otimes n}|0>^{\otimes n}H|1>\\ &=\underbrace{(\frac{|0>+|1>)}{\sqrt{2}})(\frac{|0>+|1>)}{\sqrt{2}})\dots}_{n}(\frac{|0>-|1>}{\sqrt{2}})\\ &=\frac{1}{\sqrt{2^n}}\underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots}_{n}(\frac{|0>-|1>}{\sqrt{2}})\\ \end{align}

我們注意到:
\frac{1}{\sqrt{2^n}} \underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots \begin{pmatrix}1\\1\end{pmatrix}}_{n}= \frac{1}{\sqrt{2^n}} \left.\begin{pmatrix}1\\1\\\dots\\1\end{pmatrix} \right \}2^n

這表示什麼呢?還記得拋兩枚硬幣的情況嗎?

\begin{align} \begin{pmatrix}\frac{1}{4}\\\frac{1}{4}\\\frac{1}{4}\\\frac{1}{4}\end{pmatrix} =\frac{1}{4}\begin{pmatrix}1\\1\\1\\1\end{pmatrix} =\frac{1}{4}\left[\begin{pmatrix}1\\0\\0\\0\end{pmatrix}+\begin{pmatrix}0\\1\\0\\0\end{pmatrix}+\begin{pmatrix}0\\0\\1\\0\end{pmatrix} +\begin{pmatrix}0\\0\\0\\1\end{pmatrix}\right] \end{align}

這個表示4種狀態的每一種狀態可能性都是\frac{1}{4},它處於不確定的疊加態。對每一種狀態來說,都可以對應一個十進制數字,那麼就是0,1,2,3,我們用下標表示10進制,也就有:

\frac{1}{4}\begin{pmatrix}1\\1\\1\\1\end{pmatrix}=\frac{1}{4}(|0_{10}>+|1_{10}>+|2_{10}>+|3_{10}>)

推而廣之,忽略10進制下標,變成求和,從x=0x=2^n-1,就得到:

\frac{1}{\sqrt{2^n}} \underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots \begin{pmatrix}1\\1\end{pmatrix}}_{n}=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}|x>

替換到\Psi_1中得到:
\begin{align} \Psi_1&=H^{\otimes n}|0>^{\otimes n}H|1>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}|x> (\frac{|0>-|1>}{\sqrt{2}})\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x> (|0>-|1>)\\ \end{align}

計算\Psi_2

U操作的作用是:

U:|x>|y>\Rightarrow|x>|y\oplus f(x)>

我們在上一篇文章推導過,|0>-|1>U操作後,無論f(0)=0或f(0)=1都有:
|0\oplus f(0)>-|1\oplus f(0)>=(-1)^{f(0)}(|0>-|1>)

同樣f(1)=0或f(1)=1時候都有:
|0\oplus f(x)>-|1\oplus f(x)>=(-1)^{f(1)}(|0>-|1>)

實際上對於任意f(x)\in\{0,1\}都有:
|0\oplus f(x)>-|1\oplus f(x)>=(-1)^{f(x)}(|0>-|1>)

即:
U(|0>-|1>)=(-1)^{f(x)}(|0>-|1>)

我們把這個式子帶入\Psi_1得到經過U操作的\Psi_2:

\begin{align} \Psi_2 &=U\Psi_1\\ &=U\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x> (|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x>U (|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x>(-1)^{f(x)}(|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>(|0>-|1>)\\ \end{align}

計算\Psi_3

在這裏我們可以直接忽略最後一個比特了,就是忽略掉結尾的\frac{1}{\sqrt{2}}(|0>-|1>),專注前半段內容:

\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>

我們對每個|x>執行Hadamard操作。注意這裏的|x>可以是|1>,也可以是|10>、|17>、|198>...任意十進制數字,如果轉爲二進制則是|1>、|1010>、|10001>、|11000110>...

怎麼計算H^{\otimes n}|x>?我們先從另一個角度看Hadamard門:

\begin{align} H|0>&=\frac{|0>+|1>}{\sqrt{2}}\\ &=\frac{1}{\sqrt{2}}((-1)^{0\cdot0}\cdot|0>+(-1)^{0\cdot1}|1>)\\ &=\frac{1}{\sqrt{2}}\sum_{z\in\{0,1\}} ((-1)^{0\cdot z}|z>) \end{align}

\begin{align} H|1>&=\frac{|0>-|1>}{\sqrt{2}}\\ &=\frac{1}{\sqrt{2}}((-1)^{1\cdot0}\cdot|0>+(-1)^{1\cdot1}|1>)\\ &=\frac{1}{\sqrt{2}}\sum_{z \in\{0,1\}}((-1)^{1\cdot z}|z>) \end{align}

我們注意到|0>|1>的操作區別就是(-1)^{1\cdot z}(-1)^{0\cdot z}的區別,那麼我們就有:

\begin{align} H|x_i>=\frac{1}{\sqrt{2}}\sum_{z\in\{0,1\}\ }((-1)^{ x_i\cdot z}|z>) \end{align}

但這只是針對單個比特的,如果是多個比特呢?先看2個比特的情況:

\begin{align} &H|x_1>H|x_2>\\ &=\frac{1}{\sqrt{2^2}}(\sum_{z_1 \in\{0,1\} }((-1)^{ x_1\cdot z_1}|z_1>))(\sum_{z_2 \in\{0,1\} }((-1)^{ x_2\cdot z_2}|z_2>))\\ &=\frac{1}{\sqrt{2^2}}\sum_{z_1,z_2\in\{0,1\} }(-1)^{x_1\cdot z_1}(-1)^{x_2\cdot z_2}|z_1>|z_2>\\ &=\frac{1}{\sqrt{ 2^2}}\sum_{z_1,z_2\in\{0,1\} }(-1)^{x_1\cdot z_1+x_2\cdot z_2}|z_1>|z_2> \end{align}

如果是n位的話,那麼就有:

\begin{align} &H^{\otimes n}|x_1,x_2,x_3,\dots x_n>\\ &=\frac{1}{\sqrt{2^n}}\sum_{z_1,z_2,\dots z_n }(-1)^{x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n}|z_1,z_2\dots z_n> \end{align}

我們x表示x_1,x_2...x_n,我們z表示z_1,z_2...z_n,設定格式x\cdot z表示x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n,用那麼就有:

\begin{align} &H^{\otimes n}|x>=\frac{1}{\sqrt{2^n}}\sum_{z=0}^{2^n-1}(-1)^{x\cdot z}|z> \end{align}

注意這裏z_1,z_2,...z_n \in \{0, 1\}總計需要2^n次求和。比如前面的兩位的例子z_1,z_2\in \{ 0, 1\}就要進行四次:
z_1=0,z_2=0;z_1=0,z_2=1;z_1=1,z_2=0;z_1=1,z_2=1;

好了,我們回到\Psi_3的上部分:

\begin{align} &\Psi_{3'}=H^{\otimes n}\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}H^{\otimes n} |x>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}\left[\frac{1}{\sqrt{2^n}}\sum_{z=0}^{2^n-1}(-1)^{x\cdot z}|z>\right]\\ &=\frac{1}{2^n} \sum_{x=0}^{2^n-1}(-1)^{f(x)}\left[\sum_{z=0}^{2^n-1} (-1)^{x\cdot z}|z>\right]\\ &=\frac{1}{2^n} \sum_{z=0}^{2^n-1}\left[\sum_{x=0}^{2^n-1}(-1)^{f(x)+x\cdot z}\right]|z>\\ \end{align}

最終測量

注意上面式子裏的x_iz_i都是0或1。
這裏的求和\sum來自最早的Hadamard操作,表示從0到2^n-1;而f(x)中的x則是來自U操作,它代表任意數字。|z>表示的是具有n個量子位的|z_1,z_2...z_n>,類似|100...01011>這種。

關於測量,其實就是計算每個方向上的可能性。而每個方向就是每種狀態,對於單比特就是每個軸向,橫正向和豎正向。

數學上:
\begin{align} &\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{pmatrix}=\frac{1}{\sqrt{2}}\begin{pmatrix}1\\1\end{pmatrix} =\frac{1}{\sqrt{2}}(\begin{pmatrix} 1\\0 \end{pmatrix}+\begin{pmatrix} 0\\1\end{pmatrix})\\ &=\frac{1}{\sqrt{2}}|0>+\frac{1}{\sqrt{2}}|1> \end{align}

測量得到|0>=\begin{pmatrix}1\\0\end{pmatrix}|1>=\begin{pmatrix}0\\1\end{pmatrix}兩個方向上的概率都是(\frac{1}{\sqrt{2}})^2=\frac{1}{2}

對於四項的豎列也是同樣,比如拋兩枚硬幣得到的結果就有4個方向或者說四個狀態:

\begin{pmatrix}1\\0\\0\\0\end{pmatrix} ,\begin{pmatrix}0\\1\\0\\0\end{pmatrix},\begin{pmatrix}0\\0\\1\\0\end{pmatrix},\begin{pmatrix}0\\0\\0\\1\end{pmatrix}

這也對應了四個比特表示|00>、|01>、|10>、|11>,也可以用四個十進制數字表示|0>、|1>、|2>、|3>。如果有一個a|00>+b|01>+c|10>+d|11>那麼它在四個狀態上的概率就是a^2、b^2、c^2、d^2,並且概率之和是1,就是a^2+b^2+c^2+d^2=1

好了,回到我們的\Psi_3'

\begin{align} &\Psi_{3'}=\frac{1}{2^n} \sum_{z=0}^{2^n-1}\left[\sum_{x=0}^{2^n-1}(-1)^{f(x)+x\cdot z}\right]|z>\\ \end{align}

它也可以視爲nz求和,類似a|z_0>+b|z_1>...+d|z_n>這種情況。

我們只關注假設|z_0>=|0>^{\otimes n}=|000...0>的情況,那麼求和\sum的每一次z_i都是0,就有x\cdot z=x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n也都是0,測量|z>狀態的概率,就是對它的係數求平方:

\begin{align} \left (\frac{1}{2^n} \left[\sum_{x=0}^{2^n-1}(-1)^{f(x)}\right]\right )^2 \end{align}

f(x)是Constant常數操作的時候,如果f(x)=0(-1)^{f(x)}=1,求和結果是2^n,最終平方後是1;如果f(x)=1(-1)^{f(x)}=-1,求和結果是-2^n,最終平方後還是1。就是說如果f(x)是常數操作,那麼最終測得|z>=|0>^{\otimes n}的概率爲1,也就是必然測得|0>^{\otimes n}

f(x)是Constant常數操作的時候,一半情況f(x)=0,另一半情況f(x)=1,而進行2^n次求和,這是全部可能,也是個偶數,(-1)^0=1(-1)^1=-1各佔一半,正好抵消,結果將是0。也就是說如果f(x)是Constant常數,那麼就不會測得|0>^{\otimes n}

雖然在數學上似乎是推導完成了,但是很多地方仍然缺乏較好的解釋,後續將繼續學習和改進。


歡迎關注我的專欄( つ•̀ω•́)つ【人工智能通識】
更多相關文章請點擊【量子計算通識】


每個人的智能新時代

如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,歡迎轉載~


END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章