5.2.4 Bernstein-Vazirani-Algorithmus
In den vorigen Abschnitten haben wir mithilfe der Hadamard-Transformation interessante Probleme gelöst. Gegeben einer Funktion und dem Versprechen, dass entweder konstant oder balanced ist, kann der Deutsch-Jozsa-Algorithmus herausfinden, welche der beiden Fälle zutrifft.
In diesem Abschnitt werden wir ein anderes interessantes Problem besprechen, welches mit einer kleinen Veränderung des selben Algorithmus gelöst werden kann. Wie auch zuvor starten wir mit einem Versprechen über eine unbekannte Funktion . In diesem Fall werden wir aber nicht annehmen, dass die Funktion entweder konstant oder balanced ist, stattdessen nehmen wir, an dass sie die folgende spezielle Form hat:
wobei ein fester Bitstring ist, der die Funktion definiert.
Wenn , gibt es nur zwei solche Funktionen:
-
•
wenn sowie
-
•
wenn .
Wenn , dann gibt es schon vier verschiedene solcher Funktionen:
-
•
, wenn ,
-
•
, wenn ,
- •
- •
Beachte, dass jede dieser Funktionen eine Summe modulo Zwei über eine Teilmenge der Variablen berechnet. Welche Teilmenge? Wenn gilt, dann ist die Variable in der Teilmenge enthalten.
Im Allgemeinen gibt es mögliche Bitstrings und somit Funktionen der speziellen Form (5.14). Tatsächlich können wir uns Gl. 5.14 als Methode zum Verstecken des Bitstrings in der Funktion vorstellen. Wie oft muss man die Funktion auswerten um den Bitstring offenzulegen? Da
können wir schlussfolgern, dass auswertungen von auf jeden Fall ausreichen. Für jeden klassischen Algorithmus entspricht das auch dem Optimum: für jede Auswertung lernt man ein Bit an Information. Da die unbekannten Bits komplett unabhängig und beliebig sind und es genau gibt, muss man die Funktion mindestens -mal auswerten um alle Bits zu lernen.
Gleich werden wir sehen, dass das Problem mit einem Quantenalgorithmus viel besser gelöst werden kann. Zu Beginn berechnen wir erst einmal, wie sich das Phasen-Orakel für die Funktion aus Gl. 5.14 auf Basiszustände auswirkt:
Im zweiten Schritt haben wir ausgenutzt, dass nur von modulo Zwei (also ob gerade oder ungerade ist) abhängt, weswegen es keinen Unterschied macht, ob wir die Addition modulo 2 (‘’) oder die normale Addition benutzen. Wie können wir dieses Phasen-Orakel implementiert werden? Eigentlich interessiert uns das nicht, da der Algorithmus das Orakel wie eine Black-Box benutzen wird. Aber da es eine schöne Übung ist, kannst du das in der folgenden Übungsaufgabe herausfinden.
Übungsaufgabe 5.5 (Das Phasen-Orakel implementieren (Optional)).
In dieser Aufgabe kannst du das Phasen-Orakel für Funktionen der Form (5.14) implementieren.
-
1.
Wenn ist, gibt es vier solcher Funktionen, wie oben besprochen. Kannst du für jede von ihnen einen Quirky-Schaltkreis bauen, der die Phasen-Orakel implementiert?
-
2.
Erkläre in Worten oder mit Bildern, wie man das Phasen-Orakel im Allgemeinen bauen kann (also wenn und die Bits unbekannt sind).
Lösung.
-
1.
Das sind die vier Funktionen und ihre Phasen-Orakel:
-
•
Für , , also macht das Phasen-Orakel nichts.
-
•
Für , , was entspricht.
-
•
Für , , was das gleiche ist wie .
-
•
Für , , was entspricht.
Es ist klar, wie diese vier Operationen in Quirky aussehen.
-
•
-
2.
Das allgemeine Muster ist damit klar. Für eine beliebige Funktion der Form (5.14) gilt:
wobei wir und schreiben. Mit anderen Worten, wir wenden ein Z-Gatter auf das -te Qubit nur genau dann an, wenn ist.
Nun stellen wir den Bernstein-Vazirani-Algorithmus vor, welcher den versteckten Bitstring mit nur eines Aufrufs des Phasen-Orakels für aufdecken kann:
-
1.
Starte mit .
-
2.
Wende die Hadamard-Transformation an.
-
3.
Wende das Phasen-Orakel der Funktion an.
-
4.
Wende wieder die Hadamard-Transformation an.
-
5.
Messe zum Schluss alle Qubits. Das Messergbnis entspricht genau dem Bitstring .
Der Algorithmus ist identisch zu dem Deutsch-Jozsa-Algorithmus aus Abschnitt 5.2.3, bis auf den letzten Schritt, welcher noch einfacher ist.
Hausaufgabe 5.3 (Bernstein-Vazirani ausführen).
Die orangene Orakel Box in Quirky implementiert das Phasen-Orakel für eine Funktion der Form (5.14) mit . Implementiere den Bernstein-Vazirani-Algorithmus in Quirky und nutze ihn um den versteckten Bitstring aufzudecken.
Hack.
Warum funktioniert dieser Algorithmus? Jetzt bist du mit der Analyse dran!
Übungsaufgabe 5.6 (Bernstein-Vazirani überprüfen).
Die Funktion entspricht dem Bitstring , wie wir oben gesehen hatten.
Zeige, dass bei dem Ausführen des Bernstein-Vazirani-Algorithmus auf dieser Funktion das Messergebnis tatsächlich immer ist. Überprüfe das nicht einfach mit Quirky sondern schreibe den Zustand nach jedem Schritt selbst auf.
Lösung.
In Schritt 1 starten wir mit: In Schritt 2 wenden wir an und erhalten: Im 3. Schritt wenden wir das Phasen-Orakel für an: In Schhritt 4 wenden wir wieder an und erhalten: In Schritt 5 messen wir schlussendlich beide Qubits und erhalten immer das Ergebnis .In der folgenden Hausaufgabe kannst du den allgemeinen Fall analsysieren:
Hausaufgabe 5.4 ().
Zeige, dass das Ausführen von Bernstein-Vazirani auf einer Funktion der Form (5.14) mit 100% Wahrscheinlichkeit zu dem Messergebnis führt.
Hinweis: Da die ersten vier Schritte des Algorithmus identisch zu dem Deutsch-Jozsa-Algorithmus sind, ist der Zustand direkt vor der Messung gegeben in Gl. 5.13.
Hack.
Dem Hinweis nach ist der Zustand direkt vor der Messung der folgende:
Da die Funktion in diesem Problem die Form (wie in Gl. 5.14 definiert) hat, entspricht das
Um die Wahrscheinlichkeit für das Messergbnis zu finden, müssen wir die Amplitude des Zustands aus dem obigen Ausdruck analsysieren. Da das , …, entspricht, ist die Amplitude gegeben durch
Im ersten Schritt haben wir ausgenutzt, dass , …, . Im zweiten Schritt haben wir ausgenutzt, dass .
Da die Amplitude von somit 1 ist, können wir schlussfolgern, dass wir das Ergebnis mit 100% Wahrscheinlichkeit erhalten.