Zum Hauptinhalt springen

Beschreibung von Grovers Algorithmus

In diesem Abschnitt beschreiben wir Grovers Algorithmus. Wir beginnen mit der Diskussion von Phasen-Abfrage-Gates und wie man sie konstruiert, gefolgt von der Beschreibung des Algorithmus selbst. Abschließend erörtern wir kurz, wie der Algorithmus natürlicherweise auf die Suche angewendet wird.

Phasen-Abfrage-Gates

Grovers Algorithmus verwendet Operationen, die als Phasen-Abfrage-Gates bekannt sind. Im Gegensatz zu einem gewöhnlichen Abfrage-Gate UfU_f, das für eine gegebene Funktion ff wie zuvor beschrieben definiert ist, wird ein Phasen-Abfrage-Gate für die Funktion ff wie folgt definiert:

Zfx=(1)f(x)xZ_f \vert x\rangle = (-1)^{f(x)} \vert x\rangle

für jede Zeichenkette xΣnx\in\Sigma^n.

Die Operation ZfZ_f kann mit einem einzigen Abfrage-Gate UfU_f implementiert werden, wie dieses Diagramm zeigt:

Ein Quantencircuit, der ein Z_f-Gate mit einem Abfrage-Gate und dem Phase-Kickback-Phänomen implementiert

Diese Implementierung macht sich das Phase-Kickback-Phänomen zunutze und erfordert, dass ein Hilfs-Qubit, das im Zustand \vert -\rangle initialisiert ist, verfügbar ist. Dieses Qubit verbleibt nach der Implementierung im Zustand \vert - \rangle und kann wiederverwendet werden (etwa zur Implementierung nachfolgender ZfZ_f-Gates) oder einfach verworfen werden.

Zusätzlich zur Operation ZfZ_f verwenden wir auch ein Phasen-Abfrage-Gate für die nn-stellige OR-Funktion, die für jede Zeichenkette xΣnx\in\Sigma^n wie folgt definiert ist:

OR(x)={0x=0n1x0n\mathrm{OR}(x) = \begin{cases} 0 & x = 0^n\\[0.5mm] 1 & x \neq 0^n \end{cases}

Explizit wirkt das Phasen-Abfrage-Gate für die nn-stellige OR-Funktion so:

ZORx={xx=0nxx0n.Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[0.5mm] - \vert x\rangle & x \neq 0^n. \end{cases}

Um klar zu sein: So wirkt ZORZ_{\mathrm{OR}} auf Standard-Basiszustände; sein Verhalten bei beliebigen Zuständen ergibt sich durch Linearität aus diesem Ausdruck.

Die Operation ZORZ_{\mathrm{OR}} kann als Quantencircuit implementiert werden, indem man mit einem Booleschen Circuit für die OR-Funktion beginnt, diesen in eine UORU_{\mathrm{OR}}-Operation umwandelt (also ein Standard-Abfrage-Gate für die nn-stellige OR-Funktion) – nach dem in der Lektion Algorithmische Grundlagen der Quantenberechnung beschriebenen Verfahren –, und schließlich eine ZORZ_{\mathrm{OR}}-Operation mithilfe des Phase-Kickback-Phänomens konstruiert. Beachte, dass ZORZ_{\mathrm{OR}} keine Abhängigkeit von der Funktion ff hat und daher durch einen Quantencircuit ohne Abfrage-Gates implementiert werden kann.

Beschreibung des Algorithmus

Nun, da wir die beiden Operationen ZfZ_f und ZORZ_{\mathrm{OR}} haben, können wir Grovers Algorithmus beschreiben.

Der Algorithmus bezieht sich auf eine Zahl tt, die die Anzahl der Iterationen angibt (und damit die Anzahl der Abfragen an die Funktion ff). Diese Zahl tt wird von Grovers Algorithmus in der hier beschriebenen Form nicht festgelegt; wir erörtern später in der Lektion, wie sie gewählt werden kann.

Grovers Algorithmus
  1. Initialisiere ein nn-Qubit-Register Q\mathsf{Q} im Nullzustand 0n\vert 0^n \rangle und wende dann eine Hadamard-Operation auf jedes Qubit von Q\mathsf{Q} an.
  2. Wende tt Mal die unitäre Operation G=HnZORHnZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f auf das Register Q\mathsf{Q} an.
  3. Miss die Qubits von Q\mathsf{Q} in der Standardbasis und gib die resultierende Zeichenkette aus.

Die in Schritt 2 iterierte Operation G=HnZORHnZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f wird im Rest dieser Lektion als Grover-Operation bezeichnet. Hier ist eine Quantencircuit-Darstellung der Grover-Operation für n=7 ⁣:n=7\!:

Eine Quantencircuit-Darstellung der Grover-Operation

In diesem Diagramm wird die ZfZ_f-Operation als größer als ZORZ_{\mathrm{OR}} dargestellt – ein informeller visueller Hinweis darauf, dass sie wahrscheinlich die aufwändigere Operation ist. Insbesondere erfordert ZfZ_f im Abfragemodell eine Abfrage, während ZORZ_{\mathrm{OR}} keine Abfragen benötigt. Wenn wir stattdessen einen Booleschen Circuit für die Funktion ff haben und diesen in einen Quantencircuit für ZfZ_f umwandeln, darf man davon ausgehen, dass der resultierende Quantencircuit größer und komplexer ist als einer für ZORZ_{\mathrm{OR}}.

Hier ist ein Diagramm eines Quantencircuits für den gesamten Algorithmus bei n=7n=7 und t=3t=3. Für größere Werte von tt können wir einfach weitere Instanzen der Grover-Operation unmittelbar vor den Messungen einfügen.

Ein Quantencircuit für Grovers Algorithmus bei t=3

Grovers Algorithmus kann wie folgt auf das Such-Problem angewendet werden:

  • Wähle die Zahl tt in Schritt 2. (Dies wird später in der Lektion besprochen.)
  • Führe Grovers Algorithmus für die Funktion ff mit der gewählten Zahl tt aus, um eine Zeichenkette xΣnx\in\Sigma^n zu erhalten.
  • Frage die Funktion ff für die Zeichenkette xx ab, um zu prüfen, ob sie eine gültige Lösung ist:
    • Falls f(x)=1,f(x) = 1, haben wir eine Lösung gefunden und können aufhören und xx ausgeben.
    • Falls f(x)=0,f(x) = 0, können wir das Verfahren entweder erneut ausführen, möglicherweise mit einer anderen Wahl für tt, oder wir können aufgeben und „keine Lösung" ausgeben.

Sobald wir analysiert haben, wie Grovers Algorithmus funktioniert, werden wir sehen, dass wir durch die Wahl t=O(N)t = O(\sqrt{N}) mit hoher Wahrscheinlichkeit eine Lösung für unser Suchproblem erhalten (sofern eine existiert).