Unstrukturierte Suche
Zusammenfassung
Wir beginnen mit einer Beschreibung des Problems, das Grovers Algorithmus löst. Wie üblich schreiben wir für das binäre Alphabet in dieser gesamten Diskussion.
Sei
eine Funktion von Binärzeichenketten der Länge auf Bits. Wir gehen davon aus, dass wir diese Funktion effizient berechnen können, ansonsten ist sie jedoch beliebig, und wir können uns nicht auf eine besondere Struktur oder eine spezifische Implementierung verlassen.
Was Grovers Algorithmus tut, ist nach einer Zeichenkette zu suchen, für die gilt. Solche Zeichenketten bezeichnen wir als Lösungen des Suchproblems. Falls es mehrere Lösungen gibt, ist jede einzelne davon eine korrekte Ausgabe; gibt es keine Lösung, muss die Antwort lauten, dass keine Lösung existiert.
Diese Aufgabe wird als unstrukturiertes Suchproblem bezeichnet, weil wir nicht davon ausgehen können, dass eine besondere Struktur hat, die es einfach macht. Wir durchsuchen keine geordnete Liste und keine Datenstruktur, die speziell für die Suche konzipiert wurde – wir suchen im Grunde eine Nadel im Heuhaufen.
Intuitiv könnte man sich vorstellen, dass wir einen äußerst komplexen Booleschen Circuit haben, der berechnet, und diesen Circuit für eine ausgewählte Eingabezeichenkette leicht ausführen können. Da der Circuit jedoch so kompliziert ist, haben wir keine Chance, ihn durch Untersuchung zu verstehen (abgesehen von der Möglichkeit, ihn für ausgewählte Eingaben auszuwerten).
Eine Möglichkeit, diese Suchaufgabe klassisch durchzuführen, besteht darin, alle Zeichenketten der Reihe nach durchzugehen und für jede zu evaluieren, um zu prüfen, ob sie eine Lösung ist. Schreiben wir im Folgenden
der Einfachheit halber. Es gibt Zeichenketten in , sodass das Durchlaufen aller Auswertungen von erfordert. Unter der Annahme, dass wir auf die Auswertung von auf ausgewählten Eingaben beschränkt sind, ist das das Beste, was wir mit einem deterministischen Algorithmus tun können, wenn wir Erfolg garantieren wollen. Mit einem probabilistischen Algorithmus könnte man Zeit sparen, indem man Eingaben für zufällig auswählt – aber auch dann benötigt man Auswertungen von , wenn die Methode mit hoher Wahrscheinlichkeit erfolgreich sein soll.
Grovers Algorithmus löst dieses Suchproblem mit hoher Wahrscheinlichkeit mit nur Auswertungen von . Diese Funktionsauswertungen müssen in Überlagerung stattfinden, ähnlich wie bei den Abfragealgorithmen, die in der Lektion Quanten-Abfragealgorithmen besprochen wurden, einschließlich Deutschs Algorithmus, des Deutsch-Jozsa-Algorithmus und Simons Algorithmus. Im Gegensatz zu diesen Algorithmen verfolgt Grovers Algorithmus einen iterativen Ansatz: Er wertet auf Überlagerungen von Eingabezeichenketten aus und verschränkt diese Auswertungen mit anderen Operationen, die Interferenzmuster erzeugen und nach Iterationen mit hoher Wahrscheinlichkeit zu einer Lösung führen (sofern eine existiert).
Formale Problemstellung
Wir formalisieren das Problem, das Grovers Algorithmus löst, mithilfe des Abfragemodells der Berechnung. Das heißt, wir nehmen an, dass wir auf die Funktion über ein Abfrage-Gate zugreifen können, das wie üblich definiert ist: