답변:
이를 수행하는 간단한 방법은 Nielsen & Chuang의 그림 4.10에 설명되어 있습니다.
여기서 U는 단일 큐 비트 회전 (이 경우 X 게이트) 일 수 있습니다.
이 회로는 다음과 같이 작동합니다. 모든 제어 큐 비트의 AND가 1 인 경우에만 대상 큐 비트에 U를 적용하려고합니다. 일반 Toffoli는 우리에게 2 큐 비트의 AND를 제공합니다. 따라서 몇 개의 Toffolis를 연결함으로써 c1.c2.c3.c4.c5를 얻을 수 있습니다. 중간 결과를 저장하기 위해 일부 "작업"(또는 ancilla) 큐 비트가 도입되었습니다. 최종 CU를 적용한 후 최종 결과를 목표로 얻습니다. 이제 계산을 취소하고 | 0> 상태로 되돌려 중간 작업 큐 비트를 정리할 수 있습니다. 이 가역적 계산 모델은 "컴퓨팅 복사 미 계산"방법으로 알려져 있으며 1973 년 Charlie Bennett에 의해 처음 제안되었습니다. .
회로를 구성하고 시각화하는 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)
수율 :
ancilla qubits를 사용하지 않지만 제어되지 않는 것보다 더 복잡한 게이트가 필요한 방법을 추가하고 싶습니다. 나는이 방법이 Barenco et. 알. 이 백서에서 , Lemma 7.5 :
어디 . 이 경우에는따라서
이것은 재귀 적 정의이므로, 제어 n 큐 비트 게이트는 제어 n-1 큐 비트 게이트의 관점에서 정의된다. 이것은 두 큐 비트 게이트 CNOT에 도달 할 때까지 계속됩니다.
이 구현은 조금 어렵지만, 상대적 단계를 모으는 것이 마음에 들지 않으면 더 간단한 방법이 존재합니다 (같은 논문의 Lemma 7.9 참조).
다음과 같은 게이트를 구현하려면 QISKIT에서는 고급 단일 큐 비트 게이트 를 사용해야합니다 .
Qiskit의 QuantumCircuit 에는 기본, 기본-더러운-아나 실라, 고급, 노난 실라 등 여러 모드로 다중 제어 토 포리 게이트를 구축하는 mct 방법이 있습니다. 예를 들어 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 ├
└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘└───┘ └───┘