Alegerea numărului de iterații
Am stabilit că vectorul de stare al registrului în algoritmul lui Grover rămâne în subspatiul bidimensional generat de și după ce pasul de inițializare a fost efectuat.
Scopul este de a găsi un element și acest scop va fi atins dacă putem obține starea — căci dacă măsurăm această stare, garantat obținem un rezultat al măsurătorii Dat fiind că starea lui după iterații la pasul 2 este
ar trebui să alegem astfel încât
să fie cât mai aproape de în valoare absolută, pentru a maximiza probabilitatea de a obține din măsurătoare. Pentru orice unghi valoarea oscilează pe măsură ce crește, deși nu este neapărat periodică — nu există nicio garanție că vom obține vreodată aceeași valoare de două ori.
Desigur, pe lângă faptul că dorim ca probabilitatea de a obține un element din măsurătoare să fie mare, am dori și ca să fie cât mai mic posibil, deoarece aplicări ale operației necesită interogări ale funcției Deoarece urmărim ca să fie aproape de în valoare absolută, o modalitate naturală de a face acest lucru este să alegem astfel încât
Rezolvând pentru obținem
Desigur, trebuie să fie un număr întreg, deci nu vom putea neapărat atinge exact această valoare — dar ceea ce putem face este să luăm cel mai apropiat număr întreg față de această valoare, care este
Acesta este numărul recomandat de iterații pentru algoritmul lui Grover. Pe măsură ce continuăm analiza, vom vedea că apropierea acestui număr întreg față de valoarea țintă afectează în mod natural performanța algoritmului.
(Ca o paranteză, dacă valoarea țintă se află exact la jumătatea distanței dintre două numere întregi, această expresie a lui este ceea ce obținem prin rotunjire în sus. Am putea alterna prin rotunjire în jos, ceea ce are sens deoarece înseamnă o interogare mai puțin — dar acest lucru este secundar și neimportant în scopul lecției.)
Amintind că valoarea unghiului este dată de formula
vedem că numărul recomandat de iterații depinde de numărul de șiruri din Aceasta prezintă o provocare dacă nu știm câte soluții avem, așa cum vom discuta mai târziu.
Căutare unică
Mai întâi, să ne concentrăm pe situația în care există un singur șir astfel încât O altă modalitate de a spune acest lucru este că analizăm o instanță a problemei de căutare unică. În acest caz avem
care poate fi aproximat convenabil ca
când devine mare. Dacă substituim în expresia
obținem
Amintind că nu este doar numărul de ori în care operația este efectuată, ci și numărul de interogări ale funcției necesare algoritmului, vedem că suntem pe cale să obținem un algoritm care necesită interogări.
Acum vom investiga cât de bine funcționează alegerea recomandată a lui . Probabilitatea ca măsurătoarea finală să rezulte în soluția unică poate fi exprimată explicit ca
Primul argument, se referă la numărul de elemente peste care căutăm, iar al doilea argument, care este în acest caz, se referă la numărul de soluții. Puțin mai târziu vom folosi aceeași notație mai general, unde există mai multe soluții.
Iată un tabel al probabilităților de succes pentru valori crescătoare ale lui
Observă că aceste probabilități nu sunt strict crescătoare. În special, avem o anomalie interesantă când unde obținem o soluție cu certitudine. Cu toate acestea, se poate demonstra în general că
pentru toți deci probabilitatea de succes tinde spre în limită pe măsură ce devine mare, așa cum par să sugereze valorile de mai sus. Lucru bun!
Dar observă, totuși, că chiar și o margine slabă precum stabilește utilitatea algoritmului lui Grover. Oricare ar fi rezultatul măsurătorii obținut din rularea procedurii, putem verifica întotdeauna dacă folosind o singură interogare la Și dacă nu reușim să obținem șirul unic pentru care cu probabilitate de cel mult rulând procedura o singură dată, atunci după rulări independente ale procedurii nu vom fi reușit să obținem acest șir unic cu probabilitate de cel mult Adică, folosind interogări la vom obține soluția unică cu probabilitate cel puțin Folosind marginea mai bună se dezvăluie că probabilitatea de a găsi folosind această metodă este de fapt cel puțin
Soluții multiple
Pe măsură ce numărul de elemente din variază, variază și unghiul ceea ce poate influența semnificativ probabilitatea de succes a algoritmului. Pentru simplitate, vom scrie pentru a denota numărul de soluții, și, ca și înainte, vom presupune că
Ca exemplu motivator, să ne imaginăm că avem soluții în loc de o soluție unică, așa cum am considerat mai sus. Asta înseamnă că
care este aproximativ dublul unghiului pe care îl aveam în cazul când este mare. Să presupunem că nu știm mai bine și alegem aceeași valoare pentru ca în situația cu o soluție unică:
Efectul va fi catastrofal, după cum arată următorul tabel de probabilități.
De data aceasta, probabilitatea de succes tinde la pe măsură ce tinde la infinit. Asta se întâmplă deoarece rotim efectiv de două ori mai repede decât am făcut-o când exista o soluție unică, astfel că ajungem să depășim ținta și aterizăm lângă
Totuși, dacă folosim în schimb alegerea recomandată pentru care este
pentru
atunci performanța va fi mai bună. Mai precis, folosirea acestei alegeri pentru duce la succes cu probabilitate ridicată.
Generalizând ce s-a afirmat anterior, se poate demonstra că
unde folosim notația sugerată anterior: denotă probabilitatea ca algoritmul lui Grover rulat pentru iterații să dezvăluie o soluție când există soluții în total din posibilități.
Această margine inferioară a probabilității de succes este oarecum ciudată în sensul că mai multe soluții implică o margine inferioară mai slabă — dar în ipoteza că este semnificativ mai mic decât concluzionăm totuși că probabilitatea de succes este rezonabil de ridicată. Ca și înainte, simplul fapt că este rezonabil de mare implică utilitatea algoritmului.
Se întâmplă, de asemenea, că
Această margine inferioară descrie probabilitatea ca un șir selectat uniform aleator să fie o soluție — deci algoritmul lui Grover se descurcă întotdeauna cel puțin la fel de bine ca ghicitul aleator. (De fapt, când algoritmul lui Grover este ghicit aleator.)
Acum să aruncăm o privire la numărul de iterații (și deci numărul de interogări)
pentru
Pentru orice este adevărat că și deci
Asta implică că
Asta se traduce printr-o economie la numărul de interogări pe măsură ce crește. În particular, numărul de interogări necesar este
Număr necunoscut de soluții
Dacă numărul de soluții este necunoscut, atunci este necesară o abordare diferită, deoarece în această situație nu avem nicio informație despre pentru a ne ghida alegerea lui Există, de fapt, mai multe abordări.
O abordare simplă este să alegem
uniform aleator. Alegând în acest mod, se găsește întotdeauna o soluție (presupunând că există una) cu probabilitate mai mare de 40%, deși acest lucru nu este evident și necesită o analiză care nu va fi inclusă aici. Are, totuși, sens, mai ales când ne gândim la imaginea geometrică: rotirea stării lui de un număr aleator de ori în acest fel nu este diferită de alegerea unui vector unitar aleator în spațiul generat de și pentru care este probabil ca coeficientul lui să fie rezonabil de mare. Repetând această procedură și verificând rezultatul în același mod ca cel descris anterior, probabilitatea de a găsi o soluție poate fi adusă foarte aproape de
Există o metodă rafinată care găsește o soluție când una există folosind interogări, chiar și atunci când numărul de soluții nu este cunoscut, și necesită interogări pentru a determina că nu există soluții când
Ideea de bază este de a alege uniform aleator din mulțimea în mod iterativ, pentru valori crescătoare ale lui În particular, putem începe cu și îl creștem exponențial, terminând întotdeauna procesul imediat ce se găsește o soluție și limitând pentru a nu irosi interogări când nu există o soluție. Procesul valorifică faptul că sunt necesare mai puține interogări când există mai multe soluții. Este necesară totuși o oarecare atenție pentru a echilibra rata de creștere a lui cu probabilitatea de succes pentru fiecare iterație. (De exemplu, funcționează, după cum arată o analiză. Dublarea lui însă, nu funcționează — aceasta se dovedește a fi o creștere prea rapidă.)
Cazurile triviale
Pe parcursul analizei prin care tocmai am trecut, am presupus că numărul de soluții este nenul. Într-adevăr, referindu-ne la vectorii
am presupus implicit că și sunt ambele nevide. Aici vom analiza pe scurt ce se întâmplă când una dintre aceste mulțimi este vidă.
Înainte de a ne apuca de analiză, să observăm evidentul: dacă fiecare șir este o soluție, atunci vom vedea o soluție când măsurăm; și când nu există nicio soluție, nu vom vedea una. Într-un anume sens, nu este nevoie să mergem mai adânc de atât.
Putem, totuși, să verificăm rapid matematica pentru aceste cazuri triviale. Situația în care una dintre și este vidă apare când este constantă; este vidă când pentru orice și este vidă când pentru orice Asta înseamnă că
și deci
Deci, indiferent de numărul de iterații pe care le efectuăm în aceste cazuri, măsurătorile vor dezvălui întotdeauna un șir uniform aleator