Bernstein-Vazarani
本章節將了解 Berstein-Vazarani algorithm的問題以及算法
問題
我們已知一個布林函數(boolean function):
f:{0,1}n→{0,1}(1) 布林函數的形式如下:
f(x)=s⋅x mod 2(2) x 為任意n-bit的輸入, s為 "secret string", 函數 會先將 s字串 和 x字串內積後,再mod 2,並輸出結果,而問題就是,請找出字串 s
經典算法
經典算法中,我們需要n次的query,舉例如下(假設n = 4):
f(1000)=s1f(0100)=s2f(0010)=s3f(0001)=s4 而顯而易見的,完整的字串 s 就是 s1s2s3s4 ,在此經典算法中,其時間複雜度為
並且, n query已經是經典算法的lower bound,很簡單就能證明, s 總共有 2n 個可能,而每次的query,都能將這個空間一分為二,所以很明顯要 n 次才能得出最終結果。
然而量子算法(Bernstein-Vazarani algorithm)卻能加速到
現在就讓我們來看看是如何做到的!
量子算法(Bernstein-Vazarani algorithm)
下圖是Bernstein-Vazarani算法的結構:
我們先準備n-qbits,並且初始化在 ∣0⟩⊗n 經過Hadamard gate後,query 函數 f ,再經過一次Hadamard gate後,就能觀測到正確答案,接下來證明一下其正確性:
∣0⟩⊗nH2n1x∈{0,1}n∑∣x⟩f2n1x∈{0,1}n∑(−1)f(x)∣x⟩ = 2n1x∈{0,1}n∑(−1)s⋅x∣x⟩ = 2n1x∈{0,1}n∑(−1)s1⋅x1⋯(−1)sn⋅xn∣x⟩ 緊接著,在對每個qbit做一次Hadamard transform,如果 si=1 ,該qbit會從 ∣−⟩→∣1⟩ ,反之亦然。
Berstein-Vazarni只需要query一次就能得到答案,相較於經典版本,是 n→1 的加速。