格罗弗算法

来自testwiki
imported>Hideonatc2024年3月11日 (一) 16:41的版本 算法步驟:​ 更正符號至張量乘積)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

Template:Multiple issues Template:NoteTA 格罗弗算法Template:Lang-en)是一種量子算法,於1996年由電腦科學家洛夫·格罗弗提出。假設現在有一個未知的函數,格罗弗算法只需測試此未知的函數O(N)次,其中N為此未知函數的定义域的大小,即可以很高的概率找到一特定的輸入值,此輸入值能使此未知函數輸出特定的值。

同樣的問題在經典運算下,需要至少做 O(N) 次測試(因為在最壞的情況下,可能第N個定義域裡的值才是正確答案)。在格罗弗發表他的算法前後,Bennett, Bernstein, Brassard, 和 Vazirani 在相近的時間證明了,任何量子算法解決此問題都最少需要對此未知的函數做 Ω(N) 次測試,因此格罗弗算法是渐进最优的。[1]

非局域隱變量量子計算機已經被證明可以在最多 O(N3) 步內實現在N個條目的數據庫裡的搜索,這比格罗弗算法的 O(N) 還快,然而這些搜索算法並不能使量子計算機在多項式時間內解決NP-Complete 問題。[2]

不像其他的量子算法可能會比相應的經典算法有指數級的加快,格罗弗算法二次方的加快,不過當N很大時二次方的加快也相當可觀。格罗弗算法可以在大約 264次迭代內窮舉破解一個128比特的對稱密鑰,在大約 2128次迭代內窮舉破解一個256比特的密鑰。因此,有人提倡對稱密鑰的長度應該加倍以因應未來的量子攻擊。[3]

像其他的量子算法一樣,格罗弗算法是概率性的,意味著這個算法以小於1的概率給出正確答案。雖然實際上對於需要多少次重複才能給出正確的答案並沒有一個上界,但是期望的重複次數並不隨N成長。在格罗弗發表此算法的原始論文中稱此算法為數據庫搜索算法,此說法至今仍普遍。此處數據庫相當於是一張存有未知函數的所有輸出值的表,以對應的輸入值為索引。

應用

雖然格罗弗算法的用處一直被認為是數據庫搜索,但是它也可以被認為是函數取反。

設定

考虑一个有N个元素的无序数据集,我们设函数f:{0,1,,N1}{0,1}。我们假设,在所有的下标x中,有且仅有一个下标x有f(x)=1,我们记这个下标x为ω,并且称ω为这个搜索问题的解。而格罗弗算法的目标便是找到下标ω。为此,我们构建一个酉算子Uω,如下

{Uω|x=|xfor x=ωUω|x=|xfor xω

或者可以简写为

Uω|x=(1)f(x)|x

事实上,我们一般构建另一种酉算子Uf,如下所示

Uf|x|y=|x|yf(x)

我们一般将Uf作用在态矢量和|的叠加态上,以实现相回传(Phase Kickback),具体流程如下

Uf|x|=Uf|x[|0|12]={12(|x|1|x|0)for x=ω12(|x|0|x|1)for xω=(1)f(x)|x|

与一般的Uω相比,Uf使用了一个辅助的qubit。

算法步驟

格罗弗算法的量子电路表示

格罗弗算法的步骤如下

  1. 构建量子叠加态
|s=HN|0N=1Nx=0N1|x
2. 做p(N)次“格罗弗迭代”,具体操作如下
  • Uω作用在|s
  • Us=2|ss|I 作用在|s
其中,Us被称为格罗弗扩散算子
3. 测量|s,得到求得的结果

一般而言,p(N)的值会很大程度上影响得到正确结果的概率,且并不是p(N)越大得到正确结果的概率越大。分析表明最优的p(N)p(N)π4N,因而格罗弗算法的复杂度为𝒪(N)

正确性证明

几何直观证明

格罗弗算法使用的技巧为振幅减枝(Amplitude amplification),实则是通过将其他态的振幅转移为解的振幅,而是在测量时使得坍塌为解的概率增加。具体如下

代数证明

考虑,我们将态矢量改为以|x,|ω为基,其中ω为解。写作

|s=a|ω+b|x

在这种表示下,我们可以将UsUω表示为

Us:a|ω+b|x[|ω|x][102/N1][ab].
Uω:a|ω+b|x[|ω|x][12/N01][ab].

UsUω=[102/N1][12/N01]=[12/N2/N14/N].

我们可以通过设t=arcsin(1/N),将上式改写为(所谓Jordan form)

UsUω=M[e2it00e2it]M1 where M=[iieiteit].

作用r次UsUω则将得到

(UsUω)r=M[e2rit00e2rit]M1.

注意到,我们的目的是区别解以及其他一般的数据,而为了达到这个目的,我们使|x,|ω的振幅差别越大越好,换言之,要使得2rt和−2rt的差别足够大,便有2rtπ/2, 或 r=π/4t=π/4arcsin(1/N)πN/4. 这样以来,就有

(UsUω)r=M[i00i]M1.

作用在初始态上将会有

[|ω|x](UsUω)r[01][|ω|x]M[i00i]M1[01]=|ω1cos(t)|xsin(t)cos(t).

简短的计算表明,格罗弗算法将具有O(1N)量级的误差.

参见

參考資料

Template:Reflist

外部链接

Template:Wikiquote

Template:量子信息