Přeskočit na hlavní obsah

Shorův algoritmus

Nyní obrátíme pozornost k problému faktorizace celých čísel a uvidíme, jak jej lze efektivně vyřešit na kvantovém počítači pomocí odhadu fáze. Algoritmus, který získáme, je Shorův algoritmus pro faktorizaci celých čísel. Shor svůj algoritmus nepopsal přímo v termínech odhadu fáze, ale je to přirozený a intuitivní způsob, jak vysvětlit jeho fungování.

Začneme diskusí o mezilehlém problému známém jako problém nalezení řádu a uvidíme, jak odhad fáze poskytuje řešení tohoto problému. Poté uvidíme, jak efektivní řešení problému nalezení řádu dává efektivní řešení problému faktorizace celých čísel. (Když řešení jednoho problému poskytuje řešení jiného problému tímto způsobem, říkáme, že se druhý problém redukuje na první — takže v tomto případě redukujeme faktorizaci celých čísel na nalezení řádu.) Tato druhá část Shorova algoritmu vůbec nevyužívá kvantové výpočty; je zcela klasická. Kvantové výpočty jsou potřeba pouze k vyřešení nalezení řádu.

Problém nalezení řádu

Základy teorie čísel

Pro vysvětlení problému nalezení řádu a jak jej lze vyřešit pomocí odhadu fáze, bude užitečné začít několika základními koncepty teorie čísel a zavést přitom praktickou notaci.

Pro začátek, pro libovolné kladné celé číslo NN definujeme množinu ZN\mathbb{Z}_N takto.

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

Například Z1={0},  \mathbb{Z}_1 = \{0\},\; Z2={0,1},  \mathbb{Z}_2 = \{0,1\},\; Z3={0,1,2},  \mathbb{Z}_3 = \{0,1,2\},\; a tak dále.

Jsou to množiny čísel, ale můžeme je chápat jako víc než jen množiny. Konkrétně můžeme uvažovat o aritmetických operacích na ZN\mathbb{Z}_N, jako je sčítání a násobení — a pokud se dohodneme, že výsledky vždy bereme modulo NN (to znamená, vydělíme číslem NN a jako výsledek vezmeme zbytek), při provádění těchto operací vždy zůstaneme v rámci této množiny. Dvě konkrétní operace sčítání a násobení, obě modulo N,N, dělají z ZN\mathbb{Z}_N okruh, což je fundamentálně důležitý typ objektu v algebře.

Například 33 a 55 jsou prvky Z7\mathbb{Z}_7 a pokud je spolu vynásobíme, dostaneme 35=15,3\cdot 5 = 15, což při dělení číslem 77 dává zbytek 1.1. Někdy to vyjadřujeme následovně.

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

Můžeme ale také jednoduše napsat 35=1,3 \cdot 5 = 1, za předpokladu, že bylo jasně řečeno, že pracujeme v Z7,\mathbb{Z}_7, jen abychom notaci co nejvíce zjednodušili.

Jako příklad zde jsou tabulky sčítání a násobení pro Z6.\mathbb{Z}_6.

+012345001234511234502234501334501244501235501234012345000000010123452024024303030340420425054321\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}

Mezi NN prvky ZN\mathbb{Z}_N jsou speciální ty prvky aZN,a\in\mathbb{Z}_N, které splňují gcd(a,N)=1.\gcd(a,N) = 1. Množina obsahující tyto prvky se často označuje hvězdičkou, takto.

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

Pokud zaměříme pozornost na operaci násobení, množina ZN\mathbb{Z}_N^{\ast} tvoří grupu — konkrétně abelovskou grupu — což je další důležitý typ objektu v algebře. Je to základní fakt o těchto množinách (a konečných grupách obecně), že pokud si zvolíme libovolný prvek aZNa\in\mathbb{Z}_N^{\ast} a opakovaně násobíme aa samo sebou, vždy nakonec dostaneme číslo 1.1.

Jako první příklad vezměme N=6.N=6. Platí, že 5Z6,5\in\mathbb{Z}_6^{\ast}, protože gcd(5,6)=1,\gcd(5,6) = 1, a pokud vynásobíme 55 samo sebou, dostaneme 1,1, jak potvrzuje tabulka výše.

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

Jako druhý příklad vezměme N=21.N = 21. Pokud projdeme čísla od 00 do 20,20, ta, která mají GCD rovný 11 s číslem 21,21, jsou následující.

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\}

Pro každý z těchto prvků je možné umocnit toto číslo na kladné celé číslo a dostat 1.1. Zde jsou nejmenší mocniny, pro které to funguje:

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}

Přirozeně pracujeme v Z21\mathbb{Z}_{21} ve všech těchto rovnicích, což jsme se neobtěžovali psát — považujeme to za implicitní, abychom věci zbytečně nekomplikovali. V tom budeme pokračovat po zbytek této lekce.

Formulace problému a spojení s odhadem fáze

Nyní můžeme formulovat problém nalezení řádu.

Nalezení řádu

Vstup: kladná celá čísla NN a aa splňující gcd(N,a)=1\gcd(N,a) = 1
Výstup: nejmenší kladné celé číslo rr takové, že ar1a^r \equiv 1 (mod N)(\textrm{mod } N)

Alternativně, v notaci, kterou jsme právě zavedli výše, je nám dáno aZNa \in \mathbb{Z}_N^{\ast} a hledáme nejmenší kladné celé číslo rr takové, že ar=1.a^r = 1. Toto číslo rr se nazývá řád prvku aa modulo N.N.

Pro spojení problému nalezení řádu s odhadem fáze se zamysleme nad operací definovanou na systému, jehož klasické stavy odpovídají ZN,\mathbb{Z}_N, kde násobíme pevným prvkem aZN.a\in\mathbb{Z}_N^{\ast}.

Max=ax(pro kazˇdeˊ xZN)M_a \vert x\rangle = \vert ax \rangle \qquad \text{(pro každé $x\in\mathbb{Z}_N$)}

Pro upřesnění, násobení provádíme v ZN,\mathbb{Z}_N, takže je implicitní, že uvnitř ketu na pravé straně rovnice bereme součin modulo N.N.

Například pokud vezmeme N=15N = 15 a a=2,a=2, pak působení M2M_2 na standardní bázi {0,,14}\{\vert 0\rangle,\ldots,\vert 14\rangle\} je následující.

M20=0M25=10M210=5M21=2M26=12M211=7M22=4M27=14M212=9M23=6M28=1M213=11M24=8M29=3M214=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}

Toto je unitární operace za předpokladu, že gcd(a,N)=1;\gcd(a,N)=1; přeuspořádává prvky standardní báze {0,,N1},\{\vert 0\rangle,\ldots,\vert N-1\rangle\}, takže jako matice je to permutační matice. Z její definice je zřejmé, že tato operace je deterministická, a jednoduchý způsob, jak vidět, že je invertibilní, je zamyslet se nad řádem rr prvku aa modulo NN a uvědomit si, že inverze MaM_a je Mar1.M_a^{r-1}.

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

Existuje i jiný způsob, jak přemýšlet o inverzi, který nevyžaduje žádnou znalost rr (které koneckonců teprve chceme vypočítat). Pro každý prvek aZNa\in\mathbb{Z}_N^{\ast} vždy existuje jedinečný prvek bZN,b\in\mathbb{Z}_N^{\ast}, který splňuje ab=1.ab=1. Tento prvek bb označujeme a1a^{-1} a lze ho efektivně spočítat; rozšíření Euklidova algoritmu pro GCD to provede s náklady kvadratickými v lg(N).\operatorname{lg}(N). A tedy

Ma1Ma=Ma1a=M1=I.M_{a^{-1}} M_a = M_{a^{-1}a} = M_1 = \mathbb{I}.

Operace MaM_a je tedy jak deterministická, tak invertibilní. To znamená, že je popsána permutační maticí, a je tedy unitární.

Nyní se zamysleme nad vlastními vektory a vlastními hodnotami operace Ma,M_a, za předpokladu, že aZN.a\in\mathbb{Z}_N^{\ast}. Jak jsme právě ukázali, tento předpoklad nám říká, že MaM_a je unitární.

Existuje NN vlastních hodnot Ma,M_a, případně včetně stejné vlastní hodnoty opakované vícekrát, a obecně existuje určitá volnost při výběru odpovídajících vlastních vektorů — ale nemusíme se zabývat všemi možnostmi. Začněme jednoduše a identifikujme jen jeden vlastní vektor Ma.M_a.

ψ0=1+a++ar1r\vert \psi_0 \rangle = \frac{\vert 1 \rangle + \vert a \rangle + \cdots + \vert a^{r-1} \rangle}{\sqrt{r}}

Číslo rr je řád aa modulo N,N, zde i ve zbytku celé lekce. Vlastní hodnota přiřazená tomuto vlastnímu vektoru je 1,1, protože se nezmění, když násobíme číslem a.a.

Maψ0=a++ar1+arr=a++ar1+1r=ψ0M_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

To se děje proto, že ar=1,a^r = 1, takže každý stav standardní báze ak\vert a^k \rangle se posune na ak+1\vert a^{k+1} \rangle pro kr1k\leq r-1 a ar1\vert a^{r-1} \rangle se posune zpět na 1.\vert 1\rangle. Neformálně řečeno, je to jako bychom pomalu míchali ψ0,\vert \psi_0 \rangle, ale ten je už úplně promíchaný, takže se nic nezmění.

Zde je další příklad vlastního vektoru Ma.M_a. Tento je v kontextu nalezení řádu a odhadu fáze zajímavější.

ψ1=1+ωr1a++ωr(r1)ar1r\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}}

Alternativně můžeme tento vektor zapsat pomocí sumy následovně.

ψ1=1rk=0r1ωrkak\vert \psi_1 \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-k} \vert a^k \rangle

Zde vidíme, jak se přirozeně objevuje komplexní číslo ωr=e2πi/r\omega_r = e^{2\pi i/r} díky způsobu, jakým funguje násobení číslem aa modulo N.N. Tentokrát je odpovídající vlastní hodnota ωr.\omega_r. Abychom to viděli, můžeme nejprve provést následující výpočet.

Maψ1=1rk=0r1ωrkMaak=1rk=0r1ωrkak+1=1rk=1rωr(k1)ak=1rωrk=1rωrkakM_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

Potom, protože ωrr=1=ωr0\omega_r^{-r} = 1 = \omega_r^0 a ar=1=a0,\vert a^r \rangle = \vert 1\rangle = \vert a^0\rangle, vidíme, že

1rk=1rωrkak=1rk=0r1ωrkak=ψ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,

takže Maψ1=ωrψ1.M_a \vert\psi_1\rangle = \omega_r \vert\psi_1\rangle.

Stejným postupem můžeme identifikovat další páry vlastní vektor/vlastní hodnota pro Ma.M_a. Pro libovolnou volbu j{0,,r1}j\in\{0,\ldots,r-1\} platí, že

ψj=1rk=0r1ωrjkak\vert \psi_j \rangle = \frac{1}{\sqrt{r}} \sum_{k = 0}^{r-1} \omega_r^{-jk} \vert a^k \rangle

je vlastní vektor Ma,M_a, jehož odpovídající vlastní hodnota je ωrj.\omega_r^j.

Maψj=ωrjψjM_a \vert \psi_j \rangle = \omega_r^j \vert \psi_j \rangle

Existují i další vlastní vektory Ma,M_a, ale nemusíme se jimi zabývat — zaměříme se výhradně na vlastní vektory ψ0,,ψr1,\vert\psi_0\rangle,\ldots,\vert\psi_{r-1}\rangle, které jsme právě identifikovali.

Nalezení řádu pomocí odhadu fáze

K vyřešení problému nalezení řádu pro danou volbu aZNa\in\mathbb{Z}_N^{\ast} můžeme aplikovat proceduru odhadu fáze na operaci Ma.M_a.

K tomu potřebujeme efektivně implementovat kvantovým Circuit nejen Ma,M_a, ale také Ma2,M_a^2, Ma4,M_a^4, Ma8M_a^8 a tak dále, tak daleko, jak je potřeba k získání dostatečně přesného odhadu z procedury odhadu fáze. Zde vysvětlíme, jak to lze provést, a později přesně zjistíme, kolik přesnosti je potřeba.

Začněme samotnou operací Ma.M_a. Přirozeně, protože pracujeme s modelem kvantových Circuit, budeme k zakódování čísel mezi 00 a N1N-1 používat binární zápis. Největší číslo, které potřebujeme zakódovat, je N1,N-1, takže počet bitů, které potřebujeme, je

n=lg(N1)=log(N1)+1.n = \operatorname{lg}(N-1) = \lfloor \log(N-1) \rfloor + 1.

Například pokud N=21,N = 21, máme n=lg(N1)=5.n = \operatorname{lg}(N-1) = 5. Takto vypadá zakódování prvků Z21\mathbb{Z}_{21} jako binárních řetězců délky 5.5.

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

A nyní přesná definice toho, jak je MaM_a definováno jako nn-Qubit operace.

Max={ax  (mod  N)0x<NxNx<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}

Jde o to, že ačkoli nás zajímá pouze to, jak MaM_a funguje pro 0,,N1,\vert 0\rangle,\ldots,\vert N-1\rangle, musíme specifikovat, jak funguje pro zbývajících 2nN2^n - N stavů standardní báze — a musíme to udělat způsobem, který nám stále dá unitární operaci. Definování MaM_a tak, aby s těmito zbývajícími stavy standardní báze nic nedělalo, toto splňuje.

Pomocí algoritmů pro násobení a dělení celých čísel diskutovaných v předchozí lekci, spolu s metodologií pro reverzibilní implementace bez odpadu, můžeme sestavit kvantový Circuit, který provádí MaM_a pro libovolnou volbu aZN,a\in\mathbb{Z}_N^{\ast}, s náklady O(n2).O(n^2). Zde je jeden způsob, jak to lze udělat.

  1. Sestav Circuit pro provedení operace

    xyxyfa(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \vert y \oplus f_a(x)\rangle

    kde

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

    pomocí metody popsané v předchozí lekci. Tím získáme Circuit o velikosti O(n2).O(n^2).

  2. Prohoď dva nn-Qubit systémy pomocí nn swap Gate pro individuální prohození Qubitů.

  3. Podobně jako v prvním kroku sestav Circuit pro operaci

    xyxyfa1(x)\vert x \rangle \vert y \rangle \mapsto \vert x \rangle \bigl\vert y \oplus f_{a^{-1}}(x)\bigr\rangle

    kde a1a^{-1} je inverze aa v ZN.\mathbb{Z}_N^{\ast}.

Inicializací spodních nn Qubitů a složením tří kroků získáme tuto transformaci:

x0nstep 1xfa(x)step 2fa(x)xstep 3fa(x)xfa1(fa(x))=fa(x)0n\vert x \rangle \vert 0^n \rangle \stackrel{\text{step 1}}{\mapsto} \vert x \rangle \vert f_a(x)\rangle \stackrel{\text{step 2}}{\mapsto} \vert f_a(x)\rangle \vert x \rangle \stackrel{\text{step 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

Metoda vyžaduje pracovní Qubity, ale ty jsou na konci vráceny do svého inicializovaného stavu, což nám umožňuje použít tyto Circuit pro odhad fáze. Celkové náklady získaného Circuit jsou O(n2).O(n^2).

Pro provedení Ma2,M_a^2, Ma4,M_a^4, Ma8M_a^8 a tak dále můžeme použít přesně stejnou metodu, jen nahradíme aa za a2,a^2, a4,a^4, a8a^8 a tak dále jako prvky ZN.\mathbb{Z}_N^{\ast}. To znamená, že pro jakoukoli mocninu k,k, kterou zvolíme, můžeme vytvořit Circuit pro MakM_a^k nikoli opakováním Circuit pro MaM_a celkem kk-krát, ale místo toho vypočteme b=akZNb = a^k \in \mathbb{Z}_N^{\ast} a poté použijeme Circuit pro Mb.M_b.

Výpočet mocnin akZNa^k \in \mathbb{Z}_N je problém modulární exponenciace zmíněný v předchozí lekci. Tento výpočet lze provést klasicky pomocí algoritmu pro modulární exponenciaci zmíněného v předchozí lekci (v teorii výpočetních čísel často nazývaného algoritmus mocnění). Ve skutečnosti potřebujeme pouze mocniny aa o základu 2,2, konkrétně a2,a4,a2m1ZN,a^2, a^4, \ldots a^{2^{m-1}} \in \mathbb{Z}_N^{\ast}, a tyto mocniny můžeme získat iterativním umocňováním na druhou m1m-1 krát. Každé umocnění na druhou lze provést booleovským Circuit o velikosti O(n2).O(n^2).

V podstatě zde efektivně přenášíme problém iterování MaM_a2m12^{m-1} krát na efektivní klasický výpočet. A je to šťastná okolnost, že je to možné! Pro libovolnou volbu kvantového Circuit v problému odhadu fáze to pravděpodobně není možné — a v takovém případě výsledné náklady na odhad fáze rostou exponenciálně s počtem řídicích Qubitů m.m.

Řešení s výhodným vlastním vektorem

Abychom pochopili, jak můžeme vyřešit problém nalezení řádu pomocí odhadu fáze, začněme předpokladem, že spustíme proceduru odhadu fáze na operaci MaM_a s použitím vlastního vektoru ψ1.\vert\psi_1\rangle. Získat tento vlastní vektor není snadné, jak se ukáže, takže toto nebude konec příběhu — ale je užitečné zde začít.

Vlastní hodnota MaM_a odpovídající vlastnímu vektoru ψ1\vert \psi_1\rangle je

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

To znamená, ωr=e2πiθ\omega_r = e^{2\pi i \theta} pro θ=1/r.\theta = 1/r. Takže pokud spustíme proceduru odhadu fáze na MaM_a s použitím vlastního vektoru ψ1,\vert\psi_1\rangle, získáme aproximaci 1/r.1/r. Výpočtem převrácené hodnoty budeme schopni zjistit rr — za předpokladu, že naše aproximace je dostatečně dobrá.

Podrobněji, když spustíme proceduru odhadu fáze s mm řídicími Qubity, získáme číslo y{0,,2m1}.y\in\{0,\ldots,2^m-1\}. Poté vezmeme y/2my/2^m jako odhad pro θ,\theta, což je v našem případě 1/r.1/r. Abychom z této aproximace zjistili, co je r,r, přirozená věc je vypočítat převrácenou hodnotu naší aproximace a zaokrouhlit na nejbližší celé číslo.

undefined