Algoritmul lui Shor
Acum ne vom îndrepta atenția spre problema factorizării numerelor întregi și vom vedea cum poate fi rezolvată eficient pe un calculator cuantic folosind estimarea de fază. Algoritmul pe care îl vom obține este algoritmul lui Shor pentru factorizarea numerelor întregi. Shor nu și-a descris algoritmul în mod specific în termenii estimării de fază, dar aceasta este o modalitate naturală și intuitivă de a explica cum funcționează.
Vom începe prin a discuta o problemă intermediară cunoscută drept problema găsirii ordinului și vom vedea cum estimarea de fază oferă o soluție pentru această problemă. Vom vedea apoi cum o soluție eficientă la problema găsirii ordinului ne oferă o soluție eficientă la problema factorizării numerelor întregi. (Când o soluție la o problemă oferă o soluție la altă problemă în acest mod, spunem că a doua problemă se reduce la prima — astfel, în acest caz reducem factorizarea numerelor întregi la găsirea ordinului.) Această a doua parte a algoritmului lui Shor nu folosește deloc calculul cuantic; este complet clasică. Calculul cuantic este necesar doar pentru a rezolva găsirea ordinului.
Problema găsirii ordinului
Câteva noțiuni de bază din teoria numerelor
Pentru a explica problema găsirii ordinului și cum poate fi rezolvată folosind estimarea de fază, va fi util să începem cu câteva concepte de bază din teoria numerelor și să introducem pe parcurs o notație convenabilă.
Pentru început, pentru orice număr întreg pozitiv definim mulțimea astfel.
De exemplu, și așa mai departe.
Acestea sunt mulțimi de numere, dar le putem privi ca mai mult decât simple mulțimi. În particular, putem gândi despre operații aritmetice în cum ar fi adunarea și înmulțirea — și dacă suntem de acord să luăm mereu rezultatele modulo (adică să împărțim la și să luăm restul ca rezultat), vom rămâne mereu în această mulțime atunci când efectuăm aceste operații. Cele două operații specifice de adunare și înmulțire, ambele luate modulo transformă într-un inel, care este un tip de obiect fundamental important în algebră.
De exemplu, și sunt elemente ale lui iar dacă le înmulțim obținem care lasă un rest de la împărțirea cu Uneori exprimăm aceasta astfel.
Dar putem scrie și simplu cu condiția să fie clar că lucrăm în doar pentru a menține notația cât mai simplă.
Ca exemplu, iată tabelele de adunare și înmulțire pentru
Dintre cele elemente ale lui elementele care satisfac sunt speciale. Adesea, mulțimea ce conține aceste elemente este notată cu un asterisc astfel.
Dacă ne concentrăm atenția pe operația de înmulțire, mulțimea formează un grup — mai specific un grup abelian — care este un alt tip important de obiect în algebră. Este un fapt de bază despre aceste mulțimi (și despre grupurile finite în general) că, dacă alegem orice element și îl înmulțim repetat cu el însuși, vom obține întotdeauna în cele din urmă numărul
Ca prim exemplu, să luăm Avem că deoarece iar dacă înmulțim cu el însuși obținem după cum confirmă tabelul de mai sus.
Ca al doilea exemplu, să luăm Dacă parcurgem numerele de la la cele care au CMMDC egal cu față de sunt următoarele.
Pentru fiecare dintre aceste elemente, este posibil să ridicăm acel număr la o putere întreagă pozitivă pentru a obține Iată cele mai mici puteri pentru care acest lucru funcționează:
Firește, lucrăm în pentru toate aceste ecuații, lucru pe care nu ne-am mai obosit să îl scriem — îl considerăm implicit pentru a evita aglomerarea notației. Vom continua să procedăm astfel pe tot parcursul restului lecției.
Enunțul problemei și legătura cu estimarea fazei
Acum putem formula problema găsirii ordinului.
Alternativ, în termenii notației pe care tocmai am introdus-o mai sus, ni se dă și căutăm cel mai mic număr întreg pozitiv astfel încât Acest număr se numește ordinul lui modulo
Pentru a conecta problema găsirii ordinului cu estimarea fazei, să ne gândim la operația definită pe un sistem ale cărui stări clasice corespund lui în care înmulțim cu un element fix
Precizăm că înmulțirea se face în deci este implicit că luăm produsul modulo în interiorul ket-ului din membrul drept al ecuației.
De exemplu, dacă luăm și atunci acțiunea lui asupra bazei standard este următoarea.
Aceasta este o operație unitară cu condiția că ea permută elementele bazei standard deci ca matrice este o matrice de permutare. Din definiția sa reiese că această operație este deterministă, iar un mod simplu de a vedea că este inversabilă este să te gândești la ordinul al lui modulo și să observi că inversa lui este
Există și un alt mod de a gândi inversa, care nu necesită cunoașterea lui (care, la urma urmei, este ceea ce încercăm să calculăm). Pentru orice element există întotdeauna un element unic care satisface Notăm acest element prin și el poate fi calculat eficient; o extensie a algoritmului lui Euclid pentru cel mai mare divizor comun o face cu un cost pătratic în Și astfel
Prin urmare, operația este atât deterministă, cât și inversabilă. Aceasta implică faptul că este descrisă de o matrice de permutare și, prin urmare, este unitară.
Acum să ne gândim la vectorii proprii și valorile proprii ale operației presupunând că Cum tocmai am argumentat, această presupunere ne spune că este unitară.
are valori proprii, posibil incluzând aceeași valoare proprie repetată de mai multe ori, și în general există o anumită libertate în alegerea vectorilor proprii corespunzători — dar nu va trebui să ne facem griji în legătură cu toate posibilitățile. Să începem simplu și să identificăm doar un vector propriu al lui
Numărul este ordinul lui modulo aici și pe tot parcursul restului lecției. Valoarea proprie asociată acestui vector propriu este deoarece acesta nu se modifică când înmulțim cu
Aceasta se întâmplă deoarece astfel încât fiecare stare a bazei standard este deplasată la pentru iar este deplasată înapoi la Informal vorbind, e ca și cum am amesteca ușor dar acesta este deja complet amestecat, deci nimic nu se schimbă.
Iată un alt exemplu de vector propriu al lui Acesta este mai interesant în contextul găsirii ordinului și al estimării fazei.
Alternativ, putem scrie acest vector folosind o sumă astfel.
Observăm că numărul complex apare în mod natural, datorită modului în care funcționează înmulțirea cu modulo De această dată valoarea proprie corespunzătoare este Pentru a vedea aceasta, putem calcula mai întâi astfel.
Apoi, deoarece și observăm că
deci
Folosind același raționament, putem identifica perechi suplimentare vector propriu/valoare proprie pentru Pentru orice alegere avem că
este un vector propriu al lui a cărui valoare proprie corespunzătoare este
Există și alți vectori proprii ai lui dar nu trebuie să ne preocupăm de ei — ne vom concentra exclusiv pe vectorii proprii pe care tocmai i-am identificat.
Găsirea ordinului prin estimarea fazei
Pentru a rezolva problema găsirii ordinului pentru o alegere dată de putem aplica procedura de estimare a fazei operației
Pentru a face asta, trebuie să implementăm eficient cu un circuit cuantic nu doar ci și și așa mai departe, mergând atât de departe cât este necesar pentru a obține o estimare suficient de precisă din procedura de estimare a fazei. Aici vom explica cum poate fi realizat acest lucru, iar mai târziu vom determina exact câtă precizie este necesară.
Să începem cu operația în sine. În mod natural, deoarece lucrăm cu modelul Circuit cuantic, vom folosi notația binară pentru a codifica numerele dintre și Cel mai mare număr pe care trebuie să-l codificăm este deci numărul de biți de care avem nevoie este
De exemplu, dacă avem Iată cum arată codificarea elementelor lui ca șiruri binare de lungime
Și acum, iată o definiție precisă a felului în care este definit ca o operație pe Qubiți.
Ideea este că, deși ne interesează doar cum funcționează pentru trebuie totuși să specificăm cum funcționează pentru celelalte stări din baza standard — și trebuie să facem asta într-un mod care să ne ofere în continuare o operație unitară. Definind astfel încât să nu facă nimic pentru stările rămase din baza standard, se îndeplinește această cerință.
Folosind algoritmii pentru înmulțirea și împărțirea numerelor întregi discutați în lecția anterioară, împreună cu metodologia pentru implementări reversibile și fără reziduuri ale acestora, putem construi un circuit cuantic care realizează pentru orice alegere de la cost Iată o modalitate prin care aceasta poate fi realizată.
-
Construiești un circuit pentru a realiza operația
unde
folosind metoda descrisă în lecția anterioară. Aceasta ne oferă un circuit de dimensiune
-
Interschimbi cele două sisteme de Qubiți folosind Gate-uri swap pentru a interschimba Qubiții individual.
-
În mod similar cu primul pas, construiești un circuit pentru operația
unde este inversul lui în
Prin inițializarea celor Qubiți de jos și compunerea celor trei pași, obținem această transformare:
Metoda necesită Qubiți de spațiu de lucru, dar aceștia sunt returnați la starea lor inițializată la final, ceea ce ne permite să folosim aceste circuite pentru estimarea fazei. Costul total al circuitului obținut este
Pentru a realiza și așa mai departe, putem folosi exact aceeași metodă, cu excepția că înlocuim cu și așa mai departe, ca elemente ale lui Adică, pentru orice putere pe care o alegem, putem crea un circuit pentru nu prin iterarea de ori a circuitului pentru ci prin calcularea și apoi folosirea circuitului pentru
Calculul puterilor este problema exponențierii modulare menționată în lecția anterioară. Acest calcul poate fi efectuat clasic, folosind algoritmul de exponențiere modulară menționat în lecția anterioară (adesea numit algoritmul puterii în teoria computațională a numerelor). De fapt, avem nevoie doar de puteri ale lui care sunt puteri ale lui 2, în particular și putem obține aceste puteri ridicând iterativ la pătrat de ori. Fiecare ridicare la pătrat poate fi realizată printr-un circuit boolean de dimensiune
În esență, ceea ce facem efectiv aici este să transferăm problema iterării de până la ori către un calcul clasic eficient. Și este o mare șansă că acest lucru este posibil! Pentru o alegere arbitrară a unui Circuit cuantic în problema estimării fazei, este puțin probabil ca acest lucru să fie posibil — și în acel caz, costul rezultat pentru estimarea fazei crește exponențial în numărul de Qubiți de control
Soluție folosind un eigenvector convenabil
Pentru a înțelege cum putem rezolva problema găsirii ordinului folosind estimarea de fază, să începem prin a presupune că rulăm procedura de estimare a fazei pentru operația folosind eigenvectorul A pune mâna pe acest eigenvector nu este ușor, după cum se dovedește, deci aceasta nu va fi finalul poveștii — dar este util să începem de aici.
Valoarea proprie a lui corespunzătoare eigenvectorului este
Adică, pentru Prin urmare, dacă rulăm procedura de estimare a fazei pentru folosind eigenvectorul vom obține o aproximare a lui Calculând reciproca vom putea afla — cu condiția că aproximarea noastră este suficient de bună.
Mai în detaliu, când rulăm procedura de estimare a fazei folosind Qubiți de control, ceea ce obținem este un număr Luăm apoi ca estimare pentru care este în cazul de față. Pentru a afla ce este din această aproximare, lucrul natural de făcut este să calculăm reciproca aproximării și să rotunjim la cel mai apropiat număr întreg.
De exemplu, să presupunem că și efectuăm estimarea de fază pentru cu eigenvectorul folosind biți de control. Cea mai bună aproximare pe biți a lui este și avem o șansă destul de mare (aproximativ în acest caz) de a obține rezultatul din estimarea de fază. Avem
și rotunjind la cel mai apropiat număr întreg obținem care este răspunsul corect.
Pe de altă parte, dacă nu folosim suficientă precizie, este posibil să nu obținem răspunsul corect. De exemplu, dacă luăm Qubiți de control în estimarea de fază, am putea obține cea mai bună aproximare pe biți a lui care este Calculând reciproca obținem
și rotunjind la cel mai apropiat număr întreg obținem răspunsul incorect
Deci câtă precizie avem nevoie pentru a obține răspunsul corect? Știm că ordinul este un număr întreg și, intuitiv vorbind, avem nevoie de suficientă precizie pentru a distinge de posibilitățile apropiate, inclusiv și Numărul cel mai apropiat de de care trebuie să ne preocupăm este iar distanța dintre aceste două numere este
Deci, dacă vrem să ne asigurăm că nu confundăm cu este suficient să folosim suficientă precizie pentru a garanta că cea mai bună aproximare a lui este mai apropiată de decât de Dacă folosim suficientă precizie astfel încât
astfel că eroarea este mai mică decât jumătatea distanței dintre și atunci va fi mai apropiată de decât de orice altă posibilitate, inclusiv și
Putem verifica dublu aceasta după cum urmează. Să presupunem că
pentru care satisface
Când calculăm reciproca obținem
Maximizând la numărător și minimizând la numitor, putem limita cât de departe suntem de după cum urmează.
Suntem la mai puțin de distanță față de deci după cum era de așteptat vom obține când rotunjim.
Din nefericire, deoarece nu știm încă ce este nu îl putem folosi pentru a determina câtă precizie avem nevoie. Ceea ce putem face în schimb este să folosim faptul că trebuie să fie mai mic decât pentru a ne asigura că folosim suficientă precizie. În particular, dacă folosim suficientă precizie pentru a garanta că cea mai bună aproximare a lui satisface
atunci vom avea suficientă precizie pentru a determina corect când calculăm reciproca. Luând ne asigurăm că avem o șansă mare de a obține o estimare cu această precizie folosind metoda descrisă anterior. (Luând este suficient dacă suntem confortabili cu o limită inferioară de 40% pentru probabilitatea de succes.)
Soluție generală
După cum am văzut, dacă avem eigenvectorul al lui putem afla prin estimarea de fază, atât timp cât folosim suficienți Qubiți de control pentru a face acest lucru cu precizie suficientă. Din nefericire, nu este ușor să punem mâna pe eigenvectorul deci trebuie să găsim o modalitate de a continua.
Să presupunem momentan că procedăm exact ca mai sus, cu excepția că folosim eigenvectorul în locul lui pentru orice alegere a lui la care vrem să ne gândim. Rezultatul pe care îl obținem din procedura de estimare a fazei va fi o aproximare
Lucrând sub ipoteza că nu cunoaștem nici nici aceasta poate sau nu să ne permită identificarea lui De exemplu, dacă vom obține o aproximare a lui ceea ce din nefericire nu ne spune nimic. Acesta este însă un caz neobișnuit; pentru alte valori ale lui vom putea cel puțin afla ceva despre
Putem folosi un algoritm cunoscut sub numele de algoritmul fracțiilor continue pentru a transforma aproximarea noastră în fracții apropiate — inclusiv dacă aproximarea este suficient de bună. Nu vom explica algoritmul fracțiilor continue aici. În schimb, iată o afirmație a unui fapt cunoscut despre acest algoritm.
Dacă avem o aproximare foarte bună a lui și rulăm algoritmul fracțiilor continue pentru și vom obține și așa cum sunt descrise în fapt. O analiză a faptului ne permite să concluzionăm că
Observă în special că nu neapărat aflăm și ci aflăm doar în forma ireductibilă.
De exemplu, și după cum am observat deja, nu vom afla nimic din Dar acesta este singurul valoare a lui pentru care se întâmplă asta. Când este diferit de zero, poate avea factori comuni cu dar numărul pe care îl obținem din algoritmul fracțiilor continue trebuie cel puțin să dividă
Este departe de a fi evident, dar este adevărat că dacă avem capacitatea de a afla și cu pentru ales uniform la întâmplare, atunci cu o probabilitate foarte mare vom putea recupera după doar câteva eșantioane. În particular, dacă estimarea noastră pentru este cel mai mic multiplu comun al tuturor valorilor pentru numitorul pe care le observăm, vom fi corecți cu probabilitate mare. Intuitiv vorbind, unele valori ale lui nu sunt bune pentru că împart factori comuni cu iar acești factori comuni ne sunt ascunși când aflăm și Dar alegerile aleatoare ale lui nu sunt susceptibile să ascundă factorii lui mult timp, iar probabilitatea că nu ghicim corect luând cel mai mic multiplu comun al numitorilor observați scade exponențial în numărul de eșantioane.
Rămâne de abordat problema cum punem mâna pe un eigenvector al lui pe care să rulăm procedura de estimare a fazei. Se dovedește că nu avem nevoie să îi creăm!
Ceea ce vom face în schimb este să rulăm procedura de estimare a fazei pe starea prin care înțelegem codificarea binară pe biți a numărului în locul unui eigenvector al lui Până acum, am vorbit doar despre rularea procedurii de estimare a fazei pe un eigenvector particular, dar nimic nu ne împiedică să rulăm procedura pe o stare de intrare care nu este eigenvector al lui și asta facem aici cu starea (Aceasta nu este un eigenvector al lui dacă ceea ce nu este o alegere care ne va interesa.)
Rațiunea pentru care alegem starea în locul unui eigenvector al lui este că următoarea ecuație este adevărată.
O modalitate de a verifica această ecuație este să comparăm produsele interioare ale celor două membre cu fiecare stare din baza standard, folosind formule menționate anterior în lecție pentru a evalua rezultatele pentru membrul drept. Ca urmare, vom obține exact aceleași rezultate de măsurare ca și cum am fi ales uniform la întâmplare și am fi folosit ca eigenvector.
Mai în detaliu, să ne imaginăm că rulăm procedura de estimare a fazei cu starea în locul unuia dintre eigenvectorii După ce transformata Fourier cuantică inversă este efectuată, aceasta ne lasă cu starea
unde
Vectorul reprezintă starea primilor Qubiți după ce inversa transformatei Fourier cuantice a fost efectuată asupra lor.
Deci, datorită faptului că este o mulțime ortonormată, constatăm că o măsurare a primilor Qubiți produce o aproximare a valorii unde este ales uniform la întâmplare. Așa cum am discutat deja, aceasta ne permite să aflăm cu un grad înalt de încredere după mai multe rulări independente, ceea ce a fost scopul nostru.
Costul total
Costul implementării fiecărui unitar controlat este Există operații unitare controlate, iar deci costul total al operațiilor unitare controlate este În plus, avem Gate-uri Hadamard (care contribuie cu la cost), iar transformata cuantică Fourier inversă contribuie cu la cost. Astfel, costul operațiilor unitare controlate domină costul întregii proceduri — care este, prin urmare,
Pe lângă Circuit-ul cuantic în sine, există câteva calcule clasice care trebuie efectuate pe parcurs. Acestea includ calcularea puterilor în pentru necesare pentru crearea Gate-urilor unitare controlate, precum și algoritmul fracțiilor continue care convertește aproximările lui în fracții. Aceste calcule pot fi efectuate de circuite booleene cu un cost total de
Ca de obicei, toate aceste limite pot fi îmbunătățite folosind algoritmi asimptotic mai rapizi; aceste limite presupun că folosim algoritmi standard pentru operații aritmetice de bază.
Factorizare prin găsirea ordinului
Ultimul lucru pe care trebuie să-l discutăm este modul în care rezolvarea problemei de găsire a ordinului ne ajută să factorizăm. Această parte este complet clasică — nu are nimic specific de-a face cu calculul cuantic.
Iată ideea de bază. Vrem să factorizăm numărul și putem face acest lucru recursiv. Mai precis, ne putem concentra pe sarcina de împărțire a lui adică găsirea a doi întregi pentru care Acest lucru nu este posibil dacă este un număr prim, dar putem testa eficient dacă este prim folosind mai întâi un algoritm de testare a primalității, iar dacă nu este prim vom încerca să-l împărțim. Odată ce împărțim putem pur și simplu recurge pe și până când toți factorii noștri sunt primi și obținem descompunerea în factori primi a lui
Împărțirea numerelor pare este simplă: ieșim cu și
Este, de asemenea, ușor să împărțim puterile perfecte, adică numerele de forma pentru întregi aproximând rădăcinile și așa mai departe, și verificând numerele întregi din apropiere ca suspecți pentru Nu trebuie să mergem mai departe de pași în această secvență, deoarece la acel punct rădăcina scade sub și nu va mai revela candidați suplimentari.
Este bine că putem face ambele lucruri, deoarece găsirea ordinului nu ne va ajuta să factorizăm numerele pare sau puterile prime, unde numărul se întâmplă să fie prim. Dacă este impar și nu este o putere primă, totuși, găsirea ordinului ne permite să împărțim
O rulare a acestui algoritm poate eșua în găsirea unui factor al lui Mai precis, acest lucru se întâmplă în două situații:
- Ordinul lui modulo este impar.
- Ordinul lui modulo este par și
Folosind teoria elementară a numerelor se poate demonstra că, pentru o alegere aleatorie a lui cu probabilitate de cel puțin niciunul dintre aceste evenimente nu se produce. De fapt, probabilitatea ca oricare dintre evenimente să se producă este de cel mult unde este numărul de factori primi distincți ai lui motiv pentru care ipoteza că nu este o putere primă este necesară. (Ipoteza că este impar este, de asemenea, necesară pentru ca acest fapt să fie adevărat.)
Asta înseamnă că fiecare rulare are cel puțin 50% șanse să împartă Prin urmare, dacă rulăm algoritmul de ori, alegând aleatoriu de fiecare dată, vom reuși să împărțim cu probabilitate de cel puțin
Ideea de bază din spatele algoritmului este următoarea. Dacă avem o alegere a lui pentru care ordinul al lui modulo este par, atunci este un întreg și putem considera numerele
Folosind formula concluzionăm că
Acum, știm că prin definiția ordinului — ceea ce este un alt mod de a spune că divide exact Asta înseamnă că divide exact produsul
Pentru ca acest lucru să fie adevărat, toți factorii primi ai lui trebuie să fie și factori primi ai lui sau (sau ai ambilor) — iar pentru o selecție aleatorie a lui se dovedește că este puțin probabil ca toți factorii primi ai lui să dividă unul dintre termeni și niciunul să nu dividă celălalt. Altfel, atâta timp cât unii dintre factorii primi ai lui divid primul termen și unii divid al doilea termen, vom putea găsi un factor netrivial al lui calculând CMMDC cu primul termen.