Quanten Computing Algorithmen

Eine kurze Zusammenfassung und Formelsammlung für das Modul "Quantum Computing Algorithms"

#Quantencomputing#Masterstudium#Sonstiges#Studium

Quantencomputing-Algorithmen

In der Vorlesung „Foundations of Quantum Computing“ haben wir die grundlegenden Konzepte des Quantencomputings kennengelernt, doch die eigentlichen Algorithmen wurden für den Folgekurs „Quantum Computing Algorithms“ aufgespart. Die zentrale Idee hinter vielen Quantenalgorithmen ist der Einsatz von Phasenorakeln und Amplitudenverstärkung, was ich persönlich besonders spannend fand. Im Folgenden gebe ich eine Zusammenfassung dieser Konzepte, erkläre, wie sie im Grover-Algorithmus zur Anwendung kommen, und füge außerdem das Formelskript hinzu, das ich mir als Prüfungsvorbereitung zusammengestellt habe.

Phasenorakel

Für eine Boolesche Funktion f:{0,1}n{0,1}f: \{0,1\}^n \to \{0,1\} wirkt ein Bit-Flip-Oracle UfU_f wie folgt:

Ufxy=xyf(x)U_f |x\rangle |y\rangle = |x\rangle |y \oplus f(x)\rangle

Auf den ersten Blick wirkt das nicht sonderlich aufregend: Es schreibt das Ergebnis f(x)f(x) in das zweite Register, indem es dieses genau dann invertiert, wenn f(x)=1f(x) = 1 gilt. Doch der Trick liegt darin, dass wir für das zweite Register den Zustand y==12(01)\ket{y} = |-\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle - |1\rangle) wählen. Dann gilt:

Ufx=(1)f(x)xU_f |x\rangle |-\rangle = (-1)^{f(x)} |x\rangle |-\rangle

Dies ist ein Phasenorakel. Das Ergebnis f(x)f(x) erscheint nun nicht mehr explizit im zweiten Qubit, sondern es wirkt als relativer Phasenfaktor auf dem ersten Qubit.

Diese Konstruktion ist für Quantenalgorithmen enorm nützlich, weil sie uns erlaubt, die Phase von Quantenzuständen auf der Grundlage von Funktionsauswertungen zu manipulieren.

Warum das funktioniert: Phase Kickback

Der Grund, warum das oben Gesagte funktioniert, liegt in einer besonderen Eigenschaft des Zustands |-\rangle, die als Phase Kickback bezeichnet wird.

Zur Erinnerung: die polaren Zustände sind definiert als

+=12(0+1),=12(01)|+\rangle = \tfrac{1}{\sqrt{2}} (|0\rangle + |1\rangle), \quad |-\rangle = \tfrac{1}{\sqrt{2}} (|0\rangle - |1\rangle)

Es handelt sich um Eigenzustände des Pauli-X-Operators, der wie folgt wirkt:

X+=++,X=X|+\rangle = +|+\rangle, \quad X|-\rangle = -|-\rangle

Das spiegelt ein allgemeines Phänomen in der Quantenmechanik wider: Befindet sich ein Qubit in einem Eigenzustand eines Operators, so verändert die Anwendung dieses Operators den Zustand nicht, außer dass er mit einem Phasenfaktor (dem Eigenwert) multipliziert wird. Ist ein Steuerqubit in einer Superposition und das Zielqubit im Eigenzustand des Operators, so „wandert“ der Eigenwert als relativer Phasenfaktor zurück auf das Steuerqubit.

Genau deshalb führt die Wahl von |-\rangle als Hilfsregister in UfU_f dazu, dass wir (1)f(x)(-1)^{f(x)} auf x|x\rangle erhalten: Der Eigenwert aus der XX-Operation auf |-\rangle wird zurück in das Eingaberegister „gekickt“.

Grovers Algorithmus

Der Grover-Algorithmus ist ein Quanten-Suchverfahren. Stellen wir uns vor, wir möchten unter NN möglichen Kandidaten ein markiertes Element xx^* finden. Klassisch bräuchten wir im Durchschnitt O(N)O(N) Abfragen der Funktion, die überprüft, ob x=xx = x^* gilt. Der Grover-Algorithmus reduziert dies mithilfe der Phasenorakel-Idee auf nur O(N)O(\sqrt{N}) Abfragen.

Praktisch ist Grovers Algorithmus auch bei SAT-Problemen oder allgemein in Situationen nützlich, in denen man ein xx finden möchte, sodass f(x)=1f(x) = 1 gilt.

Die Grundidee ist, dass ein Orakel die richtige Lösung mit einer negativen Phase markiert. Reflektieren wir danach alle Amplituden um ihren Mittelwert, so werden die markierten Zustände verstärkt und die übrigen unterdrückt. Wiederholen wir diesen Prozess einige Male, steigt die Wahrscheinlichkeit, den richtigen Zustand zu messen, sehr stark an. Während klassisch O(N)O(N) Abfragen notwendig wären, reichen im Quantenfall O(N)O(\sqrt{N}) Iterationen.

Schritt 1: Uniforme Superposition

Zunächst werden Hadamard-Gatter auf alle Qubits angewandt, um eine gleichverteilte Superposition zu erzeugen:

s=Hn0n=12nx{0,1}nx|s\rangle = H^{\otimes n} |0\rangle^{\otimes n} = \tfrac{1}{\sqrt{2^n}} \sum_{x \in \{0,1\}^n} |x\rangle

Damit besitzen alle möglichen Zustände die gleiche Amplitude.

Schritt 2: Phasenflip

Das Orakel invertiert nun das Vorzeichen des markierten Zustands mithilfe eines Phasenorakels, wobei xx^* das gesuchte Element ist:

Sf=I2n2xxS_f = I_{2^n} - 2|x^*\rangle \langle x^*|

Dies entspricht dem Multiplizieren von x\ket{x^*} mit 1-1, während alle anderen Zustände unverändert bleiben.

Zugegeben wirkt das zunächst paradox, denn um SfS_f explizit zu konstruieren, müssten wir xx^* bereits kennen. Praktisch verwendet man jedoch ein Black-Box-Phasenorakel, das f(x)f(x) auswertet, ohne xx^* direkt preiszugeben.

Schritt 3: Diffusionsoperator

Um die Amplituden um den Mittelwert zu reflektieren, nutzen wir den sogenannten Diffusionsoperator:

D=2ssI2nD = 2|s\rangle \langle s| - I_{2^n}

Dieser lässt sich mit Hadamard-Gattern wie folgt aufbauen:

D=Hn[20n0nI2n]HnD = H^{\otimes n} \big[2|0\rangle^{\otimes n}\langle 0|^{\otimes n} - I_{2^n}\big] H^{\otimes n}

Schritt 4: Grover-Iteration

Fasst man die beiden vorherigen Schritte zusammen, erhält man den Grover-Iterationsoperator:

G=DSfG = D S_f

Jede Iteration verstärkt die Amplitude von x|x^*\rangle, während die anderen Zustände geschwächt werden.

Geometrische Sichtweise

Anschaulich lässt sich das Ganze als eine Rotation in einem zweidimensionalen Unterraum verstehen: Die eine Achse entspricht dem markierten Zustand x|x^*\rangle, die andere der gleichverteilten Superposition aller unmarkierten Zustände.

Bezeichnen wir mit θ\theta den Winkel zwischen s|s\rangle und x|x^*\rangle. Anfangs beträgt die Amplitude von x|x^*\rangle in s|s\rangle:

sinθ=12n\sin\theta = \frac{1}{\sqrt{2^n}}

Der Zustandsvektor rotiert in jeder Iteration um den Winkel 2θ2\theta. Nach rr Iterationen ist die Überlappung mit dem markierten Unterraum

sin((2r+1)θ)\sin((2r+1)\theta)

und die Erfolgswahrscheinlichkeit beträgt

P(r)=sin2 ⁣((2r+1)θ)P(r) = \sin^2\!\left((2r+1)\theta\right)

Da dies oszilliert, ist es entscheidend, die richtige Anzahl an Iterationen zu wählen.

Wie viele Iterationen sind nötig?

Aus der obigen Formel können wir ableiten, dass die Wahrscheinlichkeit, x|x^*\rangle zu messen, maximiert wird, wenn gilt:

rπ42nkr \approx \left\lfloor \tfrac{\pi}{4} \sqrt{\tfrac{2^n}{k}} \right\rfloor

wobei kk die Anzahl der markierten Lösungen bezeichnet.

Merkblatt

Merkblatt

Kommentare

Noch Fragen?