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 definujeme množinu takto.
Například 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 , jako je sčítání a násobení — a pokud se dohodneme, že výsledky vždy bereme modulo (to znamená, vydělíme číslem 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 dělají z okruh, což je fundamentálně důležitý typ objektu v algebře.
Například a jsou prvky a pokud je spolu vynásobíme, dostaneme což při dělení číslem dává zbytek Někdy to vyjadřujeme následovně.
Můžeme ale také jednoduše napsat za předpokladu, že bylo jasně řečeno, že pracujeme v jen abychom notaci co nejvíce zjednodušili.
Jako příklad zde jsou tabulky sčítání a násobení pro
Mezi prvky jsou speciální ty prvky které splňují Množina obsahující tyto prvky se často označuje hvězdičkou, takto.
Pokud zaměříme pozornost na operaci násobení, množina 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 a opakovaně násobíme samo sebou, vždy nakonec dostaneme číslo
Jako první příklad vezměme Platí, že protože a pokud vynásobíme samo sebou, dostaneme jak potvrzuje tabulka výše.
Jako druhý příklad vezměme Pokud projdeme čísla od do ta, která mají GCD rovný s číslem jsou následující.
Pro každý z těchto prvků je možné umocnit toto číslo na kladné celé číslo a dostat Zde jsou nejmenší mocniny, pro které to funguje:
Přirozeně pracujeme v 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.
Alternativně, v notaci, kterou jsme právě zavedli výše, je nám dáno a hledáme nejmenší kladné celé číslo takové, že Toto číslo se nazývá řád prvku modulo
Pro spojení problému nalezení řádu s odhadem fáze se zamysleme nad operací definovanou na systému, jehož klasické stavy odpovídají kde násobíme pevným prvkem
Pro upřesnění, násobení provádíme v takže je implicitní, že uvnitř ketu na pravé straně rovnice bereme součin modulo
Například pokud vezmeme a pak působení na standardní bázi je následující.
Toto je unitární operace za předpokladu, že přeuspořádává prvky standardní báze 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 prvku modulo a uvědomit si, že inverze je
Existuje i jiný způsob, jak přemýšlet o inverzi, který nevyžaduje žádnou znalost (které koneckonců teprve chceme vypočítat). Pro každý prvek vždy existuje jedinečný prvek který splňuje Tento prvek označujeme a lze ho efektivně spočítat; rozšíření Euklidova algoritmu pro GCD to provede s náklady kvadratickými v A tedy
Operace 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 za předpokladu, že Jak jsme právě ukázali, tento předpoklad nám říká, že je unitární.
Existuje vlastních hodnot 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
Číslo je řád modulo zde i ve zbytku celé lekce. Vlastní hodnota přiřazená tomuto vlastnímu vektoru je protože se nezmění, když násobíme číslem
To se děje proto, že takže každý stav standardní báze se posune na pro a se posune zpět na Neformálně řečeno, je to jako bychom pomalu míchali ale ten je už úplně promíchaný, takže se nic nezmění.
Zde je další příklad vlastního vektoru Tento je v kontextu nalezení řádu a odhadu fáze zajímavější.
Alternativně můžeme tento vektor zapsat pomocí sumy následovně.
Zde vidíme, jak se přirozeně objevuje komplexní číslo díky způsobu, jakým funguje násobení číslem modulo Tentokrát je odpovídající vlastní hodnota Abychom to viděli, můžeme nejprve provést následující výpočet.
Potom, protože a vidíme, že
takže
Stejným postupem můžeme identifikovat další páry vlastní vektor/vlastní hodnota pro Pro libovolnou volbu platí, že
je vlastní vektor jehož odpovídající vlastní hodnota je
Existují i další vlastní vektory ale nemusíme se jimi zabývat — zaměříme se výhradně na vlastní vektory které jsme právě identifikovali.
Nalezení řádu pomocí odhadu fáze
K vyřešení problému nalezení řádu pro danou volbu můžeme aplikovat proceduru odhadu fáze na operaci
K tomu potřebujeme efektivně implementovat kvantovým obvodem nejen ale také 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í Přirozeně, protože pracujeme s modelem kvantových obvodů, budeme k zakódování čísel mezi a používat binární zápis. Největší číslo, které potřebujeme zakódovat, je takže počet bitů, které potřebujeme, je
Například pokud máme Takto vypadá zakódování prvků jako binárních řetězců délky
A nyní přesná definice toho, jak je definováno jako -qubitová operace.
Jde o to, že ačkoli nás zajímá pouze to, jak funguje pro musíme specifikovat, jak funguje pro zbývajících stavů standardní báze — a musíme to udělat způsobem, který nám stále dá unitární operaci. Definování 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ý obvod, který provádí pro libovolnou volbu s náklady Zde je jeden způsob, jak to lze udělat.
-
Sestav obvod pro provedení operace
kde
pomocí metody popsané v předchozí lekci. Tím získáme obvod o velikosti
-
Prohoď dva -qubitové systémy pomocí swap hradel pro individuální prohození qubitů.
-
Podobně jako v prvním kroku sestav obvod pro operaci
kde je inverze v
Inicializací spodních qubitů a složením tří kroků získáme tuto transformaci:
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 obvody pro odhad fáze. Celkové náklady získaného obvodu jsou
Pro provedení a tak dále můžeme použít přesně stejnou metodu, jen nahradíme za a tak dále jako prvky To znamená, že pro jakoukoli mocninu kterou zvolíme, můžeme vytvořit obvod pro nikoli opakováním obvodu pro celkem -krát, ale místo toho vypočteme a poté použijeme obvod pro
Výpočet mocnin 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 o základu konkrétně a tyto mocniny můžeme získat iterativním umocňováním na druhou krát. Každé umocnění na druhou lze provést booleovským obvodem o velikosti
V podstatě zde efektivně přenášíme problém iterování až krát na efektivní klasický výpočet. A je to šťastná okolnost, že je to možné! Pro libovolnou volbu kvantového obvodu 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ů
Ř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 s použitím vlastního vektoru 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 odpovídající vlastnímu vektoru je
To znamená, pro Takže pokud spustíme proceduru odhadu fáze na s použitím vlastního vektoru získáme aproximaci Výpočtem převrácené hodnoty budeme schopni zjistit — za předpokladu, že naše aproximace je dostatečně dobrá.
Podrobněji, když spustíme proceduru odhadu fáze s řídicími qubity, získáme číslo Poté vezmeme jako odhad pro což je v našem případě Abychom z této aproximace zjistili, co je přirozená věc je vypočítat převrácenou hodnotu naší aproximace a zaokrouhlit na nejbližší celé číslo.
Například předpokládejme, že a provedeme odhad fáze na s vlastním vektorem s použitím řídicích bitů. Nejlepší -bitová aproximace je a máme poměrně dobrou šanci (v tomto případě asi ) získat z odhadu fáze výsledek Máme
a zaokrouhlení na nejbližší celé číslo dá což je správná odpověď.
Na druhou stranu, pokud nepoužijeme dostatečnou přesnost, nemusíme dostat správnou odpověď. Například pokud vezmeme řídicí qubity v odhadu fáze, můžeme získat nejlepší -bitovou aproximaci což je Výpočet převrácené hodnoty dá
a zaokrouhlení na nejbližší celé číslo dá nesprávnou odpověď
Takže kolik přesnosti potřebujeme, abychom dostali správnou odpověď? Víme, že řád je celé číslo, a intuitivně řečeno potřebujeme dostatečnou přesnost, abychom rozlišili od blízkých možností, včetně a Nejbližší číslo k kterým se musíme zabývat, je a vzdálenost mezi těmito dvěma čísly je
Takže pokud se chceme ujistit, že nezaměníme za stačí použít dostatečnou přesnost, aby nejlepší aproximace k byla blíže k než k Pokud použijeme dostatečnou přesnost tak, aby
tedy aby chyba byla menší než polovina vzdálenosti mezi a pak bude blíže k než k jakékoli jiné možnosti, včetně a
Můžeme si to ověřit následovně. Předpokládejme, že
pro splňující
Když vezmeme převrácenou hodnotu, dostaneme
Maximalizací v čitateli a minimalizací ve jmenovateli můžeme ohraničit, jak daleko jsme od následovně.
Jsme méně než od takže jak se očekávalo, dostaneme při zaokrouhlení.
Bohužel, protože zatím nevíme, jaké je, nemůžeme ho použít k tomu, abychom zjistili, kolik přesnosti potřebujeme. Co můžeme udělat místo toho, je využít skutečnost, že musí být menší než abychom zajistili dostatečnou přesnost. Konkrétně, pokud použijeme dostatečnou přesnost, aby nejlepší aproximace k splňovala
pak budeme mít dostatečnou přesnost k správnému určení při výpočtu převrácené hodnoty. Volba zajistí, že máme vysokou šanci získat odhad s touto přesností pomocí dříve popsané metody. (Volba je dostatečná, pokud nám vyhovuje dolní mez na pravděpodobnost úspěchu.)
Obecné řešení
Jak jsme právě viděli, pokud máme vlastní vektor operace můžeme zjistit pomocí odhadu fáze, pokud použijeme dostatek řídicích qubitů k dosažení dostatečné přesnosti. Bohužel není snadné získat vlastní vektor takže musíme přijít na to, jak postupovat.
Předpokládejme na chvíli, že postupujeme stejně jako výše, ale s vlastním vektorem namísto pro libovolnou volbu o které chceme uvažovat. Výsledek, který z procedury odhadu fáze získáme, bude aproximace
Za předpokladu, že neznáme ani ani to nám může, ale nemusí umožnit identifikovat Například pokud dostaneme aproximaci k což nám bohužel nic neřekne. To je však neobvyklý případ; pro jiné hodnoty se budeme schopni o alespoň něco dozvědět.
Můžeme použít algoritmus známý jako algoritmus řetězových zlomků k převedení naší aproximace na blízké zlomky — včetně pokud je aproximace dostatečně dobrá. Algoritmus řetězových zlomků zde nebudeme vysvětlovat. Místo toho uvádíme tvrzení známého faktu o tomto algoritmu.
Pokud máme velmi přesnou aproximaci k a spustíme algoritmus řetězových zlomků pro a dostaneme a jak jsou popsány ve faktu. Analýza tohoto faktu nám umožňuje usoudit, že
Všimni si zejména, že se nemusíme nutně dozvědět a dozvíme se pouze v základním tvaru.
Například, jak jsme si již všimli, z se nic nedozvíme. Ale to je jediná hodnota kde k tomu dochází. Když je nenulové, může mít společné dělitele s ale číslo které získáme z algoritmu řetězových zlomků, musí přinejmenším dělit Není to zdaleka zřejmé, ale je pravda, že pokud máme schopnost zjistit a pro kde je zvoleno rovnoměrně náhodně, pak s velkou pravděpodobností dokážeme obnovit po pouhých několika vzorcích. Konkrétně, pokud náš odhad pro bude nejmenší společný násobek všech hodnot jmenovatele , které pozorujeme, budeme mít pravdu s vysokou pravděpodobností. Intuitivně řečeno, některé hodnoty nejsou dobré, protože sdílejí společné dělitele s a tyto společné dělitele jsou před námi skryty, když zjistíme a Ale náhodné volby pravděpodobně nebudou dlouho skrývat dělitele a pravděpodobnost, že neuhodneme správně pomocí nejmenšího společného násobku pozorovaných jmenovatelů, klesá exponenciálně s počtem vzorků.
Zbývá se zabývat otázkou, jak získáme vlastní vektor operátoru , na kterém bychom spustili proceduru odhadu fáze. Jak se ukazuje, ve skutečnosti je nepotřebujeme vytvářet!
Místo toho spustíme proceduru odhadu fáze na stavu čímž myslíme -bitové binární kódování čísla namísto vlastního vektoru operátoru Dosud jsme mluvili pouze o spouštění procedury odhadu fáze na konkrétním vlastním vektoru, ale nic nám nebrání spustit proceduru na vstupním stavu, který není vlastním vektorem a přesně to zde děláme se stavem (Toto není vlastní vektor , pokud což není volba, která by nás zajímala.)
Důvod pro volbu stavu namísto vlastního vektoru je ten, že platí následující rovnice.
Jeden způsob, jak tuto rovnici ověřit, je porovnat skalární součiny obou stran s každým stavem standardní báze, přičemž k vyhodnocení výsledků pro pravou stranu použijeme vzorce zmíněné dříve v lekci. V důsledku toho získáme přesně stejné výsledky měření, jako kdybychom zvolili rovnoměrně náhodně a použili jako vlastní vektor.
Podrobněji si představ, že spustíme proceduru odhadu fáze se stavem namísto jednoho z vlastních vektorů Po provedení inverzní kvantové Fourierovy transformace nám to zanechá stav
kde
Vektor reprezentuje stav horních qubitů po provedení inverze kvantové Fourierovy transformace.
Takže díky tomu, že je ortonormální množina, zjistíme, že měření horních qubitů dává aproximaci hodnoty , kde je zvoleno rovnoměrně náhodně. Jak jsme již diskutovali, to nám umožňuje zjistit s vysokou mírou jistoty po několika nezávislých bězích, což byl náš cíl.
Celková cena
Cena implementace každé řízené unitární operace je Řízených unitárních operací je a máme takže celková cena řízených unitárních operací je Kromě toho máme Hadamardových hradel (které přispívají k ceně) a inverzní kvantová Fourierova transformace přispívá k ceně. Cena řízených unitárních operací tedy dominuje ceně celé procedury — která je tedy
Kromě samotného kvantového obvodu je třeba provést několik klasických výpočtů. To zahrnuje výpočet mocnin v pro které jsou potřeba k vytvoření řízených unitárních hradel, a také algoritmus řetězových zlomků, který převádí aproximace na zlomky. Tyto výpočty mohou být provedeny booleovskými obvody s celkovou cenou
Jako obvykle lze všechny tyto odhady zlepšit pomocí asymptoticky rychlých algoritmů; tyto odhady předpokládají, že používáme standardní algoritmy pro základní aritmetické operace.
Faktorizace pomocí nalezení řádu
Úplně poslední věc, kterou musíme probrat, je to, jak řešení problému nalezení řádu pomáhá při faktorizaci. Tato část je čistě klasická — nemá nic specificky společného s kvantovým počítáním.
Zde je základní myšlenka. Chceme faktorizovat číslo a můžeme to udělat rekurzivně. Konkrétně se můžeme zaměřit na úlohu rozštěpení což znamená nalezení libovolných dvou celých čísel , pro která To není možné, pokud je prvočíslo, ale můžeme efektivně otestovat, zda je prvočíslo, pomocí algoritmu pro testování prvočíselnosti, a pokud není prvočíslo, pokusíme se ho rozštěpit. Jakmile rozštěpíme, můžeme jednoduše rekurzivně pokračovat s a , dokud nebudou všechny naše faktory prvočísla a nezískáme rozklad na prvočísla.
Rozštěpení sudých čísel je snadné: jednoduše vypíšeme a
Je také snadné rozštěpit dokonalé mocniny, tedy čísla tvaru pro celá čísla jednoduše tak, že aproximujeme odmocniny a tak dále, a zkontrolujeme blízká celá čísla jako kandidáty na Nemusíme jít dále než kroků v této posloupnosti, protože v tom bodě odmocnina klesne pod a neodhalí další kandidáty.
Je dobré, že obě tyto věci zvládneme, protože nalezení řádu nám nepomůže faktorizovat sudá čísla ani prvočíselné mocniny, kde číslo je prvočíslo. Pokud je však liché a není prvočíselnou mocninou, nalezení řádu nám umožní rozštěpit.
Běh tohoto algoritmu nemusí nalézt dělitele Konkrétně k tomu dochází ve dvou situacích:
- Řád prvku modulo je lichý.
- Řád prvku modulo je sudý a
Pomocí základní teorie čísel lze dokázat, že pro náhodnou volbu s pravděpodobností alespoň nenastane ani jedna z těchto událostí. Ve skutečnosti je pravděpodobnost, že nastane některá z těchto událostí, nejvýše pro rovné počtu různých prvočíselných dělitelů a proto je nutný předpoklad, že není prvočíselná mocnina. (Pro platnost tohoto faktu je rovněž vyžadován předpoklad, že je liché.)
To znamená, že každý běh má alespoň 50% šanci rozštěpit Proto, pokud spustíme algoritmus -krát a pokaždé náhodně zvolíme , podaří se nám rozštěpit s pravděpodobností alespoň
Základní myšlenka algoritmu je následující. Pokud máme volbu , pro kterou je řád prvku modulo sudý, pak je celé číslo a můžeme uvažovat čísla
Pomocí vzorce dojdeme k závěru, že
Nyní víme, že z definice řádu — což je jiný způsob, jak říci, že beze zbytku dělí To znamená, že beze zbytku dělí součin
Aby to platilo, všechny prvočíselné dělitele musí být také prvočíselnými děliteli nebo (nebo obou) — a pro náhodnou volbu se ukazuje, že je nepravděpodobné, aby všechny prvočíselné dělitele dělily jeden z členů a žádný nedělil druhý. V opačném případě, pokud některé z prvočíselných dělitelů dělí první člen a některé dělí druhý člen, budeme schopni nalézt netriviální dělitel výpočtem GCD s prvním členem.