Grover算法——量子搜索算法

        假设N个数据中符合条件的数据有M个,则量子搜索算法的复杂度为O(\sqrt{\frac{N}{M}}),远小于经典算法的复杂度。

黑箱

        下面以N=2为例,介绍黑箱如何标记符合条件的数据。N=2意味着只有两个数据,可以用0和1来表示这两个数据,也就只需要一个量子比特表示。假设f(x):x\in {(0,1)}\rightarrow y\in(0,1)是一个函数,若x是符合条件的数据,则f(x) = 1;若x不是符合条件的数据,则f(x) = 0。定义黑箱O具有如下功能:

                                                ​​​​​​​        ​O(|x\rangle|y\rangle) = |x\rangle|f(x)\oplus y\rangle                                         (1)

其中|y\rangle为辅助量子比特。 此处,不用|y\rangle=0

                                                                  |y\rangle = \frac{|0\rangle-|1\rangle}{2}                                                          (2)

                            O(|x\rangle\frac{|0\rangle-|1\rangle}{2}) = |x\rangle\frac{|0\oplus f(x)\rangle-|1\oplus f(x)\rangle}{2}=(-1)^{f(x)}|x\rangle(\frac{|0\rangle-|1\rangle}{2})             (3)

黑箱作用前后, |y\rangle的状态不变,通常可以省略,则黑箱的作用记为

                                                       O(|x\rangle) = |(-1)^{f(x)}|x\rangle

当x是不符合条件的数据,即f(x)为0时,O(|x\rangle) = |x\rangle|x\rangle没变,就是未被标记;当x是符合条件的数据,则O(|x\rangle) = -|x\rangle|x\rangle变成-|x\rangle,也就是负号把|x\rangle标记出来。

Grover算法

        Grover量子搜索算法是一个迭代的过程,主要思路是从初始状态出发,重复进行多次变换,让符合条件的解的振幅越来越大,最后进行测量,就能以很高概率得到正确的结果。

Grover算法共需要n+1个量子比特,初态为|\phi_{0} \rangle=|0\rangle^{\otimes (n+1)}前n个量子比特组成第一个寄存器,用于存储元素编号;另外1个构成第二寄存器,是辅助量子比特。Grover算法步骤如下:

        第一步:使用n个H门作用于第一寄存器演化出元素编号的叠加态,并使用X门和H门作用于第二寄存器演化出量子态\frac{|0\rangle-|1\rangle}{2}|\phi_{0} \rangle演化为

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        |\phi_{1} \rangle=\frac{1}{\sqrt{n}}\sum_{x=0}^{N-1}|x\rangle(\frac{|0\rangle-|1\rangle}{\sqrt{2}})

        第二步:重复算子G以增大满足条件的解的概率,具体的重复次数之后说,每个算子G可以分为以下四步,量子线路图如图。

(1)使用黑箱算子O将符合条件的解的符号取反;

(2)使用H^{\bigotimes n}作用于第一寄存器;

(3)使用条件相移算子2|0\rangle^{\bigotimes n}\langle0|^{\bigotimes n}-I,将|0\rangle以外的基态|1\rangle|2\rangle,...,|N-1\rangle取反;

(4)使用H^{\bigotimes n}作用于第一寄存器;

 # Display inline
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, transpile
from qiskit_aer import Aer

import numpy as np
from qiskit.visualization import plot_histogram

circuit = QuantumCircuit(3,3)

#第一步
circuit.x(2)
for i in range(3):
    circuit.h(i)
    
#第二步
circuit.ccx(0,1,2)

#第三步
for i in range(2):
    circuit.h(i)
for i in range(2):
    circuit.x(i)
circuit.cz(0,1)
for i in range(2):
    circuit.x(i)
for i in range(2):
    circuit.h(i)
    
#测量
circuit.measure(0,0)
circuit.measure(1,1)

#绘制线路图
circuit.draw(output = 'mpl')

仿真结果

线路的最后测量,可以看出011的出现概率为1,需要说明的是测量结果011分别代表量子比特q_{2}q_{1}q_{0}的值,q_{2}其实没有被测量,显示默认值0,q_{1}q_{0}显示为11,成功找到(1,1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白光白光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值