格罗弗的算法:一个真实的例子?


13

对于在实际中如何使用Grover算法,我感到很困惑,我想通过一个示例寻求帮助,以澄清问题。

假设一个元素数据库包含红色,橙色,黄色,绿色,青色,蓝色,靛蓝和紫罗兰色,并且不一定按此顺序排列。我的目标是在数据库中找到Red。N=8

Grover算法的输入为量子位,其中3个量子位编码数据集的索引。我的困惑在这里(可能会对前提感到困惑,所以在这里可能会引起困惑),据我所知,oracle实际上是在搜索数据集的索引之一(由3个量子位的叠加表示),此外, oracle是“硬编码”的,它应该寻找哪个索引。n=log2(N=8)=3

我的问题是:

  • 在这里我怎么了?
  • 如果oracle确实在寻找数据库的索引之一,那意味着我们已经知道要寻找哪个索引,那么为什么要搜索呢?
  • 给定上述带有颜色的条件,是否有人可以指出,如果Grover可以在非结构化数据集中查找Red?

存在Grover算法的实现,其中的oracle 搜索| 111>,例如(或参见以下相同oracle的R实现):https : //quantumcomputing.stackexchange.com/a/2205n=3甲骨文111

再次,我的困惑是,由于我不知道数据集中元素的位置,因此该算法要求我搜索一个编码N个元素的位置的字符串。我如何知道数据集非结构化时应该寻找哪个位置?NN

R代码:

 #START
 a = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 # 1st CNOT
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2)) 
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 a = DotProduct(n2,n1)
 #repeat the same from 2st not gate
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n3 = DotProduct(n2,n1)
 result=measurement(n3)
 plotMeasurement(result)

图片2



也与以下内容有关:quantumcomputing.stackexchange.com/q/175/55
glS

Answers:


5

|xaddress|0value|xaddress|load(x)0value=|xaddress|load(x)value.

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2x=02n1|xaddress|load(x)value
O(N)x
|xaddress|load(x)value.

也许您遇到的主要问题是了解数据库而不是Grover算法。您可以在第6.5章Nielsen&Chuang中找到更详细的说明。

我还认为Grover算法最有用的应用程序不是数据库应用程序,而是在任何量子算法上将其概括为幅度放大(请参见https://arxiv.org/abs/quant-ph/0005055)。


k|k|skksk=+1sk
glS


4

相关问题中已经对此进行了部分讨论,但在这里我将尝试更具体地解决您提出的一些问题。

|i(1)f(xi)|i,
ixii

f(xi)xixixiPP

fxiixi

xi=ixi

在这种情况下,该算法确实不是特别有用,因为答案必须硬编码到oracle中,但是一般情况下不必如此。


谢谢您的回复!也许有可能提供一个真实的例子,在给出的预言下,格罗弗的“有用”应用于某些真实数据吗?例如,它如何与带有素数和非素数的8元素数据库一起工作?
01000001

1
ffx
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.