Konstrukcja Oracle dla algorytmu Grovera

16

W „Obliczeniach kwantowych i informacjach kwantowych” Mike'a i Ike'a algorytm Grovera został szczegółowo wyjaśniony. Jednak w książce i we wszystkich wyjaśnieniach, które znalazłem w Internecie dla algorytmu Grovera, wydaje się, że nie ma wzmianki o tym, jak zbudowana jest Wyrocznia Grovera, chyba że już wiemy, w jakim stanie szukamy, pokonując cel algorytm. Konkretnie, moje pytanie brzmi: biorąc pod uwagę pewne f (x) takie, że dla pewnej wartości x, f (x) = 1, ale dla wszystkich innych, f (x) = 0, w jaki sposób buduje się wyrocznię, która nas od nich wyrwie nasz początkowy, dowolny stan | x> | y> do | x> | y + f (x)>? Doceniona zostanie jak najwięcej wyraźnych szczegółów (być może przykład?). Jeśli taka konstrukcja dowolnej funkcji jest możliwa w przypadku Hadamarda, Pauliego lub innych standardowych bram kwantowych,

Wola
źródło
„wydaje się, że nie ma wzmianki o tym, jak zbudowana jest Wyrocznia Grovera, chyba że wiemy już, w jakim stanie szukamy, pokonując cel algorytmu.”… „Wyrocznia Grovera” to problem do rozwiązania. Nie konstruujesz tego. Masz (wyrocznia dostępu do niego) i poprosiłeś o wykonanie obliczeń, aby odkryć wartość. Jeśli to nie pomaga, udawać, że ja skonstruować wyrocznię, a następnie poprosi Cię , aby rozwiązać ten problem. (Należy również pamiętać, że czytanie / pisanie / przygotowanie bazy danych elementów trwa dłużej niż uruchomienie Grovera N.Algorytm czasu N. )N.
Daniel Apon
2
Ale co jeśli zamiast otrzymać wyrocznię, otrzymamy f (x)? Wyobraź sobie, że rozwiązujemy problem 3-SAT i chcemy użyć Grovera, aby przyspieszyć rozwiązanie. Znamy omawiane f (x) (klauzule prawdy 3-SAT), ale niekoniecznie wiemy, który ciąg bitów x da prawdziwy wynik po podłączeniu do 3-SAT. Czy nie może istnieć sposób na zbudowanie wyroczni z funkcji 3-SAT w celu znalezienia poprawnego ciągu bitów? Jeśli nie ma - i jak sugerujesz - czegoś, co ma zapewnić ktoś inny, algorytm Grovera wydaje się raczej sztuczny, jest to po prostu ćwiczenie.
Czy

Odpowiedzi:

20

Wyrocznia jest po prostu implementacją predykatu, w którym chcesz znaleźć satysfakcjonujące rozwiązanie.

Załóżmy na przykład, że masz problem z 3-sat:

(¬x1 ∨ ¬x3 ∨ ¬x4) ∧
    (x2 ∨ x3 ∨ ¬x4) ∧
    (x1 ∨ ¬x2 ∨ x4) ∧
    (x1 ∨ x3 ∨ x4) ∧
    (¬x1 ∨ x2 ∨ ¬x3)

Lub w formie tabeli, gdzie każdy wiersz jest 3-klauzulą, x oznacza „ta zmienna fałsz”, o oznacza „ta zmienna prawda”, a spacja oznacza „nie w klauzuli”:

1 2 3 4
-------
x   x x
  o o x
o x   o
x o x

Teraz utwórz obwód, który oblicza, czy dane wejściowe są rozwiązaniem, takie jak to:

sprawdzanie rozwiązania

Teraz, aby zmienić obwód w wyrocznię, uderz w bit wyjściowy bramką Z i odznacz wszelkie śmieci, które zrobiłeś (tj. Uruchom obwód obliczeniowy w odwrotnej kolejności):

obwód oracle

To wszystko. Obliczyć predykat, trafić wynik w Z, odliczyć predykat. To wyrocznia.

Iteruj kroki dyfuzji krokami wyroczni, a będziesz szukał groverów :

wyszukiwanie hodowców

... chociaż powinieneś prawdopodobnie wybrać przykład z mniejszą liczbą rozwiązań, więc postęp jest stopniowy (zamiast obracać się wzdłuż płaszczyzny stanu początkowego-stanu-rozwiązania o więcej niż 90 stopni na krok, jak w moim przykładzie).

Craig Gidney
źródło
Dzięki, to było niezwykle pomocne. Niesamowicie jasne, odpowiedział na wszystko, o co prosiłem (a nawet użyłem wspólnych bram kwantowych!) Czy jest jakiś powód, dla którego zdecydujesz się zmienić wszystkie początkowe kubity na stan | 1> przed umieszczeniem ich w superpozycji za pomocą bram Hadamarda zamiast po prostu wstawienia | 0 > stan kubity za pośrednictwem Hadamards (tj. czy ma to jakąś zaletę)? Jaka to operacja dotyczy etapów dyfuzji? Wygląda jak kontrolowany X, ale czy używasz | 1> lub | 0> jako kontroli?
Czy
(12)|0-12)|1)n
Fantastyczna odpowiedź i dzięki za link do algassert.com/quirk !
Frédéric Grosshans