Nein, das tut es nicht.
Das " Orakel " in Grovers Algorithmus ist eine Funktion, die bei jedem Element prüft, ob das Element ist, beispielsweise . Dazu benötigt das Orakel keine Kenntnis aller anderen Elemente , die sich in der Datenbank befinden .x k x Ziel x jxkxkxtargetxj
Es kann hilfreich sein, ein konkreteres Beispiel zu betrachten. Angenommen, Sie haben eine Datenbank mit vierstelligen Telefonnummern, wobei das te Element in dieser Datenbank bezeichnet. Sie möchten wissen, welche Position in der Datenbank dem Element . Nehmen wir an, dass das Element 10000 der Datenbank das einzige derartige Element ist, und für alle .x k k 1234 x 10000 = 1234 x k ≤ 1234 k ≤ 1000020000xkk1234x10000=1234xk≠1234k≠10000
Im klassischen Fall, da die Datenbank unsortiert ist, gibt es keinen besseren Weg, als jedes einzelne Element in der Datenbank durchzugehen und jedes mit dem Ziel . Dazu benötigen Sie nur einen Algorithmus, der bei zurückgibt, wenn und andernfalls . Eine äquivalente Möglichkeit, dieses Problem zu benennen, besteht darin, zu sagen, dass wir einen Algorithmus wollen, der bei einer Liste von Paaren das Paar so zurückgibt, dass ist was wir wollen. In unserem Fall wollen wir also einen Algorithmus, der zurückgibtx k ja x k = 1234 nein { ( k , x k ) } 20000 k = 1 x k { ( k , x k ) } 20000 k = 1 ( 10000 , x 10000 = 1234 ) x k1234xkyesxk=1234no{(k,xk)}20000k=1xk{ ( k , xk) }20000k = 1( 10000 , x10000= 1234 ). Beachten Sie, dass dies bedeutet, dass die Funktion, die jedes Paar überprüft, nur nach Merkmalen eines Teils des Zustands , nämlich des Teils . Wäre dies nicht der Fall, wäre das Ganze sinnlos, da wir keine Informationen wiederherstellen würden.xk
Diese letzte Formulierung des Problems sollte man berücksichtigen, wenn man über Grovers Algorithmus nachdenkt.
Im Quantenfall werden die Paare zu den Quantenzuständen (oder nur wie sie normalerweise bezeichnet werden), und die Orakelfunktion überprüft nur den Teil der darin gespeicherten Informationen entspricht dem Ziel . Die Ausgabe der Prozedur ist der Status . Nun, ein Teil dieser Zustand , den wir bereits kennen , weil es in der Orakel fest einprogrammiert wurde: wissen wir , dass der zweite Teil der Informationen codiert in ist( k , xk)| ψk⟩|k⟩|ψk⟩|ψ10000⟩|ψ10000⟩1234, denn das ist es, wonach wir in erster Linie gesucht haben, und es ist die Information, die im Orakel selbst verschlüsselt wurde.
Der Status auch zusätzliche Informationen , nämlich die Position in der Datenbank: .
Diese Informationen wurden nicht zum Erstellen des Orakels verwendet und sind die Informationen, die wir durch Ausführen des Algorithmus erhalten.|ψ10000⟩ 10000
Beachten Sie schließlich, dass das Orakel nichts über den Inhalt der vollständigen Datenbank weiß. Es implementiert nur kohärent eine Funktion, die einen einzelnen Status mit seinem Ziel vergleicht. Die Tatsache, dass dieses Gate kohärent arbeitet, bedeutet jedoch, dass man in diese Prüffunktion eine Überlagerung vieler (möglicherweise aller) Elemente der Datenbank eingeben und eine Ausgabe erhalten kann, die einige globale Informationen über alle Elemente in der Datenbank enthält.|ψk⟩