Přeskočit na hlavní obsah

Simonův algoritmus

Simonův algoritmus je kvantový dotazovací algoritmus pro problém známý jako Simonův problém. Jedná se o problém s příslibem (promise problem), který má podobný charakter jako problémy Deutsch-Jozsa a Bernstein-Vazirani, ale konkrétní detaily se liší.

Simonův algoritmus je významný, protože poskytuje exponenciální výhodu kvantových algoritmů oproti klasickým (včetně probabilistických) algoritmům, a technika, kterou používá, inspirovala Petera Shora k objevu efektivního kvantového algoritmu pro faktorizaci celých čísel.

Simonův problém

Vstupní funkce Simonova problému má tvar

f:ΣnΣmf:\Sigma^n \rightarrow \Sigma^m

pro kladná celá čísla nn a m.m. Mohli bychom se omezit na případ m=nm = n v zájmu jednoduchosti, ale toto zjednodušení by nám mnoho nepřineslo — Simonův algoritmus a jeho analýza jsou v obou případech v podstatě stejné.

Simonův problém

Vstup: funkce f:ΣnΣmf:\Sigma^n \rightarrow \Sigma^m
Příslib: existuje řetězec sΣns\in\Sigma^n takový, že [f(x)=f(y)][(x=y)(xs=y)][f(x) = f(y)] \Leftrightarrow [(x = y) \vee (x \oplus s = y)] pro všechna x,yΣnx,y\in\Sigma^n
Výstup: řetězec ss

Za chvíli příslib podrobněji rozebereme, abychom lépe porozuměli tomu, co říká, ale nejprve si ujasněme, že vyžaduje, aby ff měla velmi speciální strukturu — většina funkcí tedy tento příslib nesplňuje. Je také na místě připustit, že tento problém nemá praktický význam. Jedná se spíše o poněkud umělý problém, který je vytvořený na míru tak, aby byl snadný pro kvantové počítače a obtížný pro klasické počítače.

Existují dva hlavní případy: první případ je, že ss je nulový řetězec 0n,0^n, a druhý případ je, že ss není nulový řetězec.

  • Případ 1: s=0n.s=0^n. Pokud je ss nulový řetězec, pak můžeme zjednodušit výrok „právě tehdy, když" v příslibu tak, aby zněl [f(x)=f(y)][x=y].[f(x) = f(y)] \Leftrightarrow [x = y]. To je ekvivalentní tomu, že ff je prostá funkce (injekce).

  • Případ 2: s0n.s\neq 0^n. Pokud ss není nulový řetězec, pak splnění příslibu pro tento řetězec implikuje, že ff je dva-na-jeden (two-to-one), což znamená, že pro každý možný výstupní řetězec ff existují právě dva vstupní řetězce, které způsobí, že ff tento řetězec vypíše. Tyto dva vstupní řetězce navíc musí mít tvar ww a wsw \oplus s pro nějaký řetězec w.w.

Je důležité si uvědomit, že pokud je příslib splněn, může existovat pouze jeden řetězec s,s, který vyhovuje, takže pro funkce splňující příslib existuje vždy jediná správná odpověď.

Zde je příklad funkce tvaru f:Σ3Σ5,f:\Sigma^3 \rightarrow \Sigma^5, která splňuje příslib pro řetězec s=011.s = 011.

f(000)=10011f(001)=00101f(010)=00101f(011)=10011f(100)=11010f(101)=00001f(110)=00001f(111)=11010\begin{aligned} f(000) & = 10011 \\ f(001) & = 00101 \\ f(010) & = 00101 \\ f(011) & = 10011 \\ f(100) & = 11010 \\ f(101) & = 00001 \\ f(110) & = 00001 \\ f(111) & = 11010 \end{aligned}

Existuje 88 různých vstupních řetězců a 44 různých výstupních řetězců, z nichž každý se vyskytuje dvakrát — jedná se tedy o funkci dva-na-jeden. Navíc pro libovolné dva různé vstupní řetězce, které produkují stejný výstupní řetězec, vidíme, že bitový XOR těchto dvou vstupních řetězců se rovná 011,011, což je ekvivalentní tvrzení, že jeden z nich se rovná druhému XORovanému s s.s.

Všimni si, že jediné, na čem u skutečných výstupních řetězců záleží, je to, zda jsou pro různé volby vstupních řetězců stejné nebo různé. Například ve výše uvedeném příkladu jsou čtyři řetězce (10011,(10011, 00101,00101, 00001,00001, a 11010),11010), které se objevují jako výstupy f.f. Tyto čtyři řetězce bychom mohli nahradit jinými řetězci, pokud by byly navzájem různé, a správné řešení s=011s = 011 by se nezměnilo.

Popis algoritmu

Zde je diagram kvantového Circuit představující Simonův algoritmus.

Simon's algorithm

Pro upřesnění, nahoře je nn Qubitů, na které působí Hadamardovy Gate, a dole je mm Qubitů, které jdou přímo do dotazovací Gate. Vypadá to velmi podobně jako algoritmy, které jsme již v této lekci probírali, ale tentokrát nedochází k fázovému zpětnému rázu (phase kickback); spodních mm Qubitů vstupuje do dotazovací Gate ve stavu 0.\vert 0\rangle.

K vyřešení Simonova problému pomocí tohoto Circuit bude ve skutečnosti zapotřebí několik nezávislých běhů, po nichž následuje klasický krok dodatečného zpracování, který bude popsán později po analýze chování Circuit.

Analýza

Analýza Simonova algoritmu začíná podobně jako u algoritmu Deutsch-Jozsa. Po provedení první vrstvy Hadamardových Gate na horních nn Qubitech se stav změní na

12nxΣn0mx.\frac{1}{\sqrt{2^n}} \sum_{x\in\Sigma^n} \vert 0^m \rangle \vert x\rangle.

Když se provede Uf,U_f, výstup funkce ff se XORuje na nulový stav spodních mm Qubitů, takže stav se změní na

12nxΣnf(x)x.\frac{1}{\sqrt{2^n}} \sum_{x\in\Sigma^n} \vert f(x) \rangle \vert x\rangle.

Když se provede druhá vrstva Hadamardových Gate, získáme následující stav pomocí stejného vzorce pro působení vrstvy Hadamardových Gate jako dříve.

12nxΣnyΣn(1)xyf(x)y\frac{1}{2^n} \sum_{x\in\Sigma^n} \sum_{y\in\Sigma^n} (-1)^{x\cdot y} \vert f(x) \rangle \vert y\rangle

V tomto bodě se analýza odchyluje od analýz předchozích algoritmů v této lekci.

Zajímá nás pravděpodobnost, že měření dá jako výsledek každý možný řetězec yΣn.y\in\Sigma^n. Pomocí pravidel pro analýzu měření popsaných v lekci Více systémů kurzu Základy kvantové informace zjistíme, že pravděpodobnost p(y)p(y) získání řetězce yy je rovna

p(y)=12nxΣn(1)xyf(x)2.p(y) = \left\|\frac{1}{2^n} \sum_{x\in\Sigma^n} (-1)^{x\cdot y} \vert f(x) \rangle \right\|^2.

Abychom tyto pravděpodobnosti lépe uchopili, budeme potřebovat trochu více notace a terminologie. Za prvé, obor hodnot funkce ff je množina obsahující všechny její výstupní řetězce.

range(f)={f(x):xΣn}\operatorname{range}(f) = \{ f(x) : x\in \Sigma^n \}

Za druhé, pro každý řetězec zrange(f)z\in\operatorname{range}(f) můžeme množinu všech vstupních řetězců, pro které se funkce vyhodnotí na tento výstupní řetězec z,z, zapsat jako f1({z}).f^{-1}(\{z\}).

f1({z})={xΣn:f(x)=z}f^{-1}(\{z\}) = \{ x\in\Sigma^n : f(x) = z \}

Množina f1({z})f^{-1}(\{z\}) se nazývá vzor (preimage) množiny {z}\{z\} při zobrazení f.f. Vzor při zobrazení ff můžeme definovat analogicky pro libovolnou množinu namísto {z}\{z\} — je to množina všech prvků, které ff zobrazí do dané množiny. (Tuto notaci bychom neměli zaměňovat s inverzní funkcí k f,f, která nemusí existovat. Nápovědou, která nám pomáhá vyhnout se této záměně, je skutečnost, že argumentem na levé straně je množina {z},\{z\}, nikoli prvek z.z.)

Pomocí této notace můžeme rozdělit součet v našem výrazu pro pravděpodobnosti výše a získat

p(y)=12nzrange(f)(xf1({z})(1)xy)z2.p(y) = \left\| \frac{1}{2^n} \sum_{z\in\operatorname{range}(f)} \Biggl(\sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y}\Biggr) \vert z \rangle \right\|^2.

Každý řetězec xΣnx\in\Sigma^n je zastoupen právě jednou ve dvou součtech — v podstatě jen třídíme tyto řetězce do samostatných skupin podle toho, jaký výstupní řetězec z=f(x)z = f(x) produkují při vyhodnocení funkce f,f, a pak sčítáme zvlášť přes všechny skupiny.

Nyní můžeme vyhodnotit druhou mocninu euklidovské normy a získat

p(y)=122nzrange(f)xf1({z})(1)xy2.p(y) = \frac{1}{2^{2n}} \sum_{z\in\operatorname{range}(f)} \left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2.

Pro další zjednodušení těchto pravděpodobností se podívejme na hodnotu

xf1({z})(1)xy2(1)\left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2 \tag{1}

pro libovolnou volbu zrange(f).z\in\operatorname{range}(f).

Pokud se stane, že s=0n,s = 0^n, pak je ff prostá funkce a pro každé zrange(f)z\in\operatorname{range}(f) vždy existuje pouze jediný prvek xf1({z}).x\in f^{-1}(\{z\}). Hodnota výrazu (1)(1) je v tomto případě 1.1.

Pokud naopak s0n,s\neq 0^n, pak v množině f1({z})f^{-1}(\{z\}) existují právě dva řetězce. Přesněji řečeno, pokud zvolíme wf1({z})w\in f^{-1}(\{z\}) jako kterýkoli z těchto dvou řetězců, pak druhý řetězec musí být wsw \oplus s podle předpokladu v Simonově problému. Pomocí tohoto pozorování můžeme zjednodušit (1)(1) následovně.

xf1({z})(1)xy2=(1)wy+(1)(ws)y2=(1)wy(1+(1)sy)2=1+(1)ys2={4ys=00ys=1\begin{aligned} \left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2 & = \Bigl\vert (-1)^{w\cdot y} + (-1)^{(w\oplus s)\cdot y} \Bigr\vert^2 \\ & = \Bigl\vert (-1)^{w\cdot y} \Bigl(1 + (-1)^{s\cdot y}\Bigr) \Bigr\vert^2 \\ & = \Bigl\vert 1 + (-1)^{y\cdot s} \Bigr\vert^2 \\ & = \begin{cases} 4 & y \cdot s = 0\\[1mm] 0 & y \cdot s = 1 \end{cases} \end{aligned}

Ukazuje se tedy, že hodnota (1)(1) je v obou případech nezávislá na konkrétní volbě zrange(f).z\in\operatorname{range}(f).

Nyní můžeme dokončit analýzu tím, že se podíváme na stejné dva případy jako předtím zvlášť.

  • Případ 1: s=0n.s = 0^n. V tomto případě je funkce ff prostá, takže existuje 2n2^n řetězců zrange(f),z\in\operatorname{range}(f), a dostaneme

    p(y)=122n2n=12n.p(y) = \frac{1}{2^{2n}} \cdot 2^n = \frac{1}{2^n}.

    Slovně řečeno, měření dává řetězec yΣny\in\Sigma^n vybraný rovnoměrně náhodně.

  • Případ 2: s0n.s \neq 0^n. V tomto případě je ff funkce dva-na-jednu, takže v range(f)\operatorname{range}(f) je 2n12^{n-1} prvků. Pomocí výše uvedeného vzorce dospějeme k závěru, že pravděpodobnost změření každého yΣny\in\Sigma^n je

    p(y)=122nzrange(f)xf1({z})(1)xy2={12n1ys=00ys=1p(y) = \frac{1}{2^{2n}} \sum_{z\in\operatorname{range}(f)} \Biggl\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \Biggr\vert^2 = \begin{cases} \frac{1}{2^{n-1}} & y \cdot s = 0\\[1mm] 0 & y \cdot s = 1 \end{cases}

    Slovně řečeno, dostaneme řetězec vybraný rovnoměrně náhodně z množiny {yΣn:ys=0},\{y\in\Sigma^n : y \cdot s = 0\}, která obsahuje 2n12^{n-1} řetězců. (Protože s0n,s\neq 0^n, přesně polovina binárních řetězců délky nn má binární skalární součin 11 s ss a druhá polovina má binární skalární součin 00 s s,s, jak jsme již pozorovali při analýze Deutsch-Jozsova algoritmu pro Bernstein-Vaziraniho problém.)

Klasické post-zpracování

Nyní víme, jaké jsou pravděpodobnosti pro možné výsledky měření, když spustíme kvantový Circuit pro Simonův algoritmus. Stačí nám tato informace k určení ss?

Odpověď je ano, za předpokladu, že jsme ochotni celý proces několikrát zopakovat a přijmout, že může selhat s určitou pravděpodobností, kterou můžeme udělat velmi malou tím, že Circuit spustíme dostatečně mnohokrát. Základní myšlenka je, že každé spuštění Circuit nám poskytuje statistické důkazy o s,s, a tyto důkazy můžeme použít k nalezení ss s velmi vysokou pravděpodobností, pokud Circuit spustíme dostatečně mnohokrát.

Předpokládejme, že Circuit spustíme nezávisle kk-krát, pro k=n+10.k = n + 10. Na tomto konkrétním počtu iterací není nic zvláštního — mohli bychom zvolit kk větší (nebo menší) v závislosti na pravděpodobnosti selhání, kterou jsme ochotni tolerovat, jak uvidíme. Volba k=n+10k = n + 10 zajistí, že máme více než 99,999{,}9% šanci na obnovení s.s.

Spuštěním Circuit kk-krát získáme řetězce y1,...,ykΣn.y^1,...,y^{k} \in \Sigma^n. Pro upřesnění, horní indexy zde jsou součástí názvů těchto řetězců, nikoli exponenty nebo indexy jejich bitů, takže máme

y1=yn11y01y2=yn12y02    yk=yn1ky0k\begin{aligned} y^1 & = y^1_{n-1} \cdots y^1_{0}\\[1mm] y^2 & = y^2_{n-1} \cdots y^2_{0}\\[1mm] & \;\; \vdots\\[1mm] y^{k} & = y^{k}_{n-1} \cdots y^{k}_{0} \end{aligned}

Nyní vytvoříme matici MM s kk řádky a nn sloupci tak, že jako binární položky vezmeme bity těchto řetězců.

M=(yn11y01yn12y02yn1ky0k)M = \begin{pmatrix} y^1_{n-1} & \cdots & y^1_{0}\\[1mm] y^2_{n-1} & \cdots & y^2_{0}\\[1mm] \vdots & \ddots & \vdots \\[1mm] y^{k}_{n-1} & \cdots & y^{k}_{0} \end{pmatrix}

V tuto chvíli nevíme, co je ss — naším cílem je tento řetězec najít. Ale představ si na chvíli, že řetězec ss známe, a vytvoříme sloupcový vektor vv z bitů řetězce s=sn1s0s = s_{n-1} \cdots s_0 následovně.

v=(sn1s0)v = \begin{pmatrix} s_{n-1}\\ \vdots\\ s_0 \end{pmatrix}

Pokud provedeme násobení matice vektorem MvM v modulo 22 — což znamená, že provedeme násobení jako obvykle a poté vezmeme zbytek po dělení položek výsledku číslem 22 — dostaneme nulový vektor.

Mv=(y1sy2syks)=(000)M v = \begin{pmatrix} y^1 \cdot s\\ y^2 \cdot s\\ \vdots\\[1mm] y^{k} \cdot s \end{pmatrix} = \begin{pmatrix} 0\\ 0\\ \vdots\\[1mm] 0 \end{pmatrix}

To znamená, že řetězec s,s, chápaný jako sloupcový vektor vv jak bylo právě popsáno, bude vždy prvkem jádra (null space) matice M,M, za předpokladu, že aritmetiku provádíme modulo 2.2. To platí jak v případě, že s=0n,s = 0^n, tak v případě s0n.s\neq 0^n. Přesněji řečeno, nulový vektor je vždy v jádře MM a v případě s0ns\neq 0^n se k němu přidává vektor, jehož položky jsou bity s.s.

Zbývající otázka je, zda v jádře MM budou kromě vektorů odpovídajících 0n0^n a ss ještě nějaké další vektory. Odpověď je, že to se stává čím dál méně pravděpodobným s rostoucím kk — a pokud zvolíme k=n+10,k = n + 10, jádro MM nebude obsahovat žádné další vektory kromě těch odpovídajících 0n0^n a ss s pravděpodobností větší než 99,999{,}9%. Obecněji, pokud nahradíme k=n+10k = n + 10 hodnotou k=n+rk = n + r pro libovolnou volbu kladného celého čísla r,r, pravděpodobnost, že vektory odpovídající 0n0^n a ss jsou v jádře MM samy, je alespoň 12r.1 - 2^{-r}.

Pomocí lineární algebry je možné efektivně vypočítat popis jádra MM modulo 2.2. Konkrétně to lze provést pomocí Gaussovy eliminace, která funguje při aritmetice modulo 22 stejně jako s reálnými nebo komplexními čísly. Pokud jsou vektory odpovídající 0n0^n a ss v jádře MM samy, což nastává s vysokou pravděpodobností, můžeme ss odvodit z výsledků tohoto výpočtu.

Klasická obtížnost

Kolik dotazů potřebuje klasický dotazovací algoritmus k vyřešení Simonova problému? Odpověď je: obecně hodně.

Existují různá přesná tvrzení, která lze o klasické obtížnosti tohoto problému učinit, a zde je jedno z nich. Pokud máme jakýkoli pravděpodobnostní dotazovací algoritmus a tento algoritmus provede méně než 2n/2112^{n/2 - 1} - 1 dotazů, což je počet dotazů exponenciální v n,n, pak tento algoritmus selže při řešení Simonova problému s pravděpodobností alespoň 1/2.1/2.

Někdy může být dokazování výsledků o nemožnosti velmi náročné, ale tento není příliš obtížný a lze ho dokázat elementární pravděpodobnostní analýzou. Zde však pouze stručně prozkoumáme základní intuici, která za ním stojí.

Snažíme se najít skrytý řetězec s,s, ale dokud nezadáme funkci dotaz na dva řetězce se stejnou výstupní hodnotou, získáme o ss velmi omezené informace. Intuitivně řečeno, vše, co se dozvíme, je, že skrytý řetězec ss není exkluzivní disjunkcí (XOR) žádných dvou různých řetězců, na které jsme se dotázali. A pokud zadáme dotaz na méně než 2n/2112^{n/2 - 1} - 1 řetězců, stále bude existovat mnoho možností pro s,s, které jsme nevyloučili, protože nemáme dostatek párů řetězců, abychom to dokázali. Toto není formální důkaz, je to jen základní myšlenka.

Takže, shrnuto, Simonův algoritmus nám poskytuje pozoruhodnou výhodu kvantových algoritmů nad klasickými v rámci dotazovacího modelu. Konkrétně Simonův algoritmus řeší Simonův problém s počtem dotazů, který je lineární v počtu vstupních bitů nn naší funkce, zatímco jakýkoli klasický algoritmus, i pravděpodobnostní, potřebuje provést počet dotazů, který je exponenciální v n,n, aby vyřešil Simonův problém s rozumnou pravděpodobností úspěchu.