【科普】量子计算通识-8-Deutsch-Jozsa算法解析

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击【量子计算通识】
上一篇:【科普】量子计算通识-7-Deutsch算法解析


这一篇我们来看一下多伊奇问题n位算法是怎么推导出来的。关于多伊奇问题请看【上一篇文章】的开始部分。

多位电路

我们先看一下上篇文章使用过的这张电路图:

上篇文章我们只考虑输入一个|0>比特,忽略了n

计算\Psi_1

在这个电路里面,输入的是n|0>和1个|1>比特,即:

\begin{align} \Psi_0&=\underbrace{|0>\otimes|0>\otimes \dots |0>}_{n} \otimes|1>\\ &=|0>^{\otimes n}|1> \end{align}

很多时候,量子位之间的\otimes被省略。

每个量子位都经过Hadamard门,即|0>变为\frac{|0>+|1>}{\sqrt{2}},即|1>变为\frac{|0>-|1>}{\sqrt{2}},这就得到\Psi_1

\begin{align} \Psi_1&=H^{\otimes n}|0>^{\otimes n}H|1>\\ &=\underbrace{(\frac{|0>+|1>)}{\sqrt{2}})(\frac{|0>+|1>)}{\sqrt{2}})\dots}_{n}(\frac{|0>-|1>}{\sqrt{2}})\\ &=\frac{1}{\sqrt{2^n}}\underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots}_{n}(\frac{|0>-|1>}{\sqrt{2}})\\ \end{align}

我们注意到:
\frac{1}{\sqrt{2^n}} \underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots \begin{pmatrix}1\\1\end{pmatrix}}_{n}= \frac{1}{\sqrt{2^n}} \left.\begin{pmatrix}1\\1\\\dots\\1\end{pmatrix} \right \}2^n

这表示什么呢?还记得抛两枚硬币的情况吗?

\begin{align} \begin{pmatrix}\frac{1}{4}\\\frac{1}{4}\\\frac{1}{4}\\\frac{1}{4}\end{pmatrix} =\frac{1}{4}\begin{pmatrix}1\\1\\1\\1\end{pmatrix} =\frac{1}{4}\left[\begin{pmatrix}1\\0\\0\\0\end{pmatrix}+\begin{pmatrix}0\\1\\0\\0\end{pmatrix}+\begin{pmatrix}0\\0\\1\\0\end{pmatrix} +\begin{pmatrix}0\\0\\0\\1\end{pmatrix}\right] \end{align}

这个表示4种状态的每一种状态可能性都是\frac{1}{4},它处于不确定的叠加态。对每一种状态来说,都可以对应一个十进制数字,那么就是0,1,2,3,我们用下标表示10进制,也就有:

\frac{1}{4}\begin{pmatrix}1\\1\\1\\1\end{pmatrix}=\frac{1}{4}(|0_{10}>+|1_{10}>+|2_{10}>+|3_{10}>)

推而广之,忽略10进制下标,变成求和,从x=0x=2^n-1,就得到:

\frac{1}{\sqrt{2^n}} \underbrace{\begin{pmatrix}1\\1\end{pmatrix}\begin{pmatrix}1\\1\end{pmatrix}\dots \begin{pmatrix}1\\1\end{pmatrix}}_{n}=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}|x>

替换到\Psi_1中得到:
\begin{align} \Psi_1&=H^{\otimes n}|0>^{\otimes n}H|1>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}|x> (\frac{|0>-|1>}{\sqrt{2}})\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x> (|0>-|1>)\\ \end{align}

计算\Psi_2

U操作的作用是:

U:|x>|y>\Rightarrow|x>|y\oplus f(x)>

我们在上一篇文章推导过,|0>-|1>U操作后,无论f(0)=0或f(0)=1都有:
|0\oplus f(0)>-|1\oplus f(0)>=(-1)^{f(0)}(|0>-|1>)

同样f(1)=0或f(1)=1时候都有:
|0\oplus f(x)>-|1\oplus f(x)>=(-1)^{f(1)}(|0>-|1>)

实际上对于任意f(x)\in\{0,1\}都有:
|0\oplus f(x)>-|1\oplus f(x)>=(-1)^{f(x)}(|0>-|1>)

即:
U(|0>-|1>)=(-1)^{f(x)}(|0>-|1>)

我们把这个式子带入\Psi_1得到经过U操作的\Psi_2:

\begin{align} \Psi_2 &=U\Psi_1\\ &=U\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x> (|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x>U (|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}|x>(-1)^{f(x)}(|0>-|1>)\\ &=\frac{1}{\sqrt{2^{n+1}}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>(|0>-|1>)\\ \end{align}

计算\Psi_3

在这里我们可以直接忽略最后一个比特了,就是忽略掉结尾的\frac{1}{\sqrt{2}}(|0>-|1>),专注前半段内容:

\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>

我们对每个|x>执行Hadamard操作。注意这里的|x>可以是|1>,也可以是|10>、|17>、|198>...任意十进制数字,如果转为二进制则是|1>、|1010>、|10001>、|11000110>...

怎么计算H^{\otimes n}|x>?我们先从另一个角度看Hadamard门:

\begin{align} H|0>&=\frac{|0>+|1>}{\sqrt{2}}\\ &=\frac{1}{\sqrt{2}}((-1)^{0\cdot0}\cdot|0>+(-1)^{0\cdot1}|1>)\\ &=\frac{1}{\sqrt{2}}\sum_{z\in\{0,1\}} ((-1)^{0\cdot z}|z>) \end{align}

\begin{align} H|1>&=\frac{|0>-|1>}{\sqrt{2}}\\ &=\frac{1}{\sqrt{2}}((-1)^{1\cdot0}\cdot|0>+(-1)^{1\cdot1}|1>)\\ &=\frac{1}{\sqrt{2}}\sum_{z \in\{0,1\}}((-1)^{1\cdot z}|z>) \end{align}

我们注意到|0>|1>的操作区别就是(-1)^{1\cdot z}(-1)^{0\cdot z}的区别,那么我们就有:

\begin{align} H|x_i>=\frac{1}{\sqrt{2}}\sum_{z\in\{0,1\}\ }((-1)^{ x_i\cdot z}|z>) \end{align}

但这只是针对单个比特的,如果是多个比特呢?先看2个比特的情况:

\begin{align} &H|x_1>H|x_2>\\ &=\frac{1}{\sqrt{2^2}}(\sum_{z_1 \in\{0,1\} }((-1)^{ x_1\cdot z_1}|z_1>))(\sum_{z_2 \in\{0,1\} }((-1)^{ x_2\cdot z_2}|z_2>))\\ &=\frac{1}{\sqrt{2^2}}\sum_{z_1,z_2\in\{0,1\} }(-1)^{x_1\cdot z_1}(-1)^{x_2\cdot z_2}|z_1>|z_2>\\ &=\frac{1}{\sqrt{ 2^2}}\sum_{z_1,z_2\in\{0,1\} }(-1)^{x_1\cdot z_1+x_2\cdot z_2}|z_1>|z_2> \end{align}

如果是n位的话,那么就有:

\begin{align} &H^{\otimes n}|x_1,x_2,x_3,\dots x_n>\\ &=\frac{1}{\sqrt{2^n}}\sum_{z_1,z_2,\dots z_n }(-1)^{x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n}|z_1,z_2\dots z_n> \end{align}

我们x表示x_1,x_2...x_n,我们z表示z_1,z_2...z_n,设定格式x\cdot z表示x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n,用那么就有:

\begin{align} &H^{\otimes n}|x>=\frac{1}{\sqrt{2^n}}\sum_{z=0}^{2^n-1}(-1)^{x\cdot z}|z> \end{align}

注意这里z_1,z_2,...z_n \in \{0, 1\}总计需要2^n次求和。比如前面的两位的例子z_1,z_2\in \{ 0, 1\}就要进行四次:
z_1=0,z_2=0;z_1=0,z_2=1;z_1=1,z_2=0;z_1=1,z_2=1;

好了,我们回到\Psi_3的上部分:

\begin{align} &\Psi_{3'}=H^{\otimes n}\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}|x>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}H^{\otimes n} |x>\\ &=\frac{1}{\sqrt{2^n}} \sum_{x=0}^{2^n-1}(-1)^{f(x)}\left[\frac{1}{\sqrt{2^n}}\sum_{z=0}^{2^n-1}(-1)^{x\cdot z}|z>\right]\\ &=\frac{1}{2^n} \sum_{x=0}^{2^n-1}(-1)^{f(x)}\left[\sum_{z=0}^{2^n-1} (-1)^{x\cdot z}|z>\right]\\ &=\frac{1}{2^n} \sum_{z=0}^{2^n-1}\left[\sum_{x=0}^{2^n-1}(-1)^{f(x)+x\cdot z}\right]|z>\\ \end{align}

最终测量

注意上面式子里的x_iz_i都是0或1。
这里的求和\sum来自最早的Hadamard操作,表示从0到2^n-1;而f(x)中的x则是来自U操作,它代表任意数字。|z>表示的是具有n个量子位的|z_1,z_2...z_n>,类似|100...01011>这种。

关于测量,其实就是计算每个方向上的可能性。而每个方向就是每种状态,对於单比特就是每个轴向,横正向和竖正向。

数学上:
\begin{align} &\begin{pmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{pmatrix}=\frac{1}{\sqrt{2}}\begin{pmatrix}1\\1\end{pmatrix} =\frac{1}{\sqrt{2}}(\begin{pmatrix} 1\\0 \end{pmatrix}+\begin{pmatrix} 0\\1\end{pmatrix})\\ &=\frac{1}{\sqrt{2}}|0>+\frac{1}{\sqrt{2}}|1> \end{align}

测量得到|0>=\begin{pmatrix}1\\0\end{pmatrix}|1>=\begin{pmatrix}0\\1\end{pmatrix}两个方向上的概率都是(\frac{1}{\sqrt{2}})^2=\frac{1}{2}

对于四项的竖列也是同样,比如抛两枚硬币得到的结果就有4个方向或者说四个状态:

\begin{pmatrix}1\\0\\0\\0\end{pmatrix} ,\begin{pmatrix}0\\1\\0\\0\end{pmatrix},\begin{pmatrix}0\\0\\1\\0\end{pmatrix},\begin{pmatrix}0\\0\\0\\1\end{pmatrix}

这也对应了四个比特表示|00>、|01>、|10>、|11>,也可以用四个十进制数字表示|0>、|1>、|2>、|3>。如果有一个a|00>+b|01>+c|10>+d|11>那么它在四个状态上的概率就是a^2、b^2、c^2、d^2,并且概率之和是1,就是a^2+b^2+c^2+d^2=1

好了,回到我们的\Psi_3'

\begin{align} &\Psi_{3'}=\frac{1}{2^n} \sum_{z=0}^{2^n-1}\left[\sum_{x=0}^{2^n-1}(-1)^{f(x)+x\cdot z}\right]|z>\\ \end{align}

它也可以视为nz求和,类似a|z_0>+b|z_1>...+d|z_n>这种情况。

我们只关注假设|z_0>=|0>^{\otimes n}=|000...0>的情况,那么求和\sum的每一次z_i都是0,就有x\cdot z=x_1\cdot z_1+x_2\cdot z_2+\dots x_n\cdot z_n也都是0,测量|z>状态的概率,就是对它的系数求平方:

\begin{align} \left (\frac{1}{2^n} \left[\sum_{x=0}^{2^n-1}(-1)^{f(x)}\right]\right )^2 \end{align}

f(x)是Constant常数操作的时候,如果f(x)=0(-1)^{f(x)}=1,求和结果是2^n,最终平方后是1;如果f(x)=1(-1)^{f(x)}=-1,求和结果是-2^n,最终平方后还是1。就是说如果f(x)是常数操作,那么最终测得|z>=|0>^{\otimes n}的概率为1,也就是必然测得|0>^{\otimes n}

f(x)是Constant常数操作的时候,一半情况f(x)=0,另一半情况f(x)=1,而进行2^n次求和,这是全部可能,也是个偶数,(-1)^0=1(-1)^1=-1各占一半,正好抵消,结果将是0。也就是说如果f(x)是Constant常数,那么就不会测得|0>^{\otimes n}

虽然在数学上似乎是推导完成了,但是很多地方仍然缺乏较好的解释,后续将继续学习和改进。


欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击【量子计算通识】


每个人的智能新时代

如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~


END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章