Grover-算法如何应用于数据库?


12

我想使用Grover-Algorithm在未排序的数据库中搜索元素。现在出现了问题,如何使用qubits初始化数据库的索引和值?x

  • 假设我有量子位。因此,可以映射经典值。424=16
  • 我未排序的数据库具有以下元素:。dd[Value]=[3,2,0,1]
  • 我想搜索。x=2d=10b=|10
  • 我的方法:用为数据库编制索引。寄存器和用于索引,寄存器和用于值。然后,仅将Grover-Algorithm应用于寄存器和。可以实现吗?还有其他方法吗?dd[(Index, Value)]=[(0,3),(1,2),(2,0),(3,1)]012323(Value)

我已经实现的内容(在GitHub上

“具有2-,3-,4-Qubits的Grover算法”,但是它的作用很简单:使用初始化这些位,oracle将标记我的解(这就像),Grover部分将增加所选元素的概率,并降低所有其他概率,然后通过映射到经典位来读取。我们让这个过程连续运行几次,从而获得概率分布,其中最高的概率是我们寻求的元素。|0x2d=10bxx

输出始终与oracle中标记的输出相同。我如何从输出中生成更多信息,而我在构建oracle时不知道这些信息?

Answers:


9

我也一直在解决这个问题。作为初学者和经典程序员(即,我不会讲量子力学),如果没有完整的示例,很难理解这些概念。我一直在使用Microsoft Q#Database Search示例。它只是在数据库中搜索特定的索引/关键字,这不是很有用。我已经扩展了该样本,以在数据库中搜索值列表并返回相应的键。

与您的示例一样,索引有一个两个量子位的“密钥寄存器”,而值有一个单独的两个量子位的寄存器。Microsoft的样本中还有第五个“标记的量子位”,用于指示何时找到所需的值。键和值通过纠缠关联。用电路最好地证明这一点。单击此处查看实际的Quirk电路

键/值Oracle Circuit

请注意,此电路仅包含预言。它没有实现所有的Grover算法。

  • 前两个量子位是密钥寄存器,后两个量子位是值寄存器,下一个量子位是标记的量子位。
  • 第一部分,按照Grover算法的要求,使用Haramard门将密钥寄存器置于统一的叠加中。
  • 第二部分是通过纠缠将键与值关联的位置。通过应用(反)控制的X门,每个键都与值寄存器中的相应值纠缠在一起。因此,当键寄存器为0时,值寄存器将设置为3。当键为1时,值将设置为2,依此类推。
  • 电路的第三部分是搜索预言。值寄存器与标记的量子位纠缠在一起。在此示例中,所需值为2。当值寄存器包含2时,标记的qubit将设置为1。
  • Grover的算法查看密钥寄存器和标记的qubit。搜索oracle查看值寄存器并设置标记的qubit。当值为2时,这将导致键1被放大。

有趣的是,键和值不是存储在qubit中,而是存储在电路/程序中。您可以说它本身并不是一个数据库。它更像是switch / case语句,但是可以在值的叠加上运行。

有关更多详细信息,注意事项和Q#代码,请参阅我的GitHub存储库

编辑:自从回答以来,我了解得更多……您必须在每次迭代中都撤消/撤消电路。在Q#代码中,ReflectStart()操作中的Adjoint StatePreparationOracle()调用可处理此问题,因此我不必显式执行此操作。我不知道Qiskit是否具有类似功能。如果我正确地完成了翻译,那么上面的示例就是完整的电路图


谢谢!那正是我想要的。
alex

因此,对于Grover-Part:我只需要对键寄存器(在此示例中为2 qubit)进行放大处理?它们如何与标记的量子位连接?
alex

根据Q#示例,“ Grover的算法需要反映标记状态和起始状态”,因此您需要同时使用标记的qubit和密钥寄存器。如果遵循QuantumSearch()操作中的代码,您将看到仅使用标记的qubit调用了ReflectMarked()。稍后还使用标记的qubit和密钥寄存器的组合调用ReflectZero()。另外,请参见上方的编辑。
乔尔·利奇

3

在介绍用于数据库搜索的Grover算法时,假定Oracle可以访问经典列表的元素。但这是一个很强的假设,这就是为什么我们用使用索引的CNOT / Toffolis进行控制的选择器来表示这一点,该索引简单地表示该操作(如情况下的Toffoli电路)。n=4

您提到了在另一个寄存器中计算值的方法: 您再次假设您已获得执行此操作的预言(高效的方法是直接控制,但您必须对每个索引/值执行此操作,这样效率不高)。在这种情况下,预言将是量子电路格式的函数(再次是受控选择器),标记该状态并继续进行Grover迭代。

i|i|d(i)
f(i)=2

我认为最好将量子搜索算法视为优化函数,而不是在列表/数据库中搜索。如果您想进一步了解算法,这是我撰写的文章,其中量子搜索用于解决组合最大化问题


谢谢您的回复!因此,Grover-Algorithm不太适合数据库搜索。我在这里找到一个相关的问题。
Alex

是否有伪代码(或Qiskit代码)来解决此数据库搜索问题?
alex

您将不得不看一下,但是在框架中应该很容易找到。
cnada

3

您也需要转换Oracle以容纳数据库,因此,一般的Oracle(Phase Inversion)将有两个子Oracle来查看该图。 通用格罗弗的数据库搜索算法电路

必须准备的第一个子运算符是存储电路,与QRAM相比,QRAM在其体内存储量子数据(状态),而该存储(阵列)电路仅准备在其帧中存储经典信息。存储二进制文件[010、110、100、011]的此类电路的示例如下所示: 存储器电路示例 有关更多信息,请阅读本文

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.