【科普】量子計算通識-6-Deutsch多伊奇算法

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


以下內容參照微軟研究院主題演講《Quantum Computing for Computer Scientists(計算機科學家量子計算導讀)》的結構進行整理和擴充的。
本篇是第六部分。上一篇【科普】量子計算通識-5

多伊奇問題Deutsch Problem

量子計算能做什麼?有什麼優勢?
我們從最簡單的多伊奇問題開始。

首先,我們知道,對於一個比特進行操作,有四種方法:不變,翻轉,等0,等1,它們都可以表示成用一個矩陣相乘的模式。

  • f(x)=x
    \begin{pmatrix}1,0\\0,1\end{pmatrix} \begin{pmatrix}1\\0\end{pmatrix}= \begin{pmatrix}1\\0\end{pmatrix}=0 \qquad \begin{pmatrix}1,0\\0,1\end{pmatrix} \begin{pmatrix}0\\1\end{pmatrix}= \begin{pmatrix}0\\1\end{pmatrix}=1
  • f(x)=﹁x
    \begin{pmatrix}0,1\\1,0\end{pmatrix} \begin{pmatrix}1\\0\end{pmatrix}= \begin{pmatrix}0\\1\end{pmatrix}=1 \qquad \begin{pmatrix}0,1\\1,0\end{pmatrix} \begin{pmatrix}0\\1\end{pmatrix}= \begin{pmatrix}1\\0\end{pmatrix}=0
  • f(x)=0
    \begin{pmatrix}1,1\\0,0\end{pmatrix} \begin{pmatrix}1\\0\end{pmatrix}= \begin{pmatrix}1\\0\end{pmatrix}=0 \qquad \begin{pmatrix}1,1\\0,0\end{pmatrix} \begin{pmatrix}0\\1\end{pmatrix}= \begin{pmatrix}1\\0\end{pmatrix}=0
  • f(x)=1

這四種操作又可以根據輸入輸出的對比分爲兩種情況:

  • 情況A:變量結果variable,不變和翻轉都屬於這種,它們的輸出結果可能是0也可能是1。這種變量結果也可以叫做平衡結果Balanced,因爲結果有一半情況下是輸出0,另一半情況下輸出1。另外注意,這兩種操作都是可逆的,就是說如果你知道是翻轉操作並且結果輸出1,那麼就可以推算輸入是0。

  • 情況B:常量結果constant,等0和等1都屬於這種,他們的輸出結果是固定的,永遠等於0或者等於1,不會因爲輸入不同而不同。這兩種操作是不可逆的,也就是說即使你知道是等0操作並且知道操作結果輸出0,也不能推理出輸入的數值是0還是1。

現在問題是,假設有一個函數操作f',我們只知道它是四種操作裏的一種,但我們可以用輸入輸出進行測試,那麼,要確定f'屬於情況A(變量可逆)還是情況B(常數不可逆),我們最少做幾次測試?

這個問題最早是英國物理學家David Deutsch提出來的,當然他也提出了量子算法的解決方案。

經典計算機解決方案

用經典計算機來判斷f'到底是情況A(變量結果操作)還是情況B(常量結果操作),必須要經過兩次嘗試,第一次輸入0觀看結果,第二次輸入1觀看結果。

  • 第一次輸入0輸出是0,那麼f'可能是不變,也可能是等0
  • 第一次輸入0輸出是1,那麼f'可能是翻轉,也可能是等1
  • 第一次輸入1輸出是0,那麼f'可能是翻轉,也可能是等0
  • 第一次輸入1輸出是1,那麼f'可能是不變,也可能是等1

所以,必須至少嘗試兩次,第一次輸入0,第二次輸入1或者相反:

  • 0\to0,1\to1\quad\Rightarrow f(x)=x,不變,情況A變量
  • 0\to0,1\to0\quad\Rightarrow f(x)=0,等0,情況B常量
  • 0\to1,1\to1\quad\Rightarrow f(x)=1,等1,情況B常量
  • 0\to1,1\to0\quad\Rightarrow f(x)=﹁x,翻轉,情況A變量

我們經過兩次經典計算可以確定f'屬於變量操作或者常量操作。

雖然我們也可以確定到它屬於四種操作中的哪一種,但其實這個信息是不必要的,又是不得已而爲之的,因爲我們只需要判斷變量或者常量即可。

重新組裝

在量子計算中我們要求所有操作都是可逆的,那麼我們先對四種位操作進行重新佈線,也就是說設計四種可逆的量子位操作線路,或者說四種算法。當然,這四種算法也必須滿足實現四種操作:

在這裏我們輸入兩個量子位InputA和InputB,其中InputA是固定的|0>,你可以把它視爲冗餘的輔助輸入;同樣輸出的OutputA是真正的操作結果,而OutputB也可以視爲冗餘的副產品。

爲什麼設計成這樣的線路?先不急,我們先看在這個結構下如何實現四種可逆的量子位操作。

  • 等0操作線路,直接把InputA(|0>)輸出到OuputA,這就確保了OutputA固定爲|0>;而至於冗餘的OutputB也直接連接到InputB即可。如下圖:

  • 等1操作線路,和等0線路差不多,把InputA線路上面添加一個非門就可以確保OutputA固定爲|1>了。如下圖:

  • 不變操作線路,這個就有點複雜了,注意這裏是個CNOT可控非門,InputB是控制位,InputA是目標被控位。所以,如果InputB是|0>,那麼InputA
    穿過連線不變輸出OutputA的就還是|0>,而正好和控制位InputB相同;如果InputB是|0>是|1>,那麼InputA的|0>穿過連線被翻轉輸出OutputA就是|1>,也正好和控制位InputB相同。
  • 翻轉操作線路,只要在不變操作的基礎上增加一個翻轉操作就可以了。

注意上面四個圖的OutputA,分別是|0>、|1>、|x>、|﹁x>,這正對應了量子比特的四種操作。

Deutsch多伊奇算法

有了上面四種操作全新的可逆線路算法,我們用一次測試就可以確定F'是變量操作還是常量操作了。

首先我們把F'(x)當做一個未知的黑盒子,並向兩端增加一些翻轉操作(X)、Hadamard門操作(H)和一些測量Measure操作(M),組成下面的測試電路:

從圖中可知,我們的兩個輸入InputA和InputB都是|0>,那麼我們來看一下在等0、等1、不變、翻轉四種不同的操作情況下輸出的結果都是什麼。

在此之前,我們先把左側的翻轉(X)和Hadamard(H)處理出來:

InputA和InputB,都是|0>,經過-X-H-後得到\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}

我們把這個點作爲進入未知黑盒F'的起點,下面用藍色圓點表示。

  • 假設F'是等0操作,那麼經過F'(x)沒變化,然後經過右邊的Hadamard門結果是\begin{pmatrix}0\\ 1\end{pmatrix},測量結果是1,聯合OutputA和OutputB得到|11>:

  • 假設F'是等1操作,那麼如下圖,OutputA多經歷一次翻轉(X),再經過Hadamard門(H)之後到達了 \begin{pmatrix}0 \\-1\end{pmatrix},但測量結果還是1,聯合OutputA和OutputB仍然得到|11>

  • 假設F'是不變操作,那麼情況會複雜一些,我們有下圖:

但OutputA是怎麼回事?首先我們知道這是個CNOT可控非門操作,而CNOT就是乘以一個特別的矩陣,我們有如下公式:

\begin{align} &C\begin{pmatrix} \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}\otimes \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix} \end{pmatrix}=C\begin{pmatrix} \frac{1}{2}\\\frac{-1}{2}\\\frac{-1}{2}\\\frac{1}{2}\\ \end{pmatrix}\\ &=\frac{1}{2}\begin{pmatrix}1,0,0,0\\0,1,0,0\\0,0,0,1\\0,0,1,0\end{pmatrix} \begin{pmatrix}1\\-1\\-1\\1\end{pmatrix}\\ &=\frac{1}{2} \begin{pmatrix}1\\-1\\1\\-1\end{pmatrix}= \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{pmatrix}\otimes \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix} \end{align}
注意這裏最後一步的巧妙之處在於開頭的CNOT操作相當於把兩個\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}的張量積轉換爲\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{pmatrix}\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}的張量積,簡化後就是:

C\begin{pmatrix} \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}\otimes \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix} \end{pmatrix}=\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{pmatrix}\otimes \begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{-1}{\sqrt{2}}\end{pmatrix}

所以有上圖,OutputA是\begin{pmatrix}1\\ 0\end{pmatrix}測量後是|0>,聯合OutputA和OutputB仍然得到|01>

  • 假設F'是翻轉操作,那麼相當於比不變操作多了一個翻轉,如下圖所示,注意這裏OutputA的翻轉(X)操作仍然在原地,所以最終聯合OutputA和OutputB仍然得到|01>

綜合上面四種情況,我們得到:

  • 等0操作結果是|11>
  • 等1操作結果是|11>
  • 不變操作結果是|01>
  • 翻轉操作結果是|01>

所以,輸入InputA和InputB兩個都是|0>,如果結果是|11>,那麼F'就是個常量操作,如果結果是|01>,那麼F'就是個變量操作。

只要一次操作就完成了!速度快了一倍!

下一篇我們再深入瞭解多伊奇喬扎Deutsch-Josza算法,它可以針對更多量子操作實現類似的加速。


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


每個人的智能新時代

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


END

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