学习笔记-Grover 算法

问题描述

假设有n个量子比特,用来记录数据库中的每一个数据的索引,一共可以表示2^{n}个数据,记为N 个,希望搜索得到的数据有M个。

分析

假设10为目标,通过Oracle操作使10态进行翻转,然后把所有态关于均值翻转,使得目标态的概率变大,当经过多次的Grover迭代后,目标态的概率会接近于1。

下面是Grover算法的量子线路图:

推导

为了表示一个数据是否是搜索的结果,建立一个函数:

f(x)\left\{\begin{matrix} 0 &(x\neq x_{0}) \\ 1& (x= x_{0}) \end{matrix}\right.

其中𝑥0为搜索目标的索引值,当搜索到目标时,函数值 f(x)值为 1,如果搜索的结果不是目标时,f(x)值为 0。

这里我们需要一个量子Oracle来对搜索到的解进行标记。把Oracle定义为:

|x \rangle |q \rangle \overset{Oracle}{\rightarrow} |x \rangle |q \oplus f(x)\rangle

这里|q \rangle是结果寄存器,实现的结果就是,如果搜索的索引是目标,那么就翻转寄存器;不是的话就没有改变。

先把初态制备在|0\rangle\otimes ^{n}|1\rangle态上,|0\rangle\otimes ^{n}是查询寄存器,|1\rangle是结果寄存器。经过H门后将查询寄存器的量子态变为所有态的叠加态,也就是得到了所有结果的索引。

Oracle操作:

接下来就是均值反演(inversion about mean)操作:

 这三步合并起来就是:

---------------------------------------------------------------------------------------------------------------------------------

标记的目的:|\varphi \rangle=\sum_{x=0}^{N-1}\frac{|x\rangle}{\sqrt{N}}\rightarrow \frac{\sum_{f(x)=0}|x\rangle-\sum_{f(x)=1}|x\rangle}{\sqrt{N}}

需要表示为 |\varphi \rangle=a|\alpha \rangle+b|\beta \rangle 的形式,其中:

 |\alpha\rangle =\frac{1}{\sqrt{N-M}}\sum_{f(x)=0}|x\rangle     ,|\beta \rangle =\frac{1}{\sqrt{M}}\sum_{f(x)=1}|x\rangle

则:|\varphi \rangle=\sqrt{\frac{N-M}{N}}|\alpha \rangle+\sqrt{\frac{M}{N}}|\beta \rangle

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值