假设有n个量子比特,用来记录数据库中的每一个数据的索引,一共可以表示个数据,记为N 个,希望搜索得到的数据有M个。
假设10为目标,通过Oracle操作使10态进行翻转,然后把所有态关于均值翻转,使得目标态的概率变大,当经过多次的Grover迭代后,目标态的概率会接近于1。
下面是Grover算法的量子线路图:
为了表示一个数据是否是搜索的结果,建立一个函数:
其中0为搜索目标的索引值,当搜索到目标时,函数值 f(x)值为 1,如果搜索的结果不是目标时,f(x)值为 0。
这里我们需要一个量子Oracle来对搜索到的解进行标记。把Oracle定义为:
这里是结果寄存器,实现的结果就是,如果搜索的索引是目标,那么就翻转寄存器;不是的话就没有改变。
先把初态制备在态上,是查询寄存器,是结果寄存器。经过H门后将查询寄存器的量子态变为所有态的叠加态,也就是得到了所有结果的索引。
Oracle操作:
接下来就是均值反演(inversion about mean)操作:
---------------------------------------------------------------------------------------------------------------------------------
需要表示为 的形式,其中: