Zum Hauptinhalt springen
Dieses Projekt befindet sich in der Beta-Phase. Einen Fehler gefunden? GitHub Issue erstellen. Frage oder Idee? In Discussions fragen — wir freuen uns über dein Feedback!
Wie ist die Übersetzungsqualität auf dieser Seite?

Shors Algorithmus

Jetzt wenden wir uns dem Problem der ganzzahligen Faktorisierung zu und sehen, wie es auf einem Quantencomputer mithilfe von Phasenschätzung effizient gelöst werden kann. Der Algorithmus, den wir erhalten werden, ist Shors Algorithmus zur ganzzahligen Faktorisierung. Shor hat seinen Algorithmus nicht explizit in Begriffen der Phasenschätzung beschrieben, aber es ist eine natürliche und anschauliche Möglichkeit, seine Funktionsweise zu erklären.

Wir beginnen mit einem Zwischenproblem, dem sogenannten Ordnungsbestimmungsproblem, und sehen, wie die Phasenschätzung eine Lösung dafür liefert. Anschließend sehen wir, wie eine effiziente Lösung des Ordnungsbestimmungsproblems uns eine effiziente Lösung des ganzzahligen Faktorisierungsproblems gibt. (Wenn die Lösung eines Problems die Lösung eines anderen Problems liefert, sagen wir, dass das zweite Problem auf das erste reduziert wird — in diesem Fall reduzieren wir also die ganzzahlige Faktorisierung auf die Ordnungsbestimmung.) Dieser zweite Teil von Shors Algorithmus macht überhaupt keinen Gebrauch von Quantencomputing; er ist vollständig klassisch. Quantencomputing wird nur für die Ordnungsbestimmung benötigt.

Das Ordnungsbestimmungsproblem​

Ein wenig Zahlentheorie​

Um das Ordnungsbestimmungsproblem und seine Lösung durch Phasenschätzung zu erklären, hilft es, mit ein paar grundlegenden zahlentheoretischen Konzepten zu beginnen und dabei hilfreiche Notation einzuführen.

Zunächst definieren wir für eine beliebige positive ganze Zahl NN die Menge ZN\mathbb{Z}_N wie folgt.

ZN={0,1,…,N−1}\mathbb{Z}_N = \{0,1,\ldots,N-1\}

Zum Beispiel: Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; und so weiter.

Das sind Mengen von Zahlen, aber wir können sie als mehr als nur Mengen betrachten. Insbesondere können wir über arithmetische Operationen auf ZN\mathbb{Z}_N nachdenken, wie Addition und Multiplikation — und wenn wir uns darauf einigen, die Ergebnisse stets modulo NN zu nehmen (d. h. durch NN zu teilen und den Rest als Ergebnis zu verwenden), bleiben wir bei diesen Operationen immer in dieser Menge. Die beiden konkreten Operationen Addition und Multiplikation, beide modulo NN genommen, machen ZN\mathbb{Z}_N zu einem Ring, einem grundlegend wichtigen Objekt in der Algebra.

Zum Beispiel sind 33 und 55 Elemente von Z7\mathbb{Z}_7, und wenn wir sie multiplizieren, erhalten wir 3⋅5=153\cdot 5 = 15, was bei Division durch 77 den Rest 11 lässt. Das schreibt man manchmal so:

3⋅5≡1  (mod 7)3 \cdot 5 \equiv 1 \; (\textrm{mod } 7)

Wenn klar ist, dass wir in Z7\mathbb{Z}_7 arbeiten, kann man aber auch einfach 3⋅5=13 \cdot 5 = 1 schreiben, um die Notation möglichst einfach zu halten.

Hier sind die Additions- und Multiplikationstabellen für Z6\mathbb{Z}_6 als Beispiel.

+012345001234511234502234501334501244501235501234⋅012345000000010123452024024303030340420425054321\begin{array}{c|cccccc} + & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 1 & 2 & 3 & 4 & 5 \\ 1 & 1 & 2 & 3 & 4 & 5 & 0 \\ 2 & 2 & 3 & 4 & 5 & 0 & 1 \\ 3 & 3 & 4 & 5 & 0 & 1 & 2 \\ 4 & 4 & 5 & 0 & 1 & 2 & 3 \\ 5 & 5 & 0 & 1 & 2 & 3 & 4 \\ \end{array} \qquad \begin{array}{c|cccccc} \cdot & 0 & 1 & 2 & 3 & 4 & 5 \\\hline 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 1 & 2 & 3 & 4 & 5 \\ 2 & 0 & 2 & 4 & 0 & 2 & 4 \\ 3 & 0 & 3 & 0 & 3 & 0 & 3 \\ 4 & 0 & 4 & 2 & 0 & 4 & 2 \\ 5 & 0 & 5 & 4 & 3 & 2 & 1 \\ \end{array}

Unter den NN Elementen von ZN\mathbb{Z}_N sind die Elemente a∈ZNa\in\mathbb{Z}_N mit gcd⁡(a,N)=1\gcd(a,N) = 1 besonders. Die Menge dieser Elemente wird häufig mit einem Stern bezeichnet:

ZN∗={a∈ZN:gcd⁡(a,N)=1}\mathbb{Z}_N^{\ast} = \{a\in \mathbb{Z}_N : \gcd(a,N) = 1\}

Betrachtet man nur die Multiplikation, bildet ZN∗\mathbb{Z}_N^{\ast} eine Gruppe — genauer eine abelsche Gruppe — ein weiteres wichtiges Objekt in der Algebra. Eine grundlegende Eigenschaft dieser Mengen (und endlicher Gruppen im Allgemeinen) ist, dass man für jedes a∈ZN∗a\in\mathbb{Z}_N^{\ast}, wenn man aa wiederholt mit sich selbst multipliziert, schließlich immer die Zahl 11 erhält.

Als erstes Beispiel nehmen wir N=6N=6. Es gilt 5∈Z6∗5\in\mathbb{Z}_6^{\ast}, da gcd⁡(5,6)=1\gcd(5,6) = 1, und wenn wir 55 mit sich selbst multiplizieren, erhalten wir 11, wie die obige Tabelle bestätigt.

52=1(in Z6)5^2 = 1 \quad \text{(in $\mathbb{Z}_6$)}

Als zweites Beispiel nehmen wir N=21N = 21. Die Zahlen von 00 bis 2020, die mit 2121 den ggT 11 haben, sind:

Z21∗={1,2,4,5,8,10,11,13,16,17,19,20}\mathbb{Z}_{21}^{\ast} = \{1,2,4,5,8,10,11,13,16,17,19,20\}

Für jedes dieser Elemente kann man die Zahl zu einer positiven ganzzahligen Potenz erheben und erhält 11. Hier sind die kleinsten Potenzen, für die das funktioniert:

11=182=1163=126=1106=1176=143=1116=1196=156=1132=1202=1\begin{array}{ccc} 1^{1} = 1 \quad & 8^{2} = 1 \quad & 16^{3} = 1 \\[1mm] 2^{6} = 1 \quad & 10^{6} = 1 \quad & 17^{6} = 1 \\[1mm] 4^{3} = 1 \quad & 11^{6} = 1 \quad & 19^{6} = 1 \\[1mm] 5^{6} = 1 \quad & 13^{2} = 1 \quad & 20^{2} = 1 \end{array}

Wir arbeiten für alle diese Gleichungen in Z21\mathbb{Z}_{21}, was wir nicht explizit hinschreiben — es ist implizit gemeint, um die Notation übersichtlich zu halten. Das werden wir im Rest der Lektion beibehalten.

Problemformulierung und Verbindung zur Phasenschätzung​

Jetzt können wir das Ordnungsbestimmungsproblem formulieren.

Ordnungsbestimmung

Eingabe: positive ganze Zahlen NN und aa mit gcd⁡(N,a)=1\gcd(N,a) = 1
Ausgabe: die kleinste positive ganze Zahl rr mit ar≡1a^r \equiv 1 (mod N)(\textrm{mod } N)

Anders ausgedrückt: In der Notation von oben ist a∈ZN∗a \in \mathbb{Z}_N^{\ast} gegeben, und wir suchen die kleinste positive ganze Zahl rr mit ar=1a^r = 1. Diese Zahl rr heißt die Ordnung von aa modulo NN.

Um das Ordnungsbestimmungsproblem mit der Phasenschätzung zu verbinden, betrachten wir die Operation auf einem System, dessen klassische Zustände ZN\mathbb{Z}_N entsprechen, bei der wir mit einem festen Element a∈ZN∗a\in\mathbb{Z}_N^{\ast} multiplizieren.

Ma∣x⟩=∣ax⟩(fu¨r jedes x∈ZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(für jedes $x\in\mathbb{Z}_N$)}

Um das klarzustellen: Die Multiplikation findet in ZN\mathbb{Z}_N statt, also ist es implizit, dass wir das Produkt modulo NN im Ket auf der rechten Seite der Gleichung nehmen.

Nehmen wir zum Beispiel N=15N = 15 und a=2a=2. Die Wirkung von M2M_2 auf die Standardbasis {∣0⟩,…,∣14⟩}\{\vert 0\rangle,\ldots,\vert 14\rangle\} ist:

M2∣0⟩=∣0⟩M2∣5⟩=∣10⟩M2∣10⟩=∣5⟩M2∣1⟩=∣2⟩M2∣6⟩=∣12⟩M2∣11⟩=∣7⟩M2∣2⟩=∣4⟩M2∣7⟩=∣14⟩M2∣12⟩=∣9⟩M2∣3⟩=∣6⟩M2∣8⟩=∣1⟩M2∣13⟩=∣11⟩M2∣4⟩=∣8⟩M2∣9⟩=∣3⟩M2∣14⟩=∣13⟩\begin{array}{ccc} M_{2} \vert 0 \rangle = \vert 0\rangle \quad & M_{2} \vert 5 \rangle = \vert 10\rangle \quad & M_{2} \vert 10 \rangle = \vert 5\rangle \\[1mm] M_{2} \vert 1 \rangle = \vert 2\rangle \quad & M_{2} \vert 6 \rangle = \vert 12\rangle \quad & M_{2} \vert 11 \rangle = \vert 7\rangle \\[1mm] M_{2} \vert 2 \rangle = \vert 4\rangle \quad & M_{2} \vert 7 \rangle = \vert 14\rangle \quad & M_{2} \vert 12 \rangle = \vert 9\rangle \\[1mm] M_{2} \vert 3 \rangle = \vert 6\rangle \quad & M_{2} \vert 8 \rangle = \vert 1\rangle \quad & M_{2} \vert 13 \rangle = \vert 11\rangle \\[1mm] M_{2} \vert 4 \rangle = \vert 8\rangle \quad & M_{2} \vert 9 \rangle = \vert 3\rangle \quad & M_{2} \vert 14 \rangle = \vert 13\rangle \end{array}

Diese Operation ist unitär, sofern gcd⁡(a,N)=1\gcd(a,N)=1; sie permutiert die Elemente der Standardbasis {∣0⟩,…,∣N−1⟩}\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, ist also als Matrix eine Permutationsmatrix. Aus ihrer Definition ist offensichtlich, dass sie deterministisch ist, und eine einfache Möglichkeit, ihre Invertierbarkeit einzusehen, besteht darin, die Ordnung rr von aa modulo NN zu betrachten: Die Inverse von MaM_a ist Mar−1M_a^{r-1}.

Mar−1Ma=Mar=Mar=M1=IM_a^{r-1} M_a = M_a^r = M_{a^r} = M_1 = \mathbb{I}

Es gibt noch eine andere Sichtweise auf die Inverse, die kein Wissen über rr voraussetzt (was schließlich das ist, was wir berechnen wollen). Für jedes Element a∈ZN∗a\in\mathbb{Z}_N^{\ast} gibt es immer ein eindeutiges Element b∈ZN∗b\in\mathbb{Z}_N^{\ast} mit ab=1ab=1. Dieses Element bb bezeichnen wir mit a−1a^{-1}, und es kann effizient berechnet werden; eine Erweiterung von Euklids ggT-Algorithmus erledigt das mit quadratischem Aufwand in lg⁡(N)\operatorname{lg}(N). Damit gilt:

Ma−1Ma=Ma−1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Die Operation MaM_a ist also sowohl deterministisch als auch invertierbar. Das bedeutet, dass sie durch eine Permutationsmatrix beschrieben wird und daher unitär ist.

Betrachten wir nun die Eigenvektoren und Eigenwerte der Operation MaM_a, unter der Annahme a∈ZN∗a\in\mathbb{Z}_N^{\ast}. Wie gerade gezeigt, bedeutet diese Annahme, dass MaM_a unitär ist.

Es gibt NN Eigenwerte von MaM_a, möglicherweise inklusive Wiederholungen, und es gibt gewisse Freiheit bei der Wahl zugehöriger Eigenvektoren — aber wir brauchen uns nicht um alle Möglichkeiten zu kümmern. Beginnen wir einfach und identifizieren wir zunächst nur einen Eigenvektor von MaM_a.

∣ψ0⟩=∣1⟩+∣a⟩+⋯+∣ar−1⟩r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

Die Zahl rr ist die Ordnung von aa modulo NN, hier und im weiteren Verlauf der Lektion. Der zugehörige Eigenwert ist 11, da der Zustand bei Multiplikation mit aa unverändert bleibt.

Ma∣ψ0⟩=∣a⟩+⋯+∣ar−1⟩+∣ar⟩r=∣a⟩+⋯+∣ar−1⟩+∣1⟩r=∣ψ0⟩M_a \vert \psi_0 \rangle = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert a^r \rangle}{\sqrt{r}} = \frac{\vert a \rangle + \cdots + \vert a^{r-1} \rangle + \vert 1 \rangle}{\sqrt{r}} = \vert \psi_0 \rangle

Das passiert, weil ar=1a^r = 1: jeder Standardbasiszustand ∣ak⟩\vert a^k \rangle wird für k≤r−1k\leq r-1 auf ∣ak+1⟩\vert a^{k+1} \rangle verschoben, und ∣ar−1⟩\vert a^{r-1} \rangle wird zurück auf ∣1⟩\vert 1\rangle verschoben. Bildlich gesprochen rühren wir in ∣ψ0⟩\vert \psi_0 \rangle, aber da es bereits vollständig „durchgerührt" ist, ändert sich nichts.

Hier ist ein weiterer Eigenvektor von MaM_a. Dieser ist im Kontext von Ordnungsbestimmung und Phasenschätzung interessanter.

∣ψ1⟩=∣1⟩+ωr−1∣a⟩+⋯+ωr−(r−1)∣ar−1⟩r\vert \psi_1 \rangle = \frac{\vert 1 \rangle + \omega_r^{-1} \vert a \rangle + \cdots + \omega_r^{-(r-1)}\vert a^{r-1} \rangle}{\sqrt{r}}

Alternativ kann man diesen Vektor mit einer Summe schreiben:

∣ψ1⟩=1r∑k=0r−1ωr−k∣ak⟩\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Hier taucht die komplexe Zahl ωr=e2πi/r\omega_r = e^{2\pi i/r} auf natürliche Weise auf, bedingt durch die Weise, wie die Multiplikation mit aa modulo NN funktioniert. Der zugehörige Eigenwert ist dieses Mal ωr\omega_r. Das sehen wir folgendermaßen:

Ma∣ψ1⟩=1r∑k=0r−1ωr−kMa∣ak⟩=1r∑k=0r−1ωr−k∣ak+1⟩=1r∑k=1rωr−(k−1)∣ak⟩=1rωr∑k=1rωr−k∣ak⟩M_a \vert \psi_1 \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} M_a\vert a^k \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^{k+1} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-(k - 1)} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\omega_r \sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle

Da ωr−r=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 und ∣ar⟩=∣1⟩=∣a0⟩\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, ergibt sich:

1r∑k=1rωr−k∣ak⟩=1r∑k=0r−1ωr−k∣ak⟩=∣ψ1⟩,\frac{1}{\sqrt{r}}\sum_{k = 1}^{r} \omega_r^{-k} \vert a^{k} \rangle = \frac{1}{\sqrt{r}}\sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle = \vert\psi_1\rangle,

also Ma∣ψ1⟩=ωr∣ψ1⟩M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Mit demselben Argument können wir weitere Eigenvektor/Eigenwert-Paare für MaM_a identifizieren. Für jede Wahl von j∈{0,…,r−1}j\in\{0,\ldots,r-1\} gilt:

∣ψj⟩=1r∑k=0r−1ωr−jk∣ak⟩\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

ist ein Eigenvektor von MaM_a mit dem zugehörigen Eigenwert ωrj\omega_r^j.

Ma∣ψj⟩=ωrj∣ψj⟩M_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Es gibt noch weitere Eigenvektoren von MaM_a, aber wir müssen uns nicht um sie kümmern — wir beschränken uns auf die Eigenvektoren ∣ψ0⟩,…,∣ψr−1⟩\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle, die wir gerade identifiziert haben.

Ordnungsbestimmung durch Phasenschätzung​

Um das Ordnungsbestimmungsproblem für eine gegebene Wahl a∈ZN∗a\in\mathbb{Z}_N^{\ast} zu lösen, können wir das Phasenschätzungsverfahren auf die Operation MaM_a anwenden.

Dazu müssen wir nicht nur MaM_a effizient als Quantencircuit implementieren, sondern auch Ma2M_a^2, Ma4M_a^4, Ma8M_a^8 und so weiter, so weit wie nötig für eine ausreichend genaue Schätzung. Hier erklären wir, wie das gemacht werden kann, und wir werden später genau herausfinden, wie viel Präzision benötigt wird.

Fangen wir mit der Operation MaM_a an sich an. Da wir natürlich im Quantencircuit-Modell arbeiten, verwenden wir Binärdarstellung, um die Zahlen zwischen 00 und N−1N-1 zu kodieren. Die größte Zahl, die wir kodieren müssen, ist N−1N-1, die Anzahl der benötigten Bits ist also:

n=lg⁡(N−1)=⌊log⁡(N−1)⌋+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Für N=21N = 21 zum Beispiel gilt n=lg⁡(N−1)=5n = \operatorname{lg}(N-1) = 5. Hier ist die Kodierung der Elemente von Z21\mathbb{Z}_{21} als Binärstrings der Länge 55:

0↦000001↦00001⋮20↦10100\begin{gathered} 0 \mapsto 00000\\[1mm] 1 \mapsto 00001\\[1mm] \vdots\\[1mm] 20 \mapsto 10100 \end{gathered}

Und hier ist eine präzise Definition, wie MaM_a als nn-Qubit-Operation definiert wird:

Ma∣x⟩={∣ax  (mod  N)⟩0≤x<N∣x⟩N≤x<2nM_a \vert x\rangle = \begin{cases} \vert ax \; (\textrm{mod}\;N)\rangle & 0\leq x < N\\[1mm] \vert x\rangle & N\leq x < 2^n \end{cases}

Es geht darum, dass wir zwar nur interessiert sind, wie MaM_a auf ∣0⟩,…,∣N−1⟩\vert 0\rangle,\ldots,\vert N-1\rangle wirkt, aber dennoch festlegen müssen, wie es auf die verbleibenden 2n−N2^n - N Standardbasiszustände wirkt — und das so, dass die Operation unitär bleibt. MaM_a so zu definieren, dass es auf den verbleibenden Standardbasiszuständen nichts tut, erfüllt diese Anforderung.

Mithilfe der Algorithmen für ganzzahlige Multiplikation und Division, die in der vorherigen Lektion besprochen wurden, sowie der Methodik für reversible, müllfreie Implementierungen davon, können wir einen Quantencircuit für MaM_a bauen — für jede Wahl von a∈ZN∗a\in\mathbb{Z}_N^{\ast} — mit Aufwand O(n2)O(n^2). Eine Möglichkeit ist folgende:

  1. Baue einen Circuit für die Operation

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    wobei

    fa(x)={ax  (mod  N)0≤x<NxN≤x<2nf_a(x) = \begin{cases} ax \; (\textrm{mod}\;N) & 0\leq x < N\\[1mm] x & N\leq x < 2^n \end{cases}

    nach der in der vorherigen Lektion beschriebenen Methode. Das ergibt einen Circuit der Größe O(n2)O(n^2).

  2. Tausche die beiden nn-Qubit-Systeme mithilfe von nn Swap-Gates aus, indem du die Qubits einzeln tauschst.

  3. Analog zum ersten Schritt, baue einen Circuit für die Operation

    ∣x⟩∣y⟩↦∣x⟩∣y⊕fa−1(x)⟩\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    wobei a−1a^{-1} die Inverse von aa in ZN∗\mathbb{Z}_N^{\ast} ist.

Durch Initialisierung der unteren nn Qubits und Komposition der drei Schritte erhält man folgende Transformation:

∣x⟩∣0n⟩↦Schritt 1∣x⟩∣fa(x)⟩↦Schritt 2∣fa(x)⟩∣x⟩↦Schritt 3∣fa(x)⟩∣x⊕fa−1(fa(x))⟩=∣fa(x)⟩∣0n⟩\vert x \rangle \vert 0^n \rangle \stackrel{\text{Schritt 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{Schritt 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{Schritt 3}}{\mapsto} \vert f_a(x)\rangle \bigl\vert x \oplus f_{a^{-1}}(f_a(x)) \bigr\rangle = \vert f_a(x)\rangle\vert 0^n \rangle

Die Methode benötigt Hilfs-Qubits, aber sie werden am Ende in ihren initialisierten Zustand zurückversetzt, was es uns erlaubt, diese Circuits für die Phasenschätzung zu verwenden. Der Gesamtaufwand des Circuits beträgt O(n2)O(n^2).

Um Ma2M_a^2, Ma4M_a^4, Ma8M_a^8 usw. zu implementieren, kann genau dieselbe Methode verwendet werden, außer dass wir aa durch a2a^2, a4a^4, a8a^8 usw. als Elemente von ZN∗\mathbb{Z}_N^{\ast} ersetzen. Das heißt: Für jede gewählte Potenz kk können wir einen Circuit für MakM_a^k erstellen, nicht indem wir den Circuit für MaM_a kk-mal iterieren, sondern indem wir b=ak∈ZN∗b = a^k \in \mathbb{Z}_N^{\ast} berechnen und dann den Circuit für MbM_b verwenden.

Die Berechnung von Potenzen ak∈ZNa^k \in \mathbb{Z}_N ist das modulare Exponentierungsproblem, das in der vorherigen Lektion erwähnt wurde. Diese Berechnung kann klassisch durchgeführt werden, mithilfe des dort erwähnten Algorithmus für modulare Exponentierung (in der rechnerischen Zahlentheorie oft Potenzalgorithmus genannt). Tatsächlich benötigen wir nur Zweierpotenzen von aa, nämlich a2,a4,…a2m−1∈ZN∗a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, und wir erhalten diese Potenzen durch iteriertes Quadrieren, m−1m-1 Mal. Jedes Quadrieren kann durch einen booleschen Circuit der Größe O(n2)O(n^2) durchgeführt werden.

Im Wesentlichen verlagern wir hier das Problem, MaM_a bis zu 2m−12^{m-1} Mal zu iterieren, auf eine effiziente klassische Berechnung. Und es ist ein glücklicher Umstand, dass das möglich ist! Bei einer beliebigen Wahl eines Quantencircuits im Phasenschätzungsproblem dürfte das nicht möglich sein — in diesem Fall wächst der Aufwand für die Phasenschätzung exponentiell in der Anzahl der Kontroll-Qubits mm.

Lösung mit einem geeigneten Eigenvektor​

Um zu verstehen, wie wir das Ordnungsbestimmungsproblem durch Phasenschätzung lösen können, nehmen wir zunächst an, dass wir das Phasenschätzungsverfahren auf die Operation MaM_a mit dem Eigenvektor ∣ψ1⟩\vert\psi_1\rangle anwenden. Diesen Eigenvektor zu beschaffen ist — wie sich herausstellt — nicht einfach, daher ist das nicht das Ende der Geschichte — aber es ist hilfreich, hier zu beginnen.

Der Eigenwert von MaM_a, der zum Eigenvektor ∣ψ1⟩\vert \psi_1\rangle gehört, ist

ωr=e2πi1r.\omega_r = e^{2\pi i \frac{1}{r}}.

Das heißt, ωr=e2πiθ\omega_r = e^{2\pi i \theta} für θ=1/r\theta = 1/r. Wenn wir also das Phasenschätzungsverfahren auf MaM_a mit dem Eigenvektor ∣ψ1⟩\vert\psi_1\rangle anwenden, erhalten wir eine Approximation von 1/r1/r. Durch Berechnung des Kehrwerts können wir dann rr bestimmen — vorausgesetzt, unsere Approximation ist gut genug.

Genauer gesagt: Wenn wir das Phasenschätzungsverfahren mit mm Kontroll-Qubits durchführen, erhalten wir eine Zahl y∈{0,…,2m−1}y\in\{0,\ldots,2^m-1\}. Wir nehmen y/2my/2^m als Schätzung für θ\theta, also 1/r1/r in unserem Fall. Um rr aus dieser Approximation zu bestimmen, liegt es nahe, den Kehrwert der Schätzung zu berechnen und zur nächsten ganzen Zahl zu runden:

⌊2my+12⌋\left\lfloor \frac{2^m}{y} + \frac{1}{2} \right\rfloor

Nehmen wir zum Beispiel r=6r = 6 und führen wir die Phasenschätzung auf MaM_a mit dem Eigenvektor ∣ψ1⟩\vert\psi_1\rangle und m=5m = 5 Kontroll-Bits durch. Die beste 5-Bit-Approximation an 1/r=1/61/r = 1/6 ist 5/325/32, und wir erhalten mit ziemlich hoher Wahrscheinlichkeit (in diesem Fall etwa 68%68\%) das Ergebnis y=5y=5 aus der Phasenschätzung. Es gilt:

2my=325=6.4,\frac{2^m}{y} = \frac{32}{5} = 6.4,

und Runden zur nächsten ganzen Zahl ergibt 66, was die richtige Antwort ist.

Andererseits erhalten wir möglicherweise nicht die richtige Antwort, wenn wir nicht genug Präzision verwenden. Wenn wir zum Beispiel m=4m = 4 Kontroll-Qubits bei der Phasenschätzung nehmen, erhalten wir möglicherweise die beste 4-Bit-Approximation an 1/r=1/61/r = 1/6, nämlich 3/163/16. Der Kehrwert ergibt:

2my=163=5.333⋯\frac{2^m}{y} = \frac{16}{3} = 5.333 \cdots

und Runden zur nächsten ganzen Zahl ergibt die falsche Antwort 55.

Wie viel Präzision benötigen wir also für die richtige Antwort? Wir wissen, dass die Ordnung rr eine ganze Zahl ist, und intuitiv brauchen wir genug Präzision, um 1/r1/r von benachbarten Möglichkeiten zu unterscheiden, darunter 1/(r+1)1/(r+1) und 1/(r−1)1/(r-1). Die nächstgelegene Zahl zu 1/r1/r ist 1/(r+1)1/(r+1), und der Abstand zwischen diesen beiden Zahlen beträgt:

1r−1r+1=1r(r+1).\frac{1}{r} - \frac{1}{r+1} = \frac{1}{r(r+1)}.

Um sicherzustellen, dass wir 1/r1/r nicht mit 1/(r+1)1/(r+1) verwechseln, reicht es daher aus, genug Präzision zu verwenden, damit eine beste Approximation y/2my/2^m an 1/r1/r näher an 1/r1/r liegt als an 1/(r+1)1/(r+1). Wenn wir genug Genauigkeit verwenden, sodass

∣y2m−1r∣<12r(r+1),\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert < \frac{1}{2 r (r+1)},

der Fehler also kleiner als die Hälfte des Abstands zwischen 1/r1/r und 1/(r+1)1/(r+1) ist, dann liegt y/2my/2^m näher an 1/r1/r als an jeder anderen Möglichkeit, einschließlich 1/(r+1)1/(r+1) und 1/(r−1)1/(r-1).

Zur Überprüfung: Angenommen,

y2m=1r+ε\frac{y}{2^m} = \frac{1}{r} + \varepsilon

für ε\varepsilon mit

∣ε∣<12r(r+1).\vert\varepsilon\vert < \frac{1}{2 r (r+1)}.

Beim Berechnen des Kehrwerts erhalten wir:

2my=11r+ε=r1+εr=r−εr21+εr.\frac{2^m}{y} = \frac{1}{\frac{1}{r} + \varepsilon} = \frac{r}{1+\varepsilon r} = r - \frac{\varepsilon r^2}{1+\varepsilon r}.

Durch Maximierung im Zähler und Minimierung im Nenner können wir die Abweichung von rr begrenzen:

∣εr21+εr∣≤r22r(r+1)1−r2r(r+1)=r2r+1<12\left\vert \frac{\varepsilon r^2}{1+\varepsilon r} \right\vert \leq \frac{ \frac{r^2}{2 r(r+1)}}{1 - \frac{r}{2r(r+1)}} %= \frac{r^2}{2 r (r+1) - r} = \frac{r}{2 r + 1} < \frac{1}{2}

Wir weichen weniger als 1/21/2 von rr ab, sodass wir beim Runden rr erhalten, wie erwartet.

Leider können wir, da wir rr noch nicht kennen, es nicht verwenden, um zu bestimmen, wie viel Genauigkeit wir benötigen. Stattdessen können wir die Tatsache nutzen, dass rr kleiner als NN sein muss, um sicherzustellen, dass wir genug Präzision verwenden. Genauer: Wenn wir genug Genauigkeit verwenden, um sicherzustellen, dass die beste Approximation y/2my/2^m an 1/r1/r erfüllt:

∣y2m−1r∣≤12N2,\left\vert \frac{y}{2^m} - \frac{1}{r} \right\vert \leq \frac{1}{2N^2},

dann haben wir genug Präzision, um rr bei Berechnung des Kehrwerts korrekt zu bestimmen. Die Wahl m=2lg⁡(N)+1m = 2\operatorname{lg}(N)+1 stellt sicher, dass wir mit der oben beschriebenen Methode eine hohe Chance haben, eine Schätzung mit dieser Präzision zu erhalten. (Die Wahl m=2lg⁡(N)m = 2\operatorname{lg}(N) reicht aus, wenn man mit einer unteren Schranke von 40% für die Erfolgswahrscheinlichkeit zufrieden ist.)

Allgemeine Lösung​

Wie wir gerade gesehen haben, können wir rr durch Phasenschätzung bestimmen, wenn wir den Eigenvektor ∣ψ1⟩\vert \psi_1 \rangle von MaM_a besitzen — vorausgesetzt, wir verwenden genug Kontroll-Qubits für ausreichende Präzision. Leider ist es nicht einfach, diesen Eigenvektor zu beschaffen; wir müssen also überlegen, wie wir weiter vorgehen.

Angenommen, wir gehen genauso vor wie oben, aber mit dem Eigenvektor ∣ψk⟩\vert\psi_k\rangle anstelle von ∣ψ1⟩\vert\psi_1\rangle, für eine beliebige Wahl von k∈{0,…,r−1}k\in\{0,\ldots,r-1\}. Das Ergebnis des Phasenschätzungsverfahrens ist eine Approximation:

y2m≈kr.\frac{y}{2^m} \approx \frac{k}{r}.

Unter der Annahme, dass wir weder kk noch rr kennen, kann das uns rr verraten oder auch nicht. Wenn zum Beispiel k=0k = 0, erhalten wir eine Approximation y/2my/2^m an 00, was uns leider nichts sagt. Das ist jedoch ein Sonderfall; für andere Werte von kk können wir zumindest etwas über rr lernen.

Wir können einen Algorithmus namens Kettenbruchalgorithmus verwenden, um aus unserer Approximation y/2my/2^m benachbarte Brüche zu berechnen — einschließlich k/rk/r, wenn die Approximation gut genug ist. Den Kettenbruchalgorithmus erklären wir hier nicht. Stattdessen geben wir eine bekannte Aussage über diesen Algorithmus an.

Fakt

Für eine ganze Zahl N≥2N\geq 2 und eine reelle Zahl α∈(0,1)\alpha\in(0,1) gibt es höchstens eine Wahl von ganzen Zahlen u,v∈{0,…,N−1}u,v\in\{0,\ldots,N-1\} mit v≠0v\neq 0 und gcd⁡(u,v)=1\gcd(u,v)=1, die ∣α−u/v∣<12N2\vert \alpha - u/v\vert < \frac{1}{2N^2} erfüllen. Gegeben α\alpha und NN, findet der Kettenbruchalgorithmus uu und vv, oder meldet, dass sie nicht existieren. Dieser Algorithmus kann als boolescher Circuit der Größe O((lg⁡(N))3)O((\operatorname{lg}(N))^3) implementiert werden.

Haben wir eine sehr genaue Approximation y/2my/2^m an k/rk/r und führen den Kettenbruchalgorithmus für NN und α=y/2m\alpha = y/2^m aus, erhalten wir uu und vv wie im Fakt beschrieben. Eine Analyse des Fakts erlaubt uns zu schließen, dass:

uv=kr.\frac{u}{v} = \frac{k}{r}.

Beachte insbesondere, dass wir nicht notwendigerweise kk und rr bestimmen, sondern nur k/rk/r in gekürzter Form.

Wie bereits festgestellt, werden wir aus k=0k=0 nichts lernen. Aber das ist der einzige Wert von kk, bei dem das passiert. Wenn kk von null verschieden ist, kann es gemeinsame Teiler mit rr haben, aber die Zahl vv aus dem Kettenbruchalgorithmus muss zumindest ein Teiler von rr sein.

Es ist nicht offensichtlich, aber es stimmt: Wenn wir uu und vv für u/v=k/ru/v = k/r mit gleichmäßig zufällig gewähltem k∈{0,…,r−1}k\in\{0,\ldots,r-1\} bestimmen können, können wir rr mit hoher Wahrscheinlichkeit nach nur wenigen Stichproben ermitteln. Insbesondere: Wenn unsere Schätzung für rr das kleinste gemeinsame Vielfache aller beobachteten Nennerwerte vv ist, sind wir mit hoher Wahrscheinlichkeit richtig. Intuitiv sind einige Werte von kk problematisch, da sie gemeinsame Teiler mit rr haben, und diese gemeinsamen Teiler werden versteckt, wenn wir uu und vv erhalten. Aber zufällige Wahlen von kk verbergen Faktoren von rr nicht lange, und die Wahrscheinlichkeit, dass wir rr nicht korrekt bestimmen, indem wir das kleinste gemeinsame Vielfache der beobachteten Nenner nehmen, fällt exponentiell in der Anzahl der Stichproben.

Es bleibt die Frage, wie wir einen Eigenvektor ∣ψk⟩\vert\psi_k\rangle von MaM_a erhalten, auf dem wir das Phasenschätzungsverfahren ausführen. Wie sich herausstellt, müssen wir ihn gar nicht explizit erzeugen!

Stattdessen führen wir das Phasenschätzungsverfahren auf dem Zustand ∣1⟩\vert 1\rangle aus — gemeint ist die nn-Bit-Binärkodierung der Zahl 11 — anstelle eines Eigenvektors ∣ψ⟩\vert\psi\rangle von MaM_a. Bislang haben wir das Phasenschätzungsverfahren nur für einen konkreten Eigenvektor beschrieben, aber nichts hindert uns daran, es auf einem Eingabezustand auszuführen, der kein Eigenvektor von MaM_a ist — und genau das tun wir hier mit dem Zustand ∣1⟩\vert 1\rangle. (Das ist kein Eigenvektor von MaM_a, es sei denn a=1a=1, was uns nicht interessiert.)

Der Grund für die Wahl von ∣1⟩\vert 1\rangle anstelle eines Eigenvektors von MaM_a ist, dass die folgende Gleichung gilt:

∣1⟩=1r∑k=0r−1∣ψk⟩\vert 1\rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle

Eine Möglichkeit, diese Gleichung zu überprüfen, besteht darin, die Skalarprodukte beider Seiten mit jedem Standardbasiszustand zu vergleichen und dabei frühere Formeln der Lektion zu verwenden. Dadurch erhalten wir genau dieselben Messergebnisse, als hätten wir k∈{0,…,r−1}k\in\{0,\ldots,r-1\} gleichmäßig zufällig gewählt und ∣ψk⟩\vert\psi_k\rangle als Eigenvektor verwendet.

Im Detail: Stellen wir uns vor, wir führen das Phasenschätzungsverfahren mit dem Zustand ∣1⟩\vert 1\rangle anstelle eines der Eigenvektoren ∣ψk⟩\vert\psi_k\rangle aus. Nach der inversen Quanten-Fourier-Transformation verbleiben wir im Zustand:

1r∑k=0r−1∣ψk⟩∣γk⟩,\frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \vert \psi_k\rangle \vert \gamma_k\rangle,

wobei

∣γk⟩=12m∑y=02m−1∑x=02m−1e2πix(k/r−y/2m)∣y⟩.\vert\gamma_k\rangle = \frac{1}{2^m} \sum_{y=0}^{2^m - 1} \sum_{x=0}^{2^m-1} e^{2\pi i x (k/r - y/2^m)} \vert y\rangle.

Der Vektor ∣γk⟩\vert\gamma_k\rangle beschreibt den Zustand der oberen mm Qubits nach der inversen Quanten-Fourier-Transformation.

Da {∣ψ0⟩,…,∣ψr−1⟩}\{\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle\} ein Orthonormalsystem ist, liefert eine Messung der oberen mm Qubits eine Approximation y/2my/2^m an den Wert k/rk/r, wobei k∈{0,…,r−1}k\in\{0,\ldots,r-1\} gleichmäßig zufällig gewählt wird. Wie bereits diskutiert, erlaubt uns das, rr mit hoher Zuverlässigkeit nach mehreren unabhängigen Läufen zu bestimmen — was unser Ziel war.

Gesamtkosten​

Der Aufwand zur Implementierung jedes gesteuerten Unitären MakM_a^k beträgt O(n2)O(n^2). Es gibt mm gesteuerte unitäre Operationen, und da m=O(n)m = O(n), beträgt der Gesamtaufwand für die gesteuerten unitären Operationen O(n3)O(n^3). Hinzu kommen mm Hadamard-Gates (die O(n)O(n) zum Aufwand beitragen) und die inverse Quanten-Fourier-Transformation, die O(n2)O(n^2) beiträgt. Damit dominieren die gesteuerten unitären Operationen den Gesamtaufwand des Verfahrens — der also O(n3)O(n^3) beträgt.

Neben dem Quantencircuit selbst gibt es einige klassische Berechnungen, die unterwegs durchgeführt werden müssen. Das umfasst die Berechnung der Potenzen aka^k in ZN\mathbb{Z}_N für k=2,4,8,…,2m−1k = 2, 4, 8, \ldots, 2^{m-1}, die zur Erstellung der gesteuerten unitären Gates benötigt werden, sowie den Kettenbruchalgorithmus, der Approximationen von θ\theta in Brüche umwandelt. Diese Berechnungen können durch boolesche Circuits mit einem Gesamtaufwand von O(n3)O(n^3) durchgeführt werden.

Wie üblich können all diese Schranken durch asymptotisch schnellere Algorithmen verbessert werden; diese Schranken setzen Standard-Algorithmen für grundlegende arithmetische Operationen voraus.

Faktorisierung durch Ordnungsbestimmung​

Das Letzte, was wir besprechen müssen, ist, wie die Lösung des Ordnungsbestimmungsproblems bei der Faktorisierung hilft. Dieser Teil ist vollständig klassisch — er hat nichts mit Quantencomputing zu tun.

Die Grundidee ist folgende. Wir möchten die Zahl NN faktorisieren und können das rekursiv tun. Konkret können wir uns auf die Aufgabe konzentrieren, NN zu teilen, d. h. zwei ganze Zahlen b,c≥2b,c\geq 2 zu finden, für die N=bcN = bc gilt. Das ist nicht möglich, wenn NN eine Primzahl ist, aber wir können mit einem Primzahltest zunächst effizient prüfen, ob NN prim ist, und wenn nicht, versuchen wir NN zu teilen. Sobald wir NN geteilt haben, können wir einfach rekursiv auf bb und cc vorgehen, bis alle Faktoren prim sind und wir die Primfaktorzerlegung von NN erhalten.

Gerade Zahlen zu teilen ist einfach: wir geben einfach 22 und N/2N/2 aus.

Auch vollständige Potenzen lassen sich leicht teilen — also Zahlen der Form N=sjN = s^j für ganze Zahlen s,j≥2s,j\geq 2 — indem man die Wurzeln N1/2N^{1/2}, N1/3N^{1/3}, N1/4N^{1/4} usw. approximiert und nahe gelegene ganze Zahlen als Kandidaten für ss prüft. Man muss dabei nicht weiter als log⁡(N)\log(N) Schritte in dieser Folge gehen, denn ab dann fällt die Wurzel unter 22 und liefert keine weiteren Kandidaten.

Es ist gut, dass wir beides können, denn die Ordnungsbestimmung hilft weder bei der Faktorisierung gerader Zahlen noch bei Primzahlpotenzen, wo ss eine Primzahl ist. Ist NN jedoch ungerade und keine Primzahlpotenz, erlaubt uns die Ordnungsbestimmung, NN zu teilen.

Probabilistischer Algorithmus zum Teilen einer ungeraden zusammengesetzten ganzen Zahl N, die keine Primzahlpotenz ist
  1. Wähle zufällig a∈{2,…,N−1}a\in\{2,\ldots,N-1\}.

  2. Berechne d=gcd⁡(a,N)d=\gcd(a,N).

  3. Falls d>1d > 1, gib b=db = d und c=N/dc = N/d aus und stoppe. Andernfalls fahre weiter, in dem Wissen, dass a∈ZN∗a\in\mathbb{Z}_N^{\ast}.

  4. Sei rr die Ordnung von aa modulo NN. (Hier wird die Ordnungsbestimmung benötigt.)

  5. Falls rr gerade ist:

    5.1 Berechne x=ar/2−1x = a^{r/2} - 1 modulo NN
    5.2 Berechne d=gcd⁡(x,N)d = \gcd(x,N).
    5.3 Falls d>1d>1, gib b=db=d und c=N/dc = N/d aus und stoppe.

  6. Wurde dieser Punkt erreicht, konnte der Algorithmus keinen Faktor von NN finden.

Ein Durchlauf dieses Algorithmus kann scheitern, einen Faktor von NN zu finden. Das passiert genau in zwei Situationen:

  • Die Ordnung von aa modulo NN ist ungerade.
  • Die Ordnung von aa modulo NN ist gerade und gcd⁡(ar/2−1,N)=1\gcd\bigl(a^{r/2} - 1, N\bigr) = 1.

Mit elementarer Zahlentheorie lässt sich beweisen, dass für eine zufällige Wahl von aa mit Wahrscheinlichkeit mindestens 1/21/2 keines dieser Ereignisse eintritt. Genauer gesagt ist die Wahrscheinlichkeit, dass eines der Ereignisse eintritt, höchstens 2−(m−1)2^{-(m-1)}, wobei mm die Anzahl der verschiedenen Primfaktoren von NN ist — deshalb ist die Annahme, dass NN keine Primzahlpotenz ist, erforderlich. (Die Annahme, dass NN ungerade ist, wird für die Gültigkeit dieser Aussage ebenfalls benötigt.)

Das bedeutet, dass jeder Durchlauf mit mindestens 50% Wahrscheinlichkeit NN teilt. Wenn wir den Algorithmus tt Mal ausführen, wobei wir jedes Mal aa zufällig wählen, werden wir NN mit Wahrscheinlichkeit mindestens 1−2−t1 - 2^{-t} erfolgreich teilen.

Die Grundidee des Algorithmus ist folgende. Wenn wir ein aa haben, für das die Ordnung rr von aa modulo NN gerade ist, dann ist r/2r/2 eine ganze Zahl und wir können die Zahlen

ar/2−1  (mod  N)andar/2+1  (mod  N).a^{r/2} - 1\; (\textrm{mod}\; N) \quad \text{and} \quad a^{r/2} + 1\; (\textrm{mod}\; N).

betrachten. Mit der Formel Z2−1=(Z+1)(Z−1)Z^2 - 1 = (Z+1)(Z-1) folgt:

(ar/2−1)(ar/2+1)=ar−1.\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr) = a^r - 1.

Wir wissen, dass ar  (mod  N)=1a^r \; (\textrm{mod}\; N) = 1 per Definition der Ordnung — was gleichbedeutend damit ist, dass NN die Zahl ar−1a^r - 1 ohne Rest teilt. Das bedeutet, dass NN das folgende Produkt ohne Rest teilt:

(ar/2−1)(ar/2+1).\bigl(a^{r/2} - 1\bigr) \bigl(a^{r/2} + 1\bigr).

Damit dies zutrifft, müssen alle Primfaktoren von NN auch Primfaktoren von ar/2−1a^{r/2} - 1 oder ar/2+1a^{r/2} + 1 sein (oder von beiden) — und bei einer zufälligen Wahl von aa ist es unwahrscheinlich, dass alle Primfaktoren von NN einen der beiden Terme teilen und keiner den anderen teilt. Andernfalls, solange einige der Primfaktoren von NN den ersten Term und einige den zweiten Term teilen, können wir einen nicht-trivialen Faktor von NN finden, indem wir den ggT mit dem ersten Term berechnen.