Wybór liczby iteracji
Ustaliliśmy, że wektor stanu rejestru w algorytmie Grovera pozostaje w dwuwymiarowej podprzestrzeni rozpiętej przez i , gdy tylko wykonany zostanie krok inicjalizacji.
Celem jest znalezienie elementu i cel ten zostanie osiągnięty, jeśli uda się nam uzyskać stan — bowiem jeśli zmierzymy ten stan, mamy gwarancję uzyskania wyniku pomiaru Ponieważ stan po iteracjach w kroku 2 wynosi
powinniśmy wybrać tak, aby
był jak najbliższy pod względem wartości bezwzględnej, aby zmaksymalizować prawdopodobieństwo uzyskania z pomiaru. Dla dowolnego kąta wartość oscyluje wraz ze wzrostem , choć niekoniecznie w sposób okresowy — nie ma gwarancji, że kiedykolwiek uzyskamy tę samą wartość dwukrotnie.
Oczywiście, oprócz tego, że chcemy, aby prawdopodobieństwo uzyskania elementu z pomiaru było duże, chcemy też wybrać tak małe, jak to możliwe, ponieważ zastosowań operacji wymaga zapytań (query) do funkcji Ponieważ chcemy, aby był bliski pod względem wartości bezwzględnej, naturalnym sposobem na to jest wybranie tak, aby
Rozwiązując ze względu na otrzymujemy
Oczywiście musi być liczbą całkowitą, więc niekoniecznie uda się nam trafić dokładnie w tę wartość — możemy jednak wziąć najbliższą liczbę całkowitą do tej wartości, czyli
To jest zalecana liczba iteracji algorytmu Grovera. W miarę postępu analizy zobaczymy, że bliskość tej liczby całkowitej do wartości docelowej naturalnie wpływa na wydajność algorytmu.
(Na marginesie: jeśli wartość docelowa wypada dokładnie w połowie między dwiema liczbami całkowitymi, to powyższy wzór na odpowiada zaokrągleniu w górę. Można alternatywnie zaokrąglić w dół, co ma sens, ponieważ oznacza o jedno zapytanie (query) mniej — ale to kwestia drugorzędna i nieistotna dla celów tej lekcji.)
Przypominając, że wartość kąta wyraża się wzorem
widzimy, że zalecana liczba iteracji zależy od liczby ciągów w Stanowi to wyzwanie, gdy nie wiemy, ile mamy rozwiązań, co omówimy później.
Unikatowe przeszukiwanie
Najpierw skupmy się na sytuacji, w której istnieje jeden ciąg taki, że Inaczej mówiąc, rozważamy instancję problemu Unique search. W tym przypadku mamy
co można wygodnie przybliżyć jako
gdy jest duże. Jeśli podstawimy do wyrażenia
otrzymujemy
Przypominając, że jest nie tylko liczbą wykonań operacji , lecz także liczbą zapytań (query) do funkcji wymaganych przez algorytm, widzimy, że jesteśmy na dobrej drodze do uzyskania algorytmu wymagającego zapytań.
Teraz zbadamy, jak dobrze działa zalecany wybór . Prawdopodobieństwo, że końcowy pomiar da unikatowe rozwiązanie, można wyrazić wprost jako
Pierwszy argument, odnosi się do liczby elementów, po których przeszukujemy, a drugi argument, równy w tym przypadku, odnosi się do liczby rozwiązań. Nieco dalej użyjemy tego samego zapisu w sposób ogólniejszy, gdy istnieje wiele rozwiązań.
Oto tabela prawdopodobieństw sukcesu dla rosnących wartości
Zauważ, że te prawdopodobieństwa nie są ściśle rosnące. W szczególności mamy ciekawą anomalię dla gdzie z pewnością uzyskujemy rozwiązanie. Można jednak udowodnić w ogólności, że
dla wszystkich a zatem prawdopodobieństwo sukcesu dąży do w granicy, gdy rośnie, co zdają się sugerować powyższe wartości. To dobra wiadomość!
Zauważ jednak, że nawet słabe ograniczenie dowodzi użyteczności algorytmu Grovera. Dla jakiegokolwiek wyniku pomiaru uzyskanego po uruchomieniu procedury zawsze możemy sprawdzić, czy , używając jednego zapytania (query) do A jeśli nie uda nam się uzyskać unikatowego ciągu , dla którego , z prawdopodobieństwem co najwyżej przy jednokrotnym uruchomieniu procedury, to po niezależnych uruchomieniach nie uda nam się uzyskać tego unikatowego ciągu z prawdopodobieństwem co najwyżej To znaczy, używając zapytań (query) do uzyskamy unikatowe rozwiązanie z prawdopodobieństwem co najmniej Stosując lepsze ograniczenie , okazuje się, że prawdopodobieństwo znalezienia tą metodą wynosi faktycznie co najmniej
Multiple solutions
Wraz ze zmianą liczby elementów w zmienia się też kąt co może mieć istotny wpływ na prawdopodobieństwo sukcesu algorytmu. Dla zwięzłości zapiszmy oznaczając w ten sposób liczbę rozwiązań, i tak jak wcześniej założymy, że
Jako motywujący przykład wyobraź sobie, że mamy rozwiązania zamiast jednego, jak rozważaliśmy powyżej. Oznacza to, że
co jest w przybliżeniu dwukrotnie większym kątem niż w przypadku dla dużych Załóżmy, że nie wiemy nic lepszego i wybieramy tę samą wartość co w przypadku jedynego rozwiązania:
Efekt będzie katastrofalny, jak pokazuje poniższa tabela prawdopodobieństw.
Tym razem prawdopodobieństwo sukcesu dąży do gdy dąży do nieskończoności. Dzieje się tak dlatego, że efektywnie obracamy się dwa razy szybciej niż w przypadku jedynego rozwiązania, więc przelatujemy obok celu i lądujemy w pobliżu
Jednak jeśli zamiast tego użyjemy zalecanego wyboru którym jest
dla
to wyniki będą lepsze. Mówiąc dokładniej, ten wybór prowadzi do sukcesu z wysokim prawdopodobieństwem.
Uogólniając to, co zostało stwierdzone wcześniej, można udowodnić, że
gdzie używamy wcześniej zasugerowanego oznaczenia: oznacza prawdopodobieństwo, że algorytm Grovera wykonany przez iteracji ujawnia rozwiązanie, gdy łącznie jest rozwiązań spośród możliwości.
To dolne ograniczenie na prawdopodobieństwo sukcesu jest nieco osobliwe — większa liczba rozwiązań implikuje gorsze dolne ograniczenie — ale przy założeniu, że jest znacząco mniejsze od mimo wszystko wnioskujemy, że prawdopodobieństwo sukcesu jest rozsądnie wysokie. Tak jak wcześniej, sam fakt, że jest rozsądnie duże, implikuje użyteczność algorytmu.
Zachodzi też
To dolne ograniczenie opisuje prawdopodobieństwo, że losowo wybrany ciąg jest rozwiązaniem — zatem algorytm Grovera zawsze radzi sobie co najmniej tak dobrze jak losowe zgadywanie. (W rzeczywistości, gdy algorytm Grovera jest losowym zgadywaniem.)
Przyjrzyjmy się teraz liczbie iteracji (a co za tym idzie liczbie zapytań)
dla
Dla każdego zachodzi a zatem
Wynika z tego, że
Przekłada się to na oszczędność liczby zapytań wraz ze wzrostem W szczególności wymagana liczba zapytań wynosi
Nieznana liczba rozwiązań
Jeśli liczba rozwiązań jest nieznana, wymagane jest inne podejście — w tej sytuacji nie mamy wiedzy o , która mogłaby pokierować wyborem Istnieje w rzeczywistości kilka różnych podejść.
Jedno proste podejście polega na wyborze
jednostajnie losowo. Wybór w ten sposób zawsze daje rozwiązanie (przy założeniu, że ono istnieje) z prawdopodobieństwem większym niż 40%, choć nie jest to oczywiste i wymaga analizy, której tutaj nie będziemy przeprowadzać. Ma to jednak sens, zwłaszcza gdy pomyślimy o geometrycznym obrazku: losowe obracanie stanu o pewną liczbę razy jest podobne do wyboru losowego wektora jednostkowego w przestrzeni rozpiętej przez i dla którego jest bardzo prawdopodobne, że współczynnik przy będzie odpowiednio duży. Powtarzając tę procedurę i sprawdzając wynik w ten sam sposób, co opisano wcześniej, prawdopodobieństwo znalezienia rozwiązania można zbliżyć bardzo blisko do
Istnieje też bardziej wyrafinowana metoda, która — gdy rozwiązanie istnieje — znajdzie je, wykonując zapytań, nawet gdy liczba rozwiązań nie jest znana, i wymaga zapytań, aby stwierdzić brak rozwiązań w przypadku
Podstawowy pomysł polega na iteracyjnym wyborze jednostajnie losowo ze zbioru dla rosnących wartości W szczególności możemy zacząć od i zwiększać go wykładniczo, zawsze kończąc proces natychmiast po znalezieniu rozwiązania oraz ograniczając tak, by nie marnować zapytań, gdy rozwiązania nie ma. Proces ten wykorzystuje fakt, że im więcej rozwiązań istnieje, tym mniej zapytań jest potrzebnych. Konieczna jest jednak pewna ostrożność, aby zbalansować tempo wzrostu z prawdopodobieństwem sukcesu dla każdej iteracji. (Działające podejście to np. co potwierdza odpowiednia analiza. Podwajanie jednak nie działa — okazuje się, że to zbyt szybki wzrost.)
Przypadki trywialne
Przez całą przeprowadzoną właśnie analizę zakładaliśmy, że liczba rozwiązań jest niezerowa. Rzeczywiście, odwołując się do wektorów
milcząco zakładaliśmy, że i są oba niepuste. Poniżej krótko rozważymy, co się dzieje, gdy jeden z tych zbiorów jest pusty.
Zanim zagłębimy się w analizę, zauważmy to, co oczywiste: jeśli każdy ciąg jest rozwiązaniem, to przy pomiarze zobaczymy rozwiązanie; a gdy nie ma żadnych rozwiązań, nie zobaczymy żadnego. W pewnym sensie nie ma potrzeby wchodzić głębiej.
Możemy jednak szybko zweryfikować matematykę dla tych trywialnych przypadków. Sytuacja, w której jeden ze zbiorów i jest pusty, zachodzi wtedy, gdy jest stałe; jest pusty, gdy dla każdego natomiast jest pusty, gdy dla każdego Oznacza to, że
a zatem
Zatem, niezależnie od liczby iteracji , które wykonujemy w tych przypadkach, pomiary zawsze ujawnią losowy ciąg