5.2.3 Der Deutsch-Jozsa-Algorithmus

Sind die obigen Beobachtungen für irgendwas nützlich? Ja, sind sie! Sei f:{0,1}n{0,1}f\colon\{0,1\}^{n}\to\{0,1\} eine unbekannte Funktion, die entweder konstant oder balanced ist. Dann gibt es einen einfachen Quantenalgorithmus, welcher feststellen kann, welcher der beiden Fälle zutrifft, der ff nur ein einziges mal auswertet (also einmal OfO_{f} anwendet).

Dieser Algorithmus heißt Deutsch-Jozsa-Algorithmus und funktioniert in fünf einfachen Schritten:

  1. 1.

    Starte mit |00\left|0\dots 0\right\rangle.

  2. 2.

    Wende die Hadamard-Transformation HHH\otimes\dotsb\otimes H an.

  3. 3.

    Wende das Phasen-Orakel OfO_{f} der entsprechenden Funktion ff an.

  4. 4.

    Wende wieder die Hadamard-Transformation HHH\otimes\dotsb\otimes H an.

  5. 5.

    Messe alle Qubits. Wenn alle Ergebnisse Null sind, ist die Funktion ff konstant. Ansonsten muss sie balanced sein.

Diesen Algorithmus können wir mit klassischen Algorithmen vergleichen, wobei wir bemerken müssen, dass jeder klassische Algorithmus ff im schlimmsten Fall mindestens 2n2+1\frac{2^{n}}{2}+1 mal evaluieren muss. Angenommen, wir kennen die Funktion auf der Hälfte ihrer Eingabe-Bitstrings (also 2n/22^{n}/2 Eingaben) und erhalten in jedem Fall die gleiche Ausgabe. Dann können wir immer noch keine Aussage darüber treffen, ob die Funktion konstant ist, da die Funktion auf der anderen Hälfte der Eingabe-Bitstrings immer das andere Ergebnis ausgibt und somit balanced ist. Das würde also dem Worst-Case (engl. für “schlimmsten Fall”) entsprechen. In diesem Szenario hätten wir 2n/22^{n}/2 Fragen verschwendet, ohne dabei etwas sinnvolles herauszufinden. Um sicher zu gehen, ob ff konstant oder balanced ist, müssen wir die Funktion auf einer weiteren Eingabe evaluieren. Das ergibt insgesamt 2n2+1\frac{2^{n}}{2}+1 Auswertungen von ff im Vergleich zu 11 Auswertung im Quantenalgorithmus. Bemerke, dass der Unterschied auch für recht kleine Werte wie n=100n=100 schon so dramatisch ist, dass man ff nicht mit einem vertretbaren Zeitaufwand so häufig auswerten könnte (tatsächlich würde vorher die Sonne vollständig ausbrennen und wir müssten in ein neues Sonnensystem gezogen sein).

Zusammengefasst: Wenn f:{0,1}n{0,1}f\colon\{0,1\}^{n}\to\{0,1\} eine Funktion ist, die entweder konstant oder balanced ist, dann kann der Deutsch-Jozsa-Algorithmus mit nur einer Auswertung von ff feststellen, welche der beiden Eigenschaften zutrifft. Das ist exponentiell schneller als jeder klassische Algorithmus, welcher im schlimmsten Fall die Funktion auf 2n2+1\frac{2^{n}}{2}+1 Eingaben auswerten müsste.

Hausaufgabe 5.2 (Deutsch-Jozsa ausführen).

Die gelbe Oracle Box in Quirky implementiert das Phasen-Orakel für eine Funktion, die entweder konstant oder balanced ist. Implementiere den Deutsch-Jozsa-Algorithmus in Quirky und finde damit heraus, welcher der beiden Fälle zutrifft.

Hack.

Wir fügen Messungen und eine entsprechend große Wahrscheinlichkeitsanzeige hinzu:

[Uncaptioned image]

Da die Wahrscheinlichkeit für das Messergbnis [00][0\dots 0] Null ist, kann die Funktion nicht konstant sein. Also muss sie balanced sein.