Oracle-Konstruktion für den Grover-Algorithmus


16

In Mike und Ikes "Quantenberechnung und Quanteninformation" wird der Grover-Algorithmus ausführlich erklärt. In dem Buch und in allen Erklärungen, die ich online für Grovers Algorithmus gefunden habe, scheint es jedoch keine Erwähnung zu geben, wie Grovers Orakel aufgebaut ist, es sei denn, wir wissen bereits, nach welchem ​​Zustand wir suchen, was den Zweck des Grovers zunichte macht Algorithmus. Insbesondere lautet meine Frage: Wenn man f (x) so gibt, dass für einen x-Wert f (x) = 1 ist, aber für alle anderen f (x) = 0, wie konstruiert man ein Orakel, von dem man uns bekommt unser willkürlicher Anfangszustand | x> | y> bis | x> | y + f (x)>? So viele explizite Details wie möglich (vielleicht ein Beispiel?) Wären sehr dankbar. Wenn eine solche Konstruktion für eine beliebige Funktion mit Hadamard, Pauli oder anderen Standardquantengattern möglich ist,


"Hier scheint nicht erwähnt zu werden, wie Grovers Orakel aufgebaut ist, es sei denn, wir wissen bereits, nach welchem ​​Zustand wir suchen, was den Zweck des Algorithmus zunichte macht." ... "Grovers Orakel" ist das zu lösende Problem. Sie konstruieren es nicht. Sie erhalten (Orakelzugriff darauf) und werden gebeten, eine Berechnung durchzuführen, um den Wert aufzudecken. Wenn es hilft, tun Sie so, als würde ich das Orakel bauen, und bitten Sie Sie dann, das Problem zu lösen. (Beachten Sie außerdem, dass das Lesen / Schreiben / Vorbereiten einer Datenbank mit Elementen länger dauert als das Ausführen von Grovers N Zeit-Algorithmus.)N
Daniel Apon

2
Aber was ist, wenn wir nicht das Orakel bekommen, sondern ein f (x)? Stellen Sie sich vor, wir lösen ein 3-SAT-Problem und möchten Grovers verwenden, um die Lösung zu beschleunigen. Wir kennen das fragliche f (x) (die 3-SAT-Wahrheitsklauseln), wissen aber nicht unbedingt, welche Bitfolge x beim Einstecken in das 3-SAT ein echtes Ergebnis liefert. Muss es nicht eine Möglichkeit geben, aus der 3-SAT-Funktion ein Orakel zu konstruieren, um die richtige Bitfolge zu finden? Wenn es nicht etwas gibt, das von jemand anderem bereitgestellt werden muss, und es ist, wie Sie vorschlagen, scheint Grovers Algorithmus eher künstlich zu sein, sondern lediglich eine Übung, die Ihnen gegeben wurde.
Will

Antworten:


20

Das Orakel ist im Grunde nur eine Implementierung des Prädikats, für das Sie nach einer zufriedenstellenden Lösung suchen möchten.

Angenommen, Sie haben ein 3-Sat-Problem:

(¬x1 ∨ ¬x3 ∨ ¬x4) ∧
    (x2 ∨ x3 ∨ ¬x4) ∧
    (x1 ∨ ¬x2 ∨ x4) ∧
    (x1 ∨ x3 ∨ x4) ∧
    (¬x1 ∨ x2 ∨ ¬x3)

Oder in Tabellenform, wobei jede Zeile eine 3-Klausel ist, wobei x "diese Variable falsch", o "diese Variable wahr" und Leerzeichen "nicht in Klausel" bedeutet:

1 2 3 4
-------
x   x x
  o o x
o x   o
x o x

Erstellen Sie nun eine Schaltung, die berechnet, ob der Eingang eine Lösung ist, wie folgt:

Lösungsprüfer

Um Ihre Schaltung in ein Orakel zu verwandeln, schlagen Sie das Ausgangsbit mit einem Z-Gatter und berechnen Sie den von Ihnen verursachten Müll nicht (dh führen Sie die Rechenschaltung in umgekehrter Reihenfolge aus):

Orakelschaltung

Das ist alles dazu. Berechnen Sie das Prädikat, schlagen Sie das Ergebnis mit einem Z und berechnen Sie das Prädikat nicht. Das ist ein Orakel.

Iterieren Sie Diffusionsschritte mit Orakelschritten, und Sie haben eine Grover-Suche :

Grover-Suche

... obwohl Sie wahrscheinlich ein Beispiel mit weniger Lösungen auswählen sollten, ist der Fortschritt schrittweise (anstatt sich wie in meinem Beispiel um mehr als 90 Grad pro Schritt entlang der Ebene des Startzustands-Lösungszustands zu drehen).


Danke, das war sehr hilfreich. Unglaublich klar, beantwortete alles, was ich gefragt habe (und benutzte sogar gemeinsame Quantentore!). Gibt es einen Grund, warum Sie sich entscheiden, alle Ihre Start-Qubits in den Zustand | 1> zu versetzen, bevor Sie sie mit Hadamard-Gates überlagern, anstatt nur die | 0 zu setzen > staatliche Qubits durch Hadamards (dh hat dies einen Vorteil)? Welche Operation ist das für Ihre Diffusionsschritte? Sieht aus wie kontrolliertes X, aber verwenden Sie | 1> oder | 0> als Steuerelemente?
Will

(12|012|1)n

Fantastische Antwort und vielen Dank für den Link zu algassert.com/quirk !
Frédéric Grosshans
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.