Habe ich die Grundidee des Angriffs richtig verstanden? Wenn falsch, ignoriere den Rest des Beitrags!
Meistens. Die Art und Weise Sie es beschreiben, werden Sie in der Tat den Zustand erhalten , aber Sie werden nicht im Stande sein , die einheitliche Transformation durchzuführen . Wenn Sie in Schritt 3 Grover im Status , müssen Sie als Teil des Grover-Algorithmus . Der Grund ist folgender: Normalerweise wird Grover als Algorithmus dargestellt, der einen Wert sucht , der ein Prädikat erfüllt . In diesem Fall initialisiert der Grover-Algorithmus zuerst den Status auf|ϕ⟩I - | & phgr; ⟩ ⟨ & phgr; | & phiv; ⟩ = Σ x ∈ { 0 , 1 } n 2 - n N | & phgr; ⟩ I - |I−|ϕ⟩⟨ϕ||ϕ⟩I−|ϕ⟩⟨ϕ|x∈{0,1}nP|ϕ⟩:=∑x∈{0,1}n2−n/2|x⟩. Und während seiner Hauptschleife wendet es den Flip-Operator . Dieser Operator ist recht einfach zu konstruieren, wenn , also normalerweise nicht als eine Anforderung des Algorithmus erwähnt. Anstatt jedoch suchen, können Sie nach für eine Menge suchen . (Schließlich sind die Bitstrings der Länge nichts Besonderes .) Dann müssen Sie die Beschreibung von Grover ändern: Der Anfangszustand , und wir müssenI−|ϕ⟩⟨ϕ||ϕ⟩=∑x∈{0,1}n2−n/2|x⟩x∈{0,1}nx∈XXn|ϕ⟩=∑x∈X2−|X|/2|x⟩I−|ϕ⟩⟨ϕ|während der Hauptschleife. Für viele Mengen (z. B. Zahlen modulo ) ist es ziemlich einfach, und . Im allgemeinen Fall kann es jedoch sein, dass es schwierig ist, eines von beiden zu konstruieren. In Ihrer Beschreibung des Algorithmus haben wir eine ähnliche Situation. Das heißt, für einige feste . Aber für diese Menge gibt es keine Möglichkeit, oder . Deshalb funktioniert Ihr Algorithmus nicht (aber er gibt immer noch die richtige Idee). Stattdessen in dem von Ihnen zitierten beideXN|ϕ⟩I−|ϕ⟩⟨ϕ|X={x:H(x)=c}cX|ϕ⟩I−|ϕ⟩⟨ϕ||ϕ⟩und werden von speziellen Orakeln bereitgestellt, die nur für diesen Zweck konstruiert wurden. Mit diesem Orakel können Sie dann den Grovers-Algorithmus im Status .I−|ϕ⟩⟨ϕ||ϕ⟩
Wie viele Elemente enthält die Überlagerung
nachdem wir uns auf ein bestimmtes ?|ϕ⟩c
Dies hängt von den von Ihnen gewählten Parametern ab. Wir erwarten ungefähr wenn die Größe der Domäne und die Größe des Bereichs von . Damit die Dinge interessant sind, sollten Sie wählen, damit die Überlagerung exponentiell viele Elemente enthält (und mindestens damit jede Nachricht möglich ist). Ich gehe jedoch davon aus, dass Sie sich darüber wundern, weil Sie der Meinung sind, dass die Anzahl der Elemente gering sein sollte, damit Grover funktioniert, was nicht der Fall ist (siehe unten):M/NMNHM≫N2|m|
Die Geschwindigkeit der Grover-Suche - dies ist das Hauptproblem und ich bin mir nicht sicher, wie ihr Trick tatsächlich funktioniert. Wäre die Rechenkomplexität nicht die gleiche wie der Versuch, ein Vorbild für eine bestimmte Ausgabe der Hash-Funktion zu erraten, da man über alle u suchen muss? Wo liegt in diesem Fall der Vorteil?
Hier scheint ein Missverständnis zu liegen. Erinnern Sie sich an meine Erklärungen zu Grovers Algorithmus am Anfang dieser Antwort. Grover sucht einige , erfüllen einige Prädikat . In unserem Fall kann sehr groß sein ( Elemente), da es die Menge aller Vorbilder von . Aber das spielt keine Rolle. Denken Sie daran, dass der ursprüngliche Grover mit was ebenfalls riesig ist, aber schnell funktioniert, solange wir nach suchen , das eine gemeinsame Eigenschaft . Wenn wir zum Beispiel mit Grover nach suchen , das (das Prädikat erfülltx∈XPXM/Nc{0,1}nx∈{0,1}nPx∈{0,1}n33∣xP), dann haben wir, dass es viele gibt , die erfüllen , alle 33. erfüllt es! Und die Laufzeit wird so etwas wie . Wenn also in der Regel ein Prädikat für jedes te Element von erfüllt ist , benötigt der Grover-Algorithmus, der nach sucht , das erfüllt, ungefähr Schritte. Hier spielt es keine Rolle, was Set ist oder wie groß es ist! (Solange wir eine Möglichkeit haben, und für diese MengexPx33−−√PiXx∈XPi√X|ϕ⟩I−|ϕ⟩⟨ϕ|X.) Nun ist in der von Ihnen beschriebenen Einstellung . Und ist das Prädikat, das sagt, dass mit beginnt . Um die Laufzeit des Grover-Algorithmus in diesem Fall zu analysieren, ist uns egal , aber wir müssen wissen, wie oft ein Element erfüllt . Das ist einfach: Jedes -te Element tut es. Die Laufzeit von Grover ist also . Dies ist ein Problem, wenn lang ist, aber wenn z. B. nur ein bisschen ist, dann funktioniert dies gut. Wenn wir beispielsweise die Hash-Funktion verwenden, um Ein-Bit-Nachrichten festzuschreiben, können wir die Festschreibung für einen beliebigen Wert von öffnen.X={x:H(x)=c}Pxm′XP2|m′|O(2|m′|−−−−√)m′m′m′.
Wenn Sie ein Beispiel wünschen, in dem länger ist, müssen Sie die Konstruktion variieren. Grundsätzlich schreiben Sie jedes Bit einzeln fest und verketten die Verpflichtungen. Dann kann jede Verpflichtung mit der oben beschriebenen Methode gebrochen werden, und Sie müssen den Algorithmus times .m′|m′|