量子计算中Shor算法的电路实现一题
Posted
技术标签:
【中文标题】量子计算中Shor算法的电路实现一题【英文标题】:One question about circuit realization of Shor's algorithm in quantum computing 【发布时间】:2021-11-30 03:05:10 【问题描述】:我正在研究 Shor 算法的量子电路实现,该算法使用 python 包 Qiskit 将 15 分解为素数的乘积。有关详细信息,请参阅此website。
我的问题与本网站U-gate的实现有关。在本网站中,U-gate的实现以表格形式给出
def c_amod15(a, power):
"""Controlled multiplication by a mod 15"""
if a not in [2,7,8,11,13]:
raise ValueError("'a' must be 2,7,8,11 or 13")
U = QuantumCircuit(4)
for iteration in range(power):
if a in [2,13]:
U.swap(0,1)
U.swap(1,2)
U.swap(2,3)
if a in [7,8]:
U.swap(2,3)
U.swap(1,2)
U.swap(0,1)
if a == 11:
U.swap(1,3)
U.swap(0,2)
if a in [7,11,13]:
for q in range(4):
U.x(q)
U = U.to_gate()
U.name = "%i^%i mod 15" % (a, power)
c_U = U.control()
return c_U
我的问题是,为什么这个 U 门是通过交换 qbits 来设计的。 'a' 的值究竟会如何影响交换方案?如果我想分解 33 怎么办?我应该如何将此交换方案更改为因子 33?
【问题讨论】:
交换操作是零功耗、可逆计算的基础。见en.m.wikipedia.org/wiki/Fredkin_gate 【参考方案1】:a
的值是Shor算法相位估计部分的一部分,这里的运算
|y> -> |ay mod N>
已应用。所以a
会影响算术运算,并且取决于您实现模乘的方式,会对最终电路产生不同的影响。
Qiskit教科书实现似乎只支持a
的特殊值,但软件包本身有a
的所有值的通用代码:https://github.com/Qiskit/qiskit-terra/blob/main/qiskit/algorithms/factorizers/shor.py
该代码使用傅里叶变换进行乘法运算,因此a
将影响傅里叶变换后应用的相移。 Qiskit 的实现基于this paper,您可以在其中找到更多信息。
【讨论】:
感谢您的回答。我完全了解您的答案中列出的论文和网站。我想我的问题是为什么交换寄存器位可以给我们一个实现顺序查找算法的门。【参考方案2】:尝试在 cmets 中回答您的问题:
我想我的问题是为什么交换寄存器位可以给我们一个实现顺序查找算法的门。
考虑 Shor 算法的一种方法是将其作为输入:
一个电路*U
,和
一个起始状态|ψ⟩
Shor 的算法告诉我们该电路的 周期,即您需要重复 U
的次数才能回到您的初始输入。然后我们使用经典算法通过设置U|y⟩≡|ay mod N⟩
和|ψ⟩=|1⟩
将分解映射到这个问题。
您可以通过模拟确认 Qiskit 教科书中的电路具有该属性,尽管它没有提供生成该电路的方法(我想它是受过教育的猜测类似于 this answer 但您需要阅读that paper 在一般方法的另一个答案中)。
如果我们已经使用算法知道了答案,那么我们可以找到任何具有正确周期的旧电路并将其插入。例如作用于|1⟩
的单个交换门的周期为 2。虽然这并不能真正算作“执行 Shor 算法”,但它通常用于演示算法的工作原理12。
*为了使算法高效,输入实际上是“为U^(2^x)
制作电路的有效方法”。幸运的是,我们知道如何为因式分解所需的电路执行此操作,但 Qiskit 教科书只是为了演示而低效地重复了U
。
【讨论】:
以上是关于量子计算中Shor算法的电路实现一题的主要内容,如果未能解决你的问题,请参考以下文章