Der Algorithmus von Grover wird unter anderem verwendet, um einen Artikel in einer ungeordneten Liste von Artikeln zu suchen der Länge . Auch wenn es hier viele Fragen zu diesem Thema gibt, vermisse ich den Punkt.
Auf klassische Weise in einer Liste suchen
Normalerweise würde ich eine Suchfunktion auf diese Weise entwerfen.
Also gebe ich die Liste und den gewünschten Gegenstand als Eingabe an und erhalte die Position des Elements in der Liste als Ausgabe. Ich glaube, ich habe verstanden, dass die Informationen über durch das Orakeltor in den Algorithmus eingebettet sind , sodass unsere Funktion zu
Lassen Sie uns ein make praktisches Beispiel. Betrachten Sie die Suche nach dem Pik-As Pik-
Die Liste der Länge ist .
Das gesuchte Element ist . Ich sollte . Jede Karte kann mit Bits codiert werden. Die Liste enthält Elemente. Wir benötigen also Bits, um die Liste zu codieren. In diesem Fall implementiert das Orakel die Funktion:
Die Eingabe von Grovers Algorithmus ist jedoch kein Zustand von Qubits.
(NB: Das Bild des gemischten Decks ist hier zu sehen. )
Grover und sein Orakel
Mehrere Quellen (z. B. hier - grafisch erklärt) sagen, dass die Eingabe des Algorithmus unterschiedlich ist: Die Eingabe ist ein aus dem Suchraum entnommener Zustand wobei die Anzahl der Elemente der Liste ist. Jede Zahl entspricht der Position eines Elements in der Liste.
Die Eingabe von ist nun ein Qubit-Vektor , der eine Überlagerung aller Elemente im Suchraum sein muss .
Wir wissen
- entspricht ;
- entspricht ;
- entspricht ;
- entspricht welches das gewünschte Element ist;
- und so weiter...
In diesem Fall haben wir
Aber in diesem Fall müsste unser Orakel die Funktion implementieren.
Um das Orakel zu bauen, müssen wir wissen, dass an Position 5 ist. Wozu dient der Algorithmus, wenn wir bereits nach dem Element gesucht haben, um das Orakel zu bauen?
quelle
Antworten:
Wenn Sie 8 Elemente in der Liste haben (wie im Beispiel Ihrer Karte), beträgt die Eingabe des Orakels 3 (qu) Bits. Die Anzahl der Karten im Deck (52) spielt keine Rolle, Sie benötigen nur 3 Bits, um 8 Karten zu codieren.
Sie können sich vorstellen, dass 3 Bits die Position in der Liste der gesuchten Karte codieren. dann kennst du die Position nicht, aber das Orakel weiß es. Wenn Sie also das Pik-Ass suchen, dann weiß das Orakel, dass das Pik-Ass die sechste Karte ist (oder die fünfte von Null an) und implementiert die Funktion
PS: Es ist besser, den Algorithmus des Grovers anders zu betrachten: Sie haben ein Orakel, das eine Boolesche Funktion implementiert, die für eine einzelne Kombination von Eingabebits ausgibt, andernfalls null ausgibt, und Ihre Aufgabe ist es, die Kombination zu finden. Das Problem ist genauso komplex wie die Suche in einer unsortierten Liste oder Datenbank. Deshalb wird der Algorithmus des Grovers normalerweise als Suche in einer unsortierten Datenbank beschrieben. Die Anwendung des Algorithmus auf eine reale Datenbanksuche wirft jedoch Fragen auf, die über den eigentlichen Algorithmus hinausgehen. Grovers Algorithmus sucht nur nach dem, was das Orakel weiß.1
quelle
Die wichtigsten Unterschiede in Ihrem Beispiel im Vergleich zu einem realistischeren Nutzungsszenario sind:
Der Suchraum ist normalerweise sehr groß. Es gibt keine realistische Aussicht, alle Werte vorab zu berechnen. Genau das versuchen wir zu vermeiden.
quelle
Die Frage ist letztendlich: "Was bringt es, den Algorithmus auszuführen, wenn wir bereits nach dem Element gesucht haben, um das Orakel zu bauen?"
Während jemand das Orakel vorgefertigt hat, war es möglicherweise nicht die Person, die das Orakel benutzt.
Der Algorithmus von Grover erfordert, dass das Orakel nicht öfter als abgefragt wirdsize of list−−−−−−−−√
Wir fragen das Orakel: Was ist die Antwort auf die Frage, die es bereits hat? Sogar Mateus und Omar würden das "Orakel für ein bestimmtes Alphabet-Symbol" während der Laufzeit fragen, an welcher Stelle (n) sich das Symbol in der Zeichenfolge befindet, die es bereits kompiliert hat. Das Orakel gibt die Antwort auf unsere Frage nach nur einer Konsultation, aber in dieser Geschichte kann es beispielsweise die Antwort nicht einfach als Binärzeichenfolge ausschreiben und über einen klassischen Kommunikationskanal an uns senden. Es wird seine Antwort in einer Überlagerung verbergen, damit wir es herausziehen können.
Ich lasse Phantasie oder Metapher in diesem nächsten Teil davonlaufen: Wir hören die Antwort nicht ganz beim ersten Mal, und wir müssen das Orakel bitten, die gleiche Antwort immer wieder zu wiederholen, bis wir sicher sind, was das Orakel gesagt hat. außer wir fangen an, durch Fehlinformationen im Diffusionsprozess zu halluzinieren, wenn wir zu oft fragen.
quelle
Angesichts des von Ihnen angegebenen Orakels ist die Suche in der Tat sinnlos. Dieses Orakel verfehlt jedoch den Punkt von Grovers Algorithmus, da das Suchen nach einer Karte in einem Kartenspiel keine unstrukturierte Suche ist, da Sie, wie Sie sagten, die Reihenfolge bereits kennen. Ergo ist Ihre Suche strukturiert. Der Grund, warum dieses Orakel verwendet wird, ist, dass es demonstriert, wie Grovers angewendet werden kann, ohne dass ein Orakel besprochen werden muss, das Grovers nützlich machen würde, da ein solches Orakel komplizierter als wertvoll wäre. Daher könnte ein besseres Orakel, um die Nützlichkeit von Grovers zu demonstrieren, etwa so aussehen:
Was dieses Orakel impliziert ist, dass Sie eine 8-Qubit-Suche haben, bei der Sie die ersten vier Qubits nehmen und zu den zweiten vier Qubits addieren und M umdrehen, wenn die Addition 10 ergibt (1010 in binär). Der Unterschied zwischen diesem und dem von Ihnen bereitgestellten Orakel besteht darin, dass dieses Orakel ein Muster testet (addieren Sie die Operanden zu 10), während Ihr Orakel die Gleichheit testet (ist dieser Index 5). Dieses Orakel ist viel schwieriger zu bauen, nutzt aber die wahre Kraft von Grover, die im Wesentlichen eine Brute-Force-Suche ist, bei der Ihr Orakel den Suchraum definiert.
quelle