Bernstein-Vazarani

本章節將了解 Berstein-Vazarani algorithm的問題以及算法

問題

我們已知一個布林函數(boolean function):

f:{0,1}n{0,1}(1)f:\left\{0,1\right\}^n\rightarrow\left\{0,1\right\}\tag{1}

布林函數的形式如下:

f(x)=sx mod 2(2)f(x)=s\cdot x\ mod\ 2\tag{2}

xx 為任意n-bit的輸入, ss為 "secret string", 函數 f 會先將 ss字串 和 xx字串內積後,再mod 2,並輸出結果,而問題就是,請找出字串 ss

經典算法

經典算法中,我們需要n次的query,舉例如下(假設n = 4):

f(1000)=s1f(0100)=s2f(0010)=s3f(0001)=s4f(1000) = s_1\\ f(0100) = s_2\\ f(0010) = s_3\\ f(0001) = s_4

而顯而易見的,完整的字串 ss 就是 s1s2s3s4s_1s_2s_3s_4 ,在此經典算法中,其時間複雜度為

O(n)O(n)

並且, nn query已經是經典算法的lower bound,很簡單就能證明, ss 總共有 2n2^n 個可能,而每次的query,都能將這個空間一分為二,所以很明顯要 nn 次才能得出最終結果。

然而量子算法(Bernstein-Vazarani algorithm)卻能加速到

O(1)O(1)

現在就讓我們來看看是如何做到的!

量子算法(Bernstein-Vazarani algorithm)

下圖是Bernstein-Vazarani算法的結構:

我們先準備n-qbits,並且初始化在 0n|0\rangle^{\otimes n} 經過Hadamard gate後,query 函數 ff ,再經過一次Hadamard gate後,就能觀測到正確答案,接下來證明一下其正確性:

0nH12nx{0,1}nxf12nx{0,1}n(1)f(x)x =  12nx{0,1}n(1)sxx =  12nx{0,1}n(1)s1x1(1)snxnx\begin{aligned} |0\rangle^{\otimes n} &\xrightarrow{H}\frac{1}{\sqrt{2^n}}\sum_{x\in\left\{0,1\right\}^n}|x\rangle\\ &\xrightarrow{f}\frac{1}{\sqrt{2^n}}\sum_{x\in\left\{0,1\right\}^n}(-1)^{f(x)}|x\rangle\\ &\ =\ \ \frac{1}{\sqrt{2^n}}\sum_{x\in\left\{0,1\right\}^n}(-1)^{s\cdot x}|x\rangle\\ &\ =\ \ \frac{1}{\sqrt{2^n}}\sum_{x\in\left\{0,1\right\}^n}(-1)^{s_1\cdot x_1}\cdots(-1)^{s_n\cdot x_n}|x\rangle\\ \end{aligned}

緊接著,在對每個qbit做一次Hadamard transform,如果 si=1s_i = 1 ,該qbit會從 1|-\rangle\to|1\rangle ,反之亦然。

Berstein-Vazarni只需要query一次就能得到答案,相較於經典版本,是 n1n\to1 的加速。

Last updated