Wir analysieren nun Grovers Algorithmus, um zu verstehen, wie er funktioniert.
Wir beginnen mit dem, was man als symbolische Analyse beschreiben könnte, bei der wir berechnen, wie die Grover-Operation G auf bestimmte Zustände wirkt, und verbinden diese symbolische Analyse dann mit einem geometrischen Bild, das dabei hilft, die Funktionsweise des Algorithmus zu visualisieren.
Beginnen wir mit der Definition zweier Mengen von Zeichenketten.
A0A1={x∈Σn:f(x)=0}={x∈Σn:f(x)=1}
Die Menge A1 enthält alle Lösungen unseres Suchproblems, während A0 die Zeichenketten enthält, die keine Lösungen sind (die wir als Nicht-Lösungen bezeichnen, wenn es praktisch ist).
Diese beiden Mengen erfüllen A0∩A1=∅ und A0∪A1=Σn, das heißt, dies ist eine Bipartition von Σn.
Als Nächstes definieren wir zwei Einheitsvektoren, die gleichmäßige Überlagerungen über die Mengen der Lösungen und Nicht-Lösungen darstellen.
Formal gesehen ist jeder dieser Vektoren nur definiert, wenn die entsprechende Menge nicht leer ist, aber im Folgenden konzentrieren wir uns auf den Fall, dass weder A0 noch A1 leer ist.
Die Fälle A0=∅ und A1=∅ lassen sich leicht separat behandeln, was wir später tun werden.
Nebenbei sei bemerkt: Die hier verwendete Notation ist üblich – immer wenn wir eine endliche und nicht leere Menge S haben, können wir ∣S⟩ schreiben, um den Quantenzustandsvektor zu bezeichnen, der gleichmäßig über den Elementen von S verteilt ist.
Definieren wir außerdem ∣u⟩ als gleichmäßigen Quantenzustand über alle n-Bit-Zeichenketten:
∣u⟩=N1x∈Σn∑∣x⟩.
Beachte, dass
∣u⟩=N∣A0∣∣A0⟩+N∣A1∣∣A1⟩.
Wir haben außerdem, dass ∣u⟩=H⊗n∣0n⟩ gilt, also stellt ∣u⟩ den Zustand des Registers Q nach der Initialisierung in Schritt 1 von Grovers Algorithmus dar.
Das impliziert, dass der Zustand von Q unmittelbar vor den Iterationen von G in Schritt 2 im zweidimensionalen Vektorraum liegt, der von ∣A0⟩ und ∣A1⟩ aufgespannt wird, und dass die Koeffizienten dieser Vektoren reelle Zahlen sind.
Wie wir sehen werden, werden diese Eigenschaften des Zustands – dass er eine reelle Linearkombination von ∣A0⟩ und ∣A1⟩ ist – nach jeder Anzahl von Iterationen der Operation G in Schritt 2 erhalten bleiben.
beginnend mit einer interessanten Beobachtung darüber.
Stellen wir uns kurz vor, wir würden die Funktion f durch die Komposition von f mit der NOT-Funktion ersetzen – oder anders gesagt, durch die Funktion, die wir erhalten, wenn wir das Ausgabebit von f invertieren.
Wir nennen diese neue Funktion g und können sie symbolisch auf einige alternative Weisen ausdrücken.
g(x)=¬f(x)=1⊕f(x)=1−f(x)={10f(x)=0f(x)=1
Beachte, dass
(−1)g(x)=(−1)1⊕f(x)=−(−1)f(x)
für jede Zeichenkette x∈Σn gilt und daher
Zg=−Zf.
Das bedeutet, wenn wir die Funktion f durch die Funktion g ersetzen würden, würde Grovers Algorithmus nicht anders funktionieren – denn die Zustände, die wir aus dem Algorithmus in den beiden Fällen erhalten, sind notwendigerweise äquivalent bis auf eine globale Phase.
Das ist kein Problem!
Intuitiv gesprochen ist es dem Algorithmus egal, welche Zeichenketten Lösungen sind und welche nicht – er muss nur in der Lage sein, Lösungen von Nicht-Lösungen zu unterscheiden, um korrekt zu funktionieren.
Betrachten wir nun die Wirkung von G auf die Quantenzustandsvektoren ∣A0⟩ und ∣A1⟩.
Zunächst stellen wir fest, dass die Operation Zf eine sehr einfache Wirkung auf ∣A0⟩ und ∣A1⟩ hat.
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩
Zweitens haben wir die Operation H⊗nZORH⊗n.
Die Operation ZOR ist definiert als
ZOR∣x⟩=⎩⎨⎧∣x⟩−∣x⟩x=0nx=0n,
wiederum für jede Zeichenkette x∈Σn, und eine praktische alternative Ausdrucksweise dieser Operation ist:
ZOR=2∣0n⟩⟨0n∣−I.
Eine einfache Möglichkeit, zu überprüfen, dass dieser Ausdruck mit der Definition von ZOR übereinstimmt, besteht darin, seine Wirkung auf Standard-Basiszustände zu evaluieren.
Die Operation H⊗nZORH⊗n kann daher wie folgt geschrieben werden:
H⊗nZORH⊗n=2H⊗n∣0n⟩⟨0n∣H⊗n−I=2∣u⟩⟨u∣−I,
wobei wir dieselbe Notation ∣u⟩ wie oben für die gleichmäßige Überlagerung über alle n-Bit-Zeichenketten verwenden.
Und nun haben wir, was wir brauchen, um die Wirkung von G auf ∣A0⟩ und ∣A1⟩ zu berechnen.
Zuerst berechnen wir die Wirkung von G auf ∣A0⟩.
Wie bereits festgestellt, liegt der Zustand von Q unmittelbar vor Schritt 2 im zweidimensionalen Raum, der von ∣A0⟩ und ∣A1⟩ aufgespannt wird, und wir haben gerade gezeigt, dass G jeden Vektor in diesem Raum auf einen anderen Vektor im selben Raum abbildet.
Das bedeutet, dass wir uns für die Analyse ausschließlich auf diesen Unterraum konzentrieren können.
Um besser zu verstehen, was in diesem zweidimensionalen Raum vor sich geht, drücken wir die Wirkung von G auf diesen Raum als Matrix aus,
deren erste und zweite Zeile/Spalte jeweils ∣A0⟩ und ∣A1⟩ entsprechen.
Bisher in dieser Reihe haben wir die Zeilen und Spalten von Matrizen immer mit den klassischen Zuständen eines Systems verbunden, aber Matrizen können auch verwendet werden, um die Wirkungen linearer Abbildungen auf anderen Basen zu beschreiben, wie wir es hier haben.
Obwohl es auf den ersten Blick überhaupt nicht offensichtlich ist, ist die Matrix M das, was wir erhalten, wenn wir eine einfacher aussehende Matrix quadrieren.
Dieser Winkel θ wird in der folgenden Analyse eine sehr wichtige Rolle spielen, deshalb lohnt es sich, seine Bedeutung zu betonen, wenn wir ihn hier zum ersten Mal sehen.
Das liegt daran, dass eine zweimalige Rotation um den Winkel θ einer Rotation um den Winkel 2θ entspricht.
Eine weitere Möglichkeit, das einzusehen, ist die Verwendung des alternativen Ausdrucks
θ=cos−1(N∣A0∣),
zusammen mit den Doppelwinkelformeln der Trigonometrie:
cos(2θ)sin(2θ)=cos2(θ)−sin2(θ)=2sin(θ)cos(θ).
Zusammenfassend ist der Zustand des Registers Q zu Beginn von Schritt 2
und der Effekt, G auf diesen Zustand anzuwenden, besteht darin, ihn um einen Winkel 2θ im von ∣A0⟩ und ∣A1⟩ aufgespannten Raum zu rotieren.
So haben wir zum Beispiel
Verbinden wir nun die gerade durchgeführte Analyse mit einem geometrischen Bild.
Die Idee ist, dass die Operation G das Produkt zweier Spiegelungen ist:
Zf und H⊗nZORH⊗n.
Und der Nettoeffekt von zwei Spiegelungen ist eine Rotation.
Beginnen wir mit Zf.
Wie wir bereits zuvor beobachtet haben, gilt
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩.
Im zweidimensionalen Vektorraum, der von ∣A0⟩ und ∣A1⟩ aufgespannt wird, ist das eine Spiegelung an der Geraden parallel zu ∣A0⟩, die wir L1 nennen werden.
Hier ist eine Abbildung, die die Wirkung dieser Spiegelung auf einen hypothetischen Einheitsvektor ∣ψ⟩ illustriert,
der als reelle Linearkombination von ∣A0⟩ und ∣A1⟩ angenommen wird.
Zweitens haben wir die Operation H⊗nZORH⊗n, die wir bereits als
H⊗nZORH⊗n=2∣u⟩⟨u∣−I
schreiben können.
Das ist ebenfalls eine Spiegelung, diesmal an der Geraden L2 parallel zum Vektor ∣u⟩.
Hier ist eine Abbildung, die die Wirkung dieser Spiegelung auf einen Einheitsvektor ∣ψ⟩ zeigt.
Wenn wir diese zwei Spiegelungen komponieren, erhalten wir eine Rotation – um das Doppelte des Winkels zwischen den Spiegelungsgeraden – wie diese Abbildung zeigt.
Das erklärt in geometrischen Begriffen, warum der Effekt der Grover-Operation darin besteht, Linearkombinationen von ∣A0⟩ und ∣A1⟩ um einen Winkel von 2θ zu rotieren.