众所周知,通过利用量子并行性,我们可以同时为许多不同值计算函数。但是,需要一些巧妙的操作来提取每个值的信息,即使用Deutsch算法。
考虑相反的情况:我们可以使用量子并行性为单个值x_0同时计算许多函数(例如)吗?
众所周知,通过利用量子并行性,我们可以同时为许多不同值计算函数。但是,需要一些巧妙的操作来提取每个值的信息,即使用Deutsch算法。
考虑相反的情况:我们可以使用量子并行性为单个值x_0同时计算许多函数(例如)吗?
Answers:
确切的答案取决于所需的确切叠加类型。金字塔和尼尔的答案都给你类似的东西
在这里,我跟随Niel标记了不同的函数,等,其中为要叠加的函数总数。我也使用表示功能作为存储程序的一些描述。在就是什么号码需要在那里进行归一化的状态。
请注意,这不仅是的叠加。它与存储的程序纠缠在一起。如果要查找存储的程序,则只需混合。这意味着存储的程序可能构成“垃圾”,从而防止了您可能依赖的干扰影响。否则可能不会。这取决于在您的计算中将如何使用此叠加。
如果要清除垃圾,事情会变得更加棘手。例如,假设你想要的是一个单一的有效果
对于所有可能的输入(我假设是在计算基础上编写的位字符串)。注意,在函数输出比输入更长的情况下,我还在输入端包含了一些空白的qubit。
由此,我们可以很快找到函数必须满足的条件:由于输入状态形成正交集,因此输出也必须形成正交集。这将严重限制可以通过这种方式组合的功能的种类。
您要在不同计算分支中求值的函数必须是可计算的,才能以某种方式指定(例如,一系列经典逻辑门)。而且,您希望计算的函数的集合本身应该是可计算的:对于给定的,您必须能够计算关于如何在其参数上计算的规范。实际上:您必须具有一种将功能描述为存储程序的方法。(对于“ 在输入上计算函数中的一个/全部函数,甚至在我们考虑进行量子计算之前,这些都是必要的。 ”。)
一旦有了将函数指定为存储程序的方法,就可以基本完成:程序本质上是另一种输入,您可以叠加准备,例如通过计算对固定输入或输入叠加进行求值从每个分支的规格中获取功能。
从中获得竞争优势是另一回事,并且必须在函数中包含一些特定的结构,您可以利用这些结构,但是如果您有足够的信息来简单地进行“叠加评估”,就很容易做到。问题是明智的。
描述给出功能的电路 如 和电路给 如 ,有几种方法可以做到这一点:
从中的qubit寄存器开始 ,准备状态 在前两个寄存器上。这可以通过应用酉进行1对第一个寄存器把该寄存器的状态 在申请CNOT之前, 。然后申请 从第一个寄存器到第三个寄存器 从第二到第三。
1.1。这使得第三个寄存器现在处于状态,当初始操作(直到 前两个寄存器上的)取反。但是,由于实施任意受控-运算(以及不必要地使用额外的量子位)的一般困难,可能更容易通过拨号the来直接实现此操作。。请注意,这都没有实现 也不 ,但功能不同
1.2。不反转前两个寄存器的初始操作会使第三个寄存器处于纠缠状态 和 ,将在其他答案中进行讨论。
从国家开始 并申请 到第一个寄存器并 到第二。这是最接近经典并行性的方法,在经典并行性中,两个函数都独立应用于相同状态的副本。除了需要两倍数量的qubit之外,这里的问题是,由于没有克隆,因此要复制,它要么必须是已知的,要么是经典状态(即在计算基础上不涉及叠加)。也可以使用近似克隆。
从状态开始 ,以及经典寄存器。应用a 1将第一个寄存器叠加。现在,测量该寄存器(将结果放入经典寄存器中)并应用经典运算IF RESULT = 0 U_f ELSE U_g
。尽管这似乎不如上述任何一种操作强大,但从某种意义上讲,这等效于量子通道。此类方法可用于制作随机unit,可用于例如玻色子采样和随机基准测试
1由