Comment puis-je implémenter une porte Toffoli à n bits?


Réponses:


19

Un moyen simple de le faire est illustré à la figure 4.10 de Nielsen & Chuang. n-

Où U peut être une rotation à un seul qubit (dans ce cas, une porte X).

Ce circuit fonctionne comme ceci: Nous voulons appliquer U au qubit cible uniquement si le ET de tous les qubits de contrôle est 1. Un Toffoli normal nous donne le ET de 2 qubits. Ainsi, en enchaînant quelques Toffolis, nous pouvons obtenir c1.c2.c3.c4.c5, avec le hic que certains qubits "de travail" (ou ancilla) ont été introduits pour stocker les résultats intermédiaires. Après avoir appliqué l'UC finale, nous obtenons le résultat final dans la cible. Nous pouvons maintenant nettoyer les qubits de travail intermédiaires en annulant leurs calculs et en les remettant à l'état | 0>. Ce modèle de calcul réversible est connu sous le nom de méthode "calcul-copie-non-calcul", et a été proposé pour la première fois par Charlie Bennett en 1973 .

Voici le code QISKit pour construire le circuit et le visualiser:

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)

Rendements:

circuit généré par qiskit


8

Je veux ajouter une méthode qui n'utilise pas de qubits ancilla, mais nécessite des portes plus compliquées que simplement contrôlées. Je crois que cette méthode a été présentée pour la première fois par Barenco et. Al. dans cet article , Lemme 7.5: entrez la description de l'image ici

V2=UV2=X

V=12(1+je1-je1-je1+je) .

Il s'agit d'une définition récursive, donc la porte de qubit de contrôle n est définie en termes de porte de qubit de contrôle n-1. Cela continuerait jusqu'à ce que vous atteigniez la porte CNOT à deux qubits.

Cette implémentation est un peu difficile, cependant, il en existe une plus simple si cela ne nous dérange pas de collecter une phase relative (voir le lemme 7.9 du même article).

V


Quelqu'un a-t-il travaillé sur la mise en œuvre de cette porte sur Cirq?
Enrique Segura

5

QuantumCircuit de Qiskit a une méthode mct pour construire une porte Toffoli à plusieurs contrôles avec plusieurs modes: basique, basique-ancilla sale, avancé, noancilla. Par exemple la porte Toffoli avec 3 qubits de contrôle:

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)

Production:

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 ├
           └───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘└───┘       └───┘└───┘        └───┘
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.