[Abb: „A Wafer of the Latest D-Wave Quantum Computers“ by jurvetson (licensed under CC BY 2.0.)]
Der Algorithmus von Deutsch
Wir kommen nun zum bisherigen Höhepunkt der Reihe: Der erste Quantenalgorithmus überhaupt, der nach seinem Erfinder David Deutsch als Algorithmus von Deutsch bekannt ist.
Das behandelte Problem (wenn man es als Problem bezeichnen will) lautet: Es ist eine Funktion definiert, die wir nicht kennen. Sie ist also eine Black Box, und auch die Bezeichnung Orakel ist üblich. Die Frage ist nun: Ist konstant, d.h. ist , oder ist f balanciert, d.h. ist ? Das Problem ist offensichtlich leicht zu lösen: Man bestimmt und und vergleicht die Werte – fertig! Dies entspricht der Situation, dass wir eine Münze bekommen und sagen sollen, ob es eine „faire“ Münze ist, d.h. ob auf Vorder- und Rückseite Kopf und Zahl sind, oder ob es eine Trickmünze ist, also dass z.B. auf beiden Seiten die Zahl ist. Wir schauen uns einfach beide Seiten an. Wo ist die Schwierigkeit?
Natürlich ist das Problem von Deutsch kein Problem im eigentlichen Sinne. Aber was ist, wenn wir zusätzlich fordern: Du darfst dir nur eine Seite der Münze ansehen! Dies entspricht der Bedingung: Man darf die Funktion nur einmal aufrufen. Jetzt ist es wirklich ein Problem. Und es ist klassisch unlösbar. Nicht so beim Quantum Computing!
Dabei haben wir erst einmal das Problem, dass die Funktion kein unitärer Operator ist, sondern einfach eine binäre Funktion. Man kann aber aus einen unitären Operator wie folgt konstruieren:
Dabei steht für die klassische XOR-Verknüpfung, also die exklusive Oder-Verknüpfung, bei der ist wenn , und für . Das Pluszeichen im Kreis erinnert an die Addition der beiden Bits: 0+0 = 0, 1+1 = 10, und wir betrachten nur das kleinste Bit, das 0 ist, das höherwertige Bit werfen wir fort.. Umgekehrt ist 1+ 0 = 0 + 1 = 1.
Das ist aber genau unsere Frage an unser Orakel: Bist du konstant oder balanciert?
Wie wirkt F auf die Basisvektoren?
Wir rechnen jetzt einmal aus, wie der Operator auf den Basisvektoren wirkt. Dazu müssen wir die vier möglichen Fälle für unterscheiden, die wir entsprechend durchnumerieren:
sind konstant, balanciert. Wie wirken die vier daraus abgeleiteten Operatoren auf die Basisvektoren? Das ist nun einfach eine Fleißaufgabe, und wir kommen zu dem Ergebnis:
Aufbau der Schaltung
Wir bauen jetzt einmal die Schaltung für unserer Register für die Implementierung des Algorithmus auf. Wir bringen zuerst beide Qubits in eine Superposition von 0 und 1:
Wie sieht die Wellenfunktion für unser System aus? Das können wir leicht ausrechnen, denn in Teil 3 der Reihe haben wir die Hadamard-Matrix für ein 2-Qubit-Register berechnet:
Wir haben als Ausgangspunkt vier mögliche Kombinationen der einzelnen Qubits: . Dies entsprach in der Komponentendarstellung jeweils einem Vektor, an der Stelle k eine 1 stand und sonst 0. Rechnen wir als Beispiel einmal den Zustand nach der Hadamard-Operation für den Fall a = 0 und b = 1 aus:
Offensichtlich ist nun jedes Ergebnis einer Messung gleich wahrscheinlich, mit der Wahrscheinlichkeit . Wir haben keine Verschränkung, sondern einen Produktzustand.
Nun kommt unser Operator ins Spiel:
Durch die Anwendung von haben wir jetzt zwei verschränkte Qubits in einer Superposition. Nehmen wir einmal unser Beispiel ; nach der Hadamard-Operation ist das System im Zustand . Wie wirken nun die aud diesen Zustand? Oben haben wir bereits die Vorarbeit geleistet:
Die vier verschiedenen Versionen von haben die Basisvektoren noch etwas durcheinandergewürfelt. Aber wir haben eigentlich noch nichts erreicht: Jeder der vier möglichen Basiszustände ist nach wie vor gleich wahrscheinlich, wird also bei einer abschließenden Messung mit Wahrscheinlichkeit gemessen werden. Was nun?
Interferenz
Nun kommt das Geniale des Algorithmus. Nachdem die die Basisvektoren auf der rechten Seite etwas durcheinandergewürfelt hat, bzw. einige Vorzeichen umgekehrt hat, überlagern wir die Wellenfunktionen der beiden Qubits ein zweites Mal. Die dabei auftretenden Interferenzen – die Änderungen der Vorzeichen entsprechen ja Phasenverschiebungen um den Winkel – führen zum gewünschten Ergebnis. Grafisch sieht das so aus: Wir fügen die Hadamard-Operation zwischen und der Messung ein:
Was geschieht nun mit unserem Startzustand , wenn er diese Schaltung durchlaufen hat? Dazu betrachten wir wieder die vier Fälle, wobei wir diesmal wieder mit den Komponenten arbeiten. Wir schreiben zuerst einmal unsere Zwischenergebnisse in Komponentenform
Nun wenden wir die Hadamard-Operation auf diese Zwischenergebnisse an und erhalten:
Wie durch Geisterhand sind die Superpositionen verschwunden! Jedes der in der beschriebenen Schaltung führt bei Anwendung auf den Startzustand zu einem festen Ergebnis. Und wir sehen: Ist konstant (also oder ), so hat das erste Qubit bei der Messung mit Sicherheit den Wert 0, und ist balanciert ( also oder ), so hat dieses Qubit mit Sicherheit den Wert 1. Stören euch die Vorzeichen auf der rechten Seite? Dann erinnert euch, dass und für denselben Zustand stehen! Sie unterscheiden sich nur durch die Phase.
Ich habe hier etwas schlampig formuliert; natürlich sind die die Funktionen, die konstant oder nicht konstant sind, und nicht die . Es dürfte aber klar sein, was gemeint ist.
Zusammenfassung
Wir haben das Problem von Deutsch kennengelernt und gelöst. Mit Hilfe der beschriebenen Schaltung konnten wir entscheiden, ob bzw. konstant oder balanciert ist, obwohl wir es nur einmal angewendet haben. Wir haben also gleichzeitig beide Seiten der Münze gesehen. Das ist nur mit der Quantenmechanik möglich gewesen!