如何实现n位Toffoli门?


Answers:


19

Nielsen&Chuang的图4.10说明了一种简单的方法。 n-

其中U可以是任何单量子位旋转(在这种情况下为X门)。

该电路的工作方式如下:仅当所有控制量子位的AND为1时,我们才想将U应用于目标量子位。正常的Toffoli给出2个量子位的AND。因此,通过链接几个Toffoli,我们可以得到c1.c2.c3.c4.c5,并且发现一些“工作”(或辅助)量子位已被引入来存储中间结果。应用最终的CU之后,我们将最终的结果存入目标。现在,我们可以通过取消中间工作量子位的计算,使它们返回| 0>状态,来清理它们。这种可逆计算的模型被称为“计算-复制-非计算”方法,由Charlie Bennett于1973年首次提出

这是QISKit代码,用于构造电路并使之可视化:

from qiskit import QuantumRegister, QuantumCircuit

n = 5  # must be >= 2

ctrl = QuantumRegister(n, 'ctrl')
anc = QuantumRegister(n-1, 'anc')
tgt = QuantumRegister(1, 'tgt')

circ = QuantumCircuit(ctrl, anc, tgt)

# compute
circ.ccx(ctrl[0], ctrl[1], anc[0])
for i in range(2, n):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])

# copy
circ.cx(anc[n-2], tgt[0])

# uncompute
for i in range(n-1, 1, -1):
    circ.ccx(ctrl[i], anc[i-2], anc[i-1])
circ.ccx(ctrl[0], ctrl[1], anc[0])    

from qiskit.tools.visualization import circuit_drawer
circuit_drawer(circ)

产量:

qiskit生成电路


8

我想添加一种不使用ancilla量子位的方法,但是它需要的闸门比不控制而不是更复杂。我相信这种方法是Barenco等人首先提出的。等 在本文中,引理7.5: 在此处输入图片说明

V2=üV2=X

V=1个21个+一世1个-一世1个-一世1个+一世 

这是递归定义,因此控制n量子位门是根据控制n-1量子位门定义的。这将一直持续到您到达两个量子位门CNOT为止。

这种实现有点困难,但是,如果不介意收集相对相位,则存在一种更简单的实现(请参见同一篇论文的7.9引言)。

V


有没有人在Cirq上实现此门?
Enrique Segura

5

Qiskit的QuantumCircuit具有MCT方法构建多个控制Toffoli门有几种模式:基本,基本脏,附属物,先进,noancilla。例如具有3个控制量子位的Toffoli门:

from qiskit import QuantumCircuit, QuantumRegister

controls = QuantumRegister(3, "c_qb")
target = QuantumRegister(1, "t_qb")
circuit = QuantumCircuit(controls, target)

circuit.mct(controls, target[0], None, mode='advanced')

print(circuit)

输出:

c_qb_0: |0>──────■────────■────────────────■──────────────────────────────────■──────────────────────────────────■────────────────────
                 │      ┌─┴─┐            ┌─┴─┐                                │                                  │                    
c_qb_1: |0>──────┼──────┤ X ├──────■─────┤ X ├──────■────────■────────────────┼─────────────────■────────────────┼────────────────────
                 │      └───┘      │     └───┘      │      ┌─┴─┐            ┌─┴─┐             ┌─┴─┐            ┌─┴─┐                  
c_qb_2: |0>──────┼─────────────────┼────────────────┼──────┤ X ├──────■─────┤ X ├──────■──────┤ X ├──────■─────┤ X ├──────■───────────
           ┌───┐ │-pi/4 ┌───┐┌───┐ │pi/4 ┌───┐┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ├───┤┌───┐ │pi/4 ├───┤┌───┐ │-pi/4 ┌───┐
t_qb_0: |0>┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├┤ H ├─■─────┤ H ├┤ H ├─■──────┤ H ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
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.