学习笔记-Grover 算法

问题描述

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

分析

学习笔记-Grover 算法_第1张图片

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

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

学习笔记-Grover 算法_第2张图片

推导

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

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操作:

学习笔记-Grover 算法_第3张图片

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

学习笔记-Grover 算法_第4张图片

 这三步合并起来就是:

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

标记的目的:|\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

 学习笔记-Grover 算法_第5张图片

学习笔记-Grover 算法_第6张图片

 

你可能感兴趣的:(学习,算法)