Przejdź do głównej treści

Opis algorytmu Grovera

W tej sekcji opiszemy algorytm Grovera. Zaczniemy od omówienia bramek zapytań fazowych i sposobu ich budowy, a następnie przejdziemy do opisu samego algorytmu Grovera. Na koniec krótko omówimy, jak naturalnie stosuje się ten algorytm do przeszukiwania.

Bramki zapytań fazowych

Algorytm Grovera korzysta z operacji znanych jako bramki zapytań fazowych. W odróżnieniu od zwykłej bramki zapytania Uf,U_f, zdefiniowanej dla danej funkcji ff w standardowy sposób opisany wcześniej, bramka zapytania fazowego dla funkcji ff jest zdefiniowana jako

Zfx=(1)f(x)xZ_f \vert x\rangle = (-1)^{f(x)} \vert x\rangle

dla każdego ciągu xΣn.x\in\Sigma^n.

Operację ZfZ_f można zaimplementować za pomocą jednej bramki zapytania Uf,U_f, jak sugeruje poniższy diagram:

A quantum circuit implementing a Z_f gate using one query gate together with the phase kickback phenomenon

Ta implementacja korzysta z zjawiska phase kickback i wymaga udostępnienia jednego roboczego qubitu, zainicjalizowanego do stanu \vert -\rangle. Ten qubit pozostaje w stanie \vert - \rangle po zakończeniu implementacji i może być ponownie użyty (na przykład do implementacji kolejnych bramek ZfZ_f) lub po prostu odrzucony.

Oprócz operacji ZfZ_f będziemy również używać bramki zapytania fazowego dla nn-bitowej funkcji OR, zdefiniowanej dla każdego ciągu xΣnx\in\Sigma^n w następujący sposób.

OR(x)={0x=0n1x0n\mathrm{OR}(x) = \begin{cases} 0 & x = 0^n\\[0.5mm] 1 & x \neq 0^n \end{cases}

Konkretnie, bramka zapytania fazowego dla nn-bitowej funkcji OR działa następująco:

ZORx={xx=0nxx0n.Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[0.5mm] - \vert x\rangle & x \neq 0^n. \end{cases}

Dla jasności: tak właśnie działa ZORZ_{\mathrm{OR}} na standardowych stanach bazowych; jej zachowanie na dowolnych stanach wynika z tej definicji przez liniowość.

Operację ZORZ_{\mathrm{OR}} można zaimplementować jako Circuit kwantowy, zaczynając od układu logicznego dla funkcji OR, następnie konstruując operację UORU_{\mathrm{OR}} (czyli standardową bramkę zapytania dla nn-bitowej funkcji OR) zgodnie z procedurą opisaną w lekcji Podstawy algorytmiczne obliczeń kwantowych, a na końcu operację ZORZ_{\mathrm{OR}} z wykorzystaniem zjawiska phase kickback opisanego powyżej. Zauważ, że operacja ZORZ_{\mathrm{OR}} nie zależy od funkcji ff i dlatego można ją zaimplementować za pomocą Circuitu kwantowego bez żadnych bramek zapytań.

Opis algorytmu

Teraz, gdy mamy już obie operacje ZfZ_f i ZOR,Z_{\mathrm{OR}}, możemy opisać algorytm Grovera.

Algorytm odwołuje się do liczby t,t, która jest liczbą iteracji wykonywanych przez algorytm (a zatem liczbą zapytań do funkcji f,f, których wymaga). Liczba tt nie jest określona przez algorytm Grovera w opisywanej przez nas wersji — omówimy później w tej lekcji, jak można ją wybrać.

Algorytm Grovera
  1. Zainicjalizuj rejestr nn qubitów Q\mathsf{Q} do stanu zerowego 0n,\vert 0^n \rangle, a następnie zastosuj operację Hadamarda do każdego qubitu w Q.\mathsf{Q}.
  2. Zastosuj tt razy operację unitarną G=HnZORHnZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f do rejestru Q.\mathsf{Q}.
  3. Zmierz kubity rejestru Q\mathsf{Q} względem pomiarów standardowej bazy i zwróć otrzymany ciąg.

Operacja G=HnZORHnZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f iterowana w kroku 2 będzie przez resztę tej lekcji nazywana operacją Grovera. Oto reprezentacja Circuitu kwantowego operacji Grovera dla n=7 ⁣:n=7\!:

A quantum circuit representation of the Grover operation

Na tym diagramie operacja ZfZ_f jest przedstawiona jako większa niż ZOR,Z_{\mathrm{OR}}, co stanowi nieformalną wizualną wskazówkę sugerującą, że prawdopodobnie jest ona kosztowniejsza. W szczególności, gdy pracujemy w modelu zapytań, ZfZ_f wymaga jednego zapytania, natomiast ZORZ_{\mathrm{OR}} nie wymaga żadnych. Jeśli zamiast tego dysponujemy układem logicznym dla funkcji ff i konwertujemy go na Circuit kwantowy dla Zf,Z_f, możemy zasadnie oczekiwać, że otrzymany Circuit kwantowy będzie większy i bardziej skomplikowany niż Circuit dla ZOR.Z_{\mathrm{OR}}.

Poniżej przedstawiono diagram Circuitu kwantowego dla całego algorytmu przy n=7n=7 i t=3.t=3. Dla większych wartości tt wystarczy wstawić kolejne instancje operacji Grovera bezpośrednio przed pomiarami.

A quantum circuit for Grover's algorithm when t=3

Algorytm Grovera można zastosować do problemu przeszukiwania w następujący sposób:

  • Wybierz liczbę tt w kroku 2. (Omówiono to w dalszej części lekcji.)
  • Uruchom algorytm Grovera dla funkcji f,f, używając wybranej wartości t,t, aby otrzymać ciąg xΣn.x\in\Sigma^n.
  • Zapytaj funkcję ff o ciąg x,x, aby sprawdzić, czy jest to prawidłowe rozwiązanie:
    • Jeśli f(x)=1,f(x) = 1, to znaleźliśmy rozwiązanie i możemy zatrzymać się oraz zwrócić x.x.
    • W przeciwnym razie, jeśli f(x)=0,f(x) = 0, możemy albo ponownie uruchomić procedurę, być może z innym wyborem t,t, albo zdecydować się poddać i zwrócić „brak rozwiązania".

Kiedy przeanalizujemy działanie algorytmu Grovera, zobaczymy, że przyjmując t=O(N),t = O(\sqrt{N}), uzyskujemy rozwiązanie naszego problemu przeszukiwania (jeśli istnieje) z dużym prawdopodobieństwem.