Hier ist mein Verfahren zum Rechnen auf einem Quantencomputer.
Schritt 1: Finden Sie eine klassische Rennstrecke, die genau das macht, woran Sie interessiert sind.
In diesem Beispiel ein Volladdierer.
Schritt 2: Wandeln Sie jedes klassische Tor in ein reversibles Tor um.
Halten Sie Ihre Ausgangsbits von Anfang an bereit und initialisieren Sie sie mit CNOTs, CCNOTs usw.
Schritt 3: Verwenden Sie temporäre Ausgänge.
Wenn Sie dies tun, um beispielsweise zu steuern, ob ein Grover-Orakel mit -1 phasiert oder nicht, ist es jetzt an der Zeit, ein Z-Gatter an Ihr Ausgangs-Qubit anzulegen.
Schritt 4: Befreien Sie sich von Zwischenwerten, indem Sie genau das Gegenteil von dem tun, was Sie getan haben, um sie zu berechnen.
Dies kann je nach dem, wie die Schaltung in Ihren Gesamtalgorithmus passt, das Entfernen der Ausgangsbits umfassen oder nicht.
Schritt 5: (Manchmal) Beseitigen Sie für jedes Ausgangsbit, das Sie behalten, ein Eingangsbit.
Und ich meine nicht "Lass sie auf den Boden fallen", ich meine, wende Operationen an, die dazu führen, dass sie mit Sicherheit 0 werden.
Wenn Sie rechnen c+=a
, ist es c
in der Regel schlecht, eine Kopie des ursprünglichen Werts von zurückzulassen . Es zerstört die Kohärenz. Sie müssen sich also Ihre Addiererschaltung (oder was auch immer) ansehen und überlegen, ob es eine Möglichkeit gibt, Ihre Ausgangsbits zu verwenden, um Ihre Eingangsbits loszuwerden. Beispielsweise c+a
könnten Sie nach der Berechnung eine vorübergehende Subtraktion außerhalb des Platzes in ein Register r, x oder r in das Register durchführen, in dem die unerwünschte Kopie von gespeichert ist c
, und dann die vorübergehende Subtraktion zurücksetzen.
(Eine bemerkenswerte Ausnahme zu "Wenn Sie Ihre Ausgabe behalten, behalten Sie nicht so viel von Ihrer Eingabe" ist Shors Algorithmus. Shors Algorithmus entschlüsselt seine Eingabe absichtlich , aber auf eine ganz bestimmte Weise, die bei der Periodenfindung hilft.)
Schritt 6: Seien Sie effizient
In Schritt 5 habe ich gesagt, dass Sie die Eingabe einer Inplace-Addition aufheben können, indem Sie eine Out-Place-Addition gefolgt von einer temporären Out-Place-Subtraktion ausführen. Das ist ein bisschen albern. Der gesamte Additionsprozess wird 4n Qubits umfassen (n zum Halten a
, n zum Halten c
, n zum Halten c+a
, n zum Halten (c+a)-a
). Wenn Sie schlauer sind, können Sie alles in 2n
Qubits oder (etwas einfacher) in 2n+1
Qubits einpassen :