再看一次圖 :
首先,經過headamard transform 後 :
∣ψ⟩=2n1x∈{0,1}n∑∣x⟩(1) 也就是將一開始 :
變成 :
從 :
成 :
我們預期觀測到正確答案的機率超過
此時,增加平率為
由此說明,grover search 的時間複雜度為
相較於經典算法,是一種次方級的加速。
再下一小節,我們將會以另外一種方式講解grover search,讓大家能更深入了解。
Uf(∣ψ⟩)→∣ψ1⟩(2) 而在前面,我們已知 Uf 的功能如下:
∣ψ1⟩→2n1x∈{0,1}n∑(−1)f(x)∣x⟩(3) 假設我們目標搜尋 x∗ ,我們可以將query oracle步驟想像成將目標 x∗ 的機率幅變為負號
由於一開始的機率幅都是 2n1 ,因此我們可以由(1)、(2)推倒出以下一些關係備用 :
∣ψ1⟩=∣ψ⟩−2n2∣x∗⟩(4) ⟨ψ∣x∗⟩=2n1(5) 而後,我們再通過Grover Diffusion Operator,也就是 2∣ψ⟩⟨ψ∣−I ,可以得到 :
∣ψG⟩=(2∣ψ⟩⟨ψ∣−I)∣ψ1⟩=2∣ψ⟩⟨ψ∣ψ1⟩−∣ψ1⟩=2(∣ψ⟩)(1−2n2)−(∣ψ⟩−2n2∣x∗⟩)=(2n2n+1−2−2n))∣ψ⟩−2n2∣x∗⟩(6) 而這個步驟的功能,是讓 x∗ 的機率幅依據平均再翻轉一次,並且其他量子態同時變小
至於這個步驟為何能做到,讓我們來思考一下,首先,我們要確保每次做這個步驟都有相同的效果,所以我們假設通過Grover Diffusion Operator的量子態是 ∣ψn⟩ ,並且我們已 αi 代表 ∣i⟩ 的機率幅,此時機率幅的平均是 :
μ=2n∑x∈{0,1}nαi(7) 讓我們將 ∣ψn⟩ 通過 Diffusion Operator,得到以下 :
(2∣ψ⟩⟨ψ∣−I)∣ψn⟩=2∣ψ⟩⟨ψ∣ψn⟩−∣ψn⟩=2(x∈{0,1}n∑αx)∣ψ⟩−∣ψn⟩=2μ2n∣ψ⟩−∣ψn⟩=2μ(2n)(2n1)x∈{0,1}n∑∣x⟩−x∈{0,1}n∑αx∣x⟩=x∈{0,1}n∑(2μ−αx)∣x⟩(8) 由此可知,Diffusion Operator 是基於mean的翻轉,目標 x∗ 的機率幅會被越翻越高,也因此觀測時會有更大機率觀測正確,以下是簡單的時間複雜度證明 :
其他量子態機率幅為(平[ 分配剩下的 21 )
2n+11 由(6)我們可以看出來,每次機率幅增加的幅度會減少,所以如果觀測機率已經到達 21 ,並且還再經過一次Diffusion Operator,會增加多少振福 ?
先算一下此時的機率幅平均( N=2n )
因為我們最終是以big-O來衡量,因此可以忽略一些 −1 這類的操作,因為並不影響複雜度) :
μ=N21+N(N1)=2N1(9) N2(10) 按照以上所述,我們知道頻率增加的量會越來越小,而(10)是到目前為止最小的增加量,而距離我們就取遠一點,取完整的 21 ,也就是說,用最短的距離走最遠的路,得到以下 :
N221=N