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