Przeszukiwanie nieustrukturyzowane
Podsumowanie
Zaczniemy od opisu problemu, który rozwiązuje algorytm Grovera. Jak zwykle, przez cały czas tej dyskusji będziemy używać jako alfabetu binarnego.
Przypuśćmy, że
jest funkcją ze stringów binarnych długości na bity. Założymy, że możemy tę funkcję obliczać w sposób wydajny, ale poza tym jest ona dowolna i nie możemy polegać na tym, że ma szczególną strukturę czy konkretną implementację odpowiadającą naszym potrzebom.
Algorytm Grovera przeszukuje string taki, że Takie stringi będziemy nazywać rozwiązaniami problemu wyszukiwania. Jeśli istnieje wiele rozwiązań, za poprawny wynik uznaje się dowolne z nich; jeśli zaś nie ma żadnego rozwiązania, poprawna odpowiedź wymaga poinformowania, że rozwiązania nie istnieją.
To zadanie określa się mianem problemu przeszukiwania nieustrukturyzowanego, ponieważ nie możemy zakładać, że ma jakąkolwiek szczególną strukturę, która ułatwiałaby sprawę. Nie przeszukujemy posortowanej listy ani żadnej struktury danych zaprojektowanej specjalnie z myślą o wyszukiwaniu — szukamy przysłowiowej igły w stogu siana.
Intuicyjnie możemy wyobrazić sobie, że mamy niezwykle skomplikowany obwód boolowski obliczający który możemy łatwo uruchomić na wybranym stringu wejściowym. Jednak ze względu na złożoność obwodu nie mamy szans na zrozumienie go poprzez analizę (poza możliwością ewaluacji na wybranych stringach wejściowych).
Jednym z klasycznych sposobów wykonania tego zadania wyszukiwania jest iterowanie po wszystkich stringach i sprawdzanie, czy każdy z nich jest rozwiązaniem. Dla wygody zapiszmy
dla zwięzłości. W jest stringów, więc iterowanie po wszystkich nich wymaga ewaluacji Zakładając, że jesteśmy ograniczeni do ewaluowania na wybranych wejściach, to jest najlepsze, co można osiągnąć deterministycznym algorytmem gwarantującym sukces. Algorytm probabilistyczny mógłby próbować zaoszczędzić czas, losowo dobierając stringi wejściowe dla ale wciąż wymagałby ewaluacji aby odnieść sukces z wysokim prawdopodobieństwem.
Algorytm Grovera rozwiązuje ten problem wyszukiwania z wysokim prawdopodobieństwem, wykonując zaledwie ewaluacji Warto zaznaczyć, że te ewaluacje funkcji muszą zachodzić w superpozycji, podobnie jak zapytania omówione w lekcji Algorytmy kwantowe oparte na zapytaniach, w tym algorytm Deutscha, algorytm Deutscha-Jozsy i algorytm Simona. W odróżnieniu od tamtych algorytmów, algorytm Grovera stosuje podejście iteracyjne: ewaluuje na superpozycjach stringów wejściowych i przeplatuje te ewaluacje innymi operacjami, które tworzą wzorce interferencji — prowadząc do rozwiązania z wysokim prawdopodobieństwem (jeśli istnieje) po iteracjach.
Formalne sformułowanie problemu
Sformalizujemy problem rozwiązywany przez algorytm Grovera, korzystając z modelu obliczeniowego opartego na zapytaniach. Zakładamy mianowicie, że mamy dostęp do funkcji poprzez bramkę zapytania zdefiniowaną w zwykły sposób:
dla każdego i Jest to działanie na stanach bazy standardowej; działanie w ogólnym przypadku wyznaczone jest przez liniowość.
Jak omówiono w lekcji Podstawy algorytmiczne obliczeń kwantowych, jeśli dysponujemy obwodem boolowskim obliczającym możemy przekształcić opis tego obwodu boolowskiego w obwód kwantowy implementujący (używając pewnej liczby kubitów roboczych, które rozpoczynają i kończą obliczenia w stanie ). Chociaż więc używamy modelu zapytaniowego do sformalizowania problemu rozwiązywanego przez algorytm Grovera, nie jest on ograniczony do tego modelu — możemy uruchomić algorytm Grovera na dowolnej funkcji dla której posiadamy obwód boolowski.
Poniżej podajemy dokładne sformułowanie problemu, nazwanego Szukaj (ang. Search), ponieważ szukamy rozwiązania, czyli stringu powodującego, że przyjmuje wartość
Zauważ, że nie jest to problem z obietnicą — funkcja jest dowolna. Pomocne będzie jednak rozważenie następującego wariantu problemu z obietnicą, w którym mamy gwarancję, że istnieje dokładnie jedno rozwiązanie. Ten problem pojawił się jako przykład problemu z obietnicą w lekcji Algorytmy kwantowe oparte na zapytaniach.
Zauważ też, że problem Or wspomniany w tej samej lekcji jest ściśle powiązany z problemem Szukaj. W tamtym problemie celem jest jedynie ustalenie, czy rozwiązanie istnieje, a nie faktyczne jego znalezienie.