针对Grover算法的Oracle构建


16

在Mike和Ike的“量子计算和量子信息”中,对Grover的算法进行了详细说明。但是,在书中以及在网上找到的关于Grover算法的所有解释中,似乎都没有提到Grover的Oracle是如何构造的,除非我们已经知道我们要搜索的状态是什么,这违背了该算法的目的。算法。具体来说,我的问题是这样的:给定一些f(x)使得对于某个x值,f(x)= 1,但对于所有其他值,f(x)= 0,一个人如何构造一个将我们带离的甲骨文我们的初始任意状态| x> | y>到| x> | y + f(x)>?尽可能多的明确细节(也许是一个例子?)将不胜感激。如果使用Hadamard,Pauli或其他标准量子门可以实现任意功能的这种构造,


“似乎没有提到格罗弗的甲骨文是如何构造的,除非我们已经知道我们要搜索的状态是什么,这违背了算法的目的。” ...“格罗弗的甲骨文”是要解决的问题。您不构建它。您已获得(oracle访问权)它,并要求执行计算以发现该值。如果有帮助,请假装构造了oracle,然后要求解决问题。(另外,请注意,读取/写入/准备项目的数据库所需的时间比运行Grover的 -time算法要长。)ññ
Daniel Apon

2
但是如果不是给我们预言,而是给我们一些f(x)怎么办?想象我们正在解决3-SAT问题,并希望使用Grover来加快解决方案的速度。我们知道所讨论的f(x)(3-SAT真理子句),但不一定知道插入3-SAT时哪个位串x会产生真实结果。难道没有一种方法可以通过3-SAT函数构造一个oracle以查找正确的位字符串吗?如果没有,并且按照您的建议,它是由其他人提供的,则Grover的算法似乎相当人为,只是给您的一种练习。
威尔

Answers:


20

oracle基本上只是您要搜索令人满意的解决方案的谓词的实现。

例如,假设您有一个三人制的问题:

(¬x1 ∨ ¬x3 ∨ ¬x4) ∧
    (x2 ∨ x3 ∨ ¬x4) ∧
    (x1 ∨ ¬x2 ∨ x4) ∧
    (x1 ∨ x3 ∨ x4) ∧
    (¬x1 ∨ x2 ∨ ¬x3)

或者,在表格形式中,每行为3子句,x表示“此变量为false”,o表示“此变量为true”,空格表示“ not in Clause”:

1 2 3 4
-------
x   x x
  o o x
o x   o
x o x

现在制作一个电路,计算输入是否为解,如下所示:

解决方案检查器

现在,要将您的电路变成一个预言机,请用Z门打输出位,然后取消计算您所做的任何垃圾(即,以相反的顺序运行计算电路):

甲骨文电路

这里的所有都是它的。计算谓词,用Z命中结果,取消计算谓词。那是一个神谕。

用oracle步骤迭代扩散步骤,您将获得一个grover搜索

grover搜索

...尽管您可能应该选择一个解决方案较少的示例,但是进度是渐进的(而不是像我的示例那样,沿着初始状态-解决方案状态平面每步旋转90度以上)。


谢谢,这非常有帮助。清晰得令人难以置信,回答了我问的所有问题(甚至使用了通用的量子门!)是否有任何理由决定将所有起始量子位更改为| 1>状态,然后再将它们与Hadamard门进行叠加,而不是仅将| 0 >通过Hadamards声明qubit(即对此有好处)吗?另外,您的扩散步骤要执行什么操作?看起来像受控X,但您是使用| 1>还是| 0>作为控件?
威尔

1个2|0-1个2|1个ñ

很棒的答案,并感谢您链接到algassert.com/quirk
弗雷德里克Grosshans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.