量子演算法拋轉(以及Oracle函式初步)

2022-10-11 13:27:12 字數 3082 閱讀 4489

接下來要接觸量子演算法了,我們會看到怎麼利用量子並行機制和干涉原理。干涉在演算法對結果進行測量求值時舉足輕重。

dj演算法是量子演算法的入門演算法,就像程式設計界的「hello world」。通過它就能演示量子機是如何「壓制」傳統機的演算法的,不過它當然不能寫成hello world那種一兩行**就搞定。

dj演算法是用來判定乙個函式是常量函式還是平衡函式的:

\[f(0)=0,f(1)=0\\

f(0)=1,f(1)=1

\]\[f(0)=0,f(1)=1\\

f(0)=1,f(1)=0

\]在傳統計算中,可以分別輸入0和1,通過if-then-else分支結構來對比結果。當\(n=1\)時,對比兩次就可以;對於任意的\(n\),需要對比一半以上的輸入,也就是\(2^+1\)次。所以這個問題的時間複雜度是指數的。

現在使用量子位來解決,當有2個的情形下,先通過h門製備4個狀態的疊加態。假設我們有oracle函式(一種非常智慧型的電路),把它作用在疊加態上就能一次計算出全部的\(f(x)\)的值。後面再說它的原理,現在知道的確有這種東西就行

如上圖,主要思路就是干涉疊加以後通過oracle函式一次輸出所有值,然後測量到0就是常量函式,1就是平衡函式。

這裡為了簡化,先使用乙個量子位,要麼傳0要麼傳1進去。下面是它的電路圖

①②用來製備疊加態,③是oracle函式,④是干涉步驟。通過數學計算來看一下每一步做了啥:

前兩步自不必說,第三步使用了乙個oracle函式

當\(f(x)=0\)時,第二個量子位不變,所以有(為了好看,把分母省略了)

當\(f(x)=1\)是,第二個量子位的狀態係數反**

所以可以把他們寫在一起:

\[(-1)^|x\rangle(|0\rangle-|1\rangle)

\]把\(x=|0\rangle+|1\rangle\)代入,有

可以把\(f(x)\)所有可能的組合都算一遍第乙個量子位的疊加態就是

可見對於相同的函式型別,只有乙個正負號的差別。也就是整體相位中的\(\delta \gamma=\pi\)。

前面說過,整體相位有差別的測量結果一樣,這對於我們是方便了,因為相同函式型別的概率一樣。這樣只要給不同的函式型別結果使用乙個轉換來區分開就行。所以第四步給第乙個量子位使用了h門,這樣常數函式會被測量為\(|0\rangle\),而平衡函式被測量為\(|1\rangle\)。

\[h[\frac}]=0\\h[\frac}]=1

\]乙個qubit的情形分析完了,來看\(n\)個的場景,比如4個:\(f(1101)\)。有幾個就並行使用幾次h門,先得到疊加態

然後應用oracle函式,按照上面的方法再計算一遍,在最後一步彙總\(f(x)=0\)和\(f(x)=1\)會得到

第二個qubit在之後會保持不變,所以我們只關注第乙個:

\[\frac}}\sum_^(-1)^|x\rangle

\]接下來再次使用h門,多個量子位的哈德瑪門變換是

\[\overset}\rightarrow\frac}}\sum_^n}(-1)^{}|z\rangle

\]其中的\(\)表示兩個向量的二進位制點乘,比如

\[(h_n)_=(-1)^=(-1)^=(-1)^=-1

\]因此應用哈德瑪門之後這些量子位變成了

當\(y=|000\cdots0\rangle\)時,\(x\cdot y=0\),

當\(f(x)\)是平衡函式時,裡面的狀態會互相抵消;當\(f(x)\)是常數函式時,乘機會互相疊加變成

\[\frac2^n|000\cdots0\rangle=|000\cdots0\rangle

\]所以,測量結果依賴於\(f(x)\)建立的干涉態

\[\left|\frac\sum_^(-1)^

\right|^2

\]這裡使用咱們國家本源量子的模擬器來測試。先測試一下\(f(x)=x_0\oplus x_1x_2\),結果如下

可以看到四個狀態的概率基本都接近0.25,所以這個函式是平衡函式。

要測試常數函式的話,可以使用恒等操作

deutsch-jozsa演算法和很多其他量子演算法都對許多不同的問題提供了解法模板,只要替換模板中的oracle函式就能解答特定問題。當然要熟練掌握替換技巧還是挺難的,尤其對於新手。通過打破指數級問題的時間魔咒提高了我們對加速解答問題的期望,解法可能很難,不過一般都賊有效。上面的例子裡,我們把oracle函式硬編碼到電路中,並非直接查詢\(f(x)\)的值,而是進行了結果的轉換測量。這個方法並不通用,只是為了給大家演示量子演算法。所以你在這裡嘆氣我也理解。

客觀實際是如果我們期望 oracle 函式能夠處理任何函式,那麼在最壞的情況下,需要查詢至少一半的資料。我們可以認為這些資訊已經處於疊加狀態,所以可以平行計算它們。不過事情沒有那麼簡單,暫時也不會進一步詳細說明。接下來我們會看更多依賴oracle的量子演算法。

量子計數演算法

前面總結了在無結構資料集,知曉解個數的情況下搜尋特定解的方法,下面來討論以下兩個問題 1.如果最開始製備的不是均勻的疊加態,那該如何找尋特定的解?2.如果不知道解的個數那我該怎麼尋找目標元?解答1 初始的量子態不是均勻的,這種情況應該是比較普遍的,因為我們並不能確保每次利用這個演算法解決問題的時候這...

NLP EM演算法教材拋硬幣

import numpy import math def em single theta,o 對於當前的模型求對應的期望值 估算步驟 三個值分別為選擇硬幣c1的概率 拋c1硬幣為正面的概率 拋c2硬幣為正面的概率。pi theta 0 h1 theta 1 h2 theta 2 new pi 0 n...

量子搜尋演算法 Grover search

problem f rightarrow 找到 f x 1 的x 經典解法 經典解法很簡單,就是把每乙個都看一遍,如果只有乙個x對應的f x 1,那麼平均是要看一半,才能找到那個x。時間複雜度o n 量子解法 使用grover search 演算法,時間複雜度在 o sqrt n grover se...