Algorytm Simona
Algorytm Simona to kwantowy algorytm zapytań rozwiązujący problem znany jako problem Simona. Jest to problem z obietnicą o podobnym charakterze do problemów Deutscha-Jozsy i Bernsteina-Vaziranego, jednak różniący się szczegółami.
Algorytm Simona jest istotny, ponieważ zapewnia wykładniczą przewagę algorytmów kwantowych nad klasycznymi (w tym probabilistycznymi), a zastosowana w nim technika zainspirowała Petera Shora do odkrycia wydajnego algorytmu kwantowego dla rozkładu liczb na czynniki pierwsze.
Simon's problem
Funkcja wejściowa dla problemu Simona ma postać
dla dodatnich liczb całkowitych i Moglibyśmy dla prostoty ograniczyć się do przypadku ale niewiele zyskujemy na tym założeniu — algorytm Simona i jego analiza są zasadniczo takie same w obu przypadkach.
Za chwilę dokładniej przeanalizujemy obietnicę, żeby lepiej zrozumieć, co mówi — najpierw jednak zaznaczmy wyraźnie, że wymaga ona od bardzo szczególnej struktury, więc większość funkcji tej obietnicy nie spełni. Warto też przyznać, że ten problem nie ma na celu praktycznego zastosowania. Jest to raczej nieco sztuczny problem, skrojony na miarę tak, by był łatwy dla komputerów kwantowych i trudny dla klasycznych.
Istnieją dwa główne przypadki: pierwszy to taki, w którym jest ciągiem samych zer a drugi — gdy nie jest ciągiem samych zer.
-
Przypadek 1: Jeśli jest ciągiem samych zer, możemy uprościć warunek „wtedy i tylko wtedy" w obietnicy do postaci Jest to równoważne temu, że jest funkcją różnowartościową.
-
Przypadek 2: Jeśli nie jest ciągiem samych zer, to spełnienie obietnicy dla tego ciągu oznacza, że jest dwa-do-jednego (ang. two-to-one), tzn. dla każdego możliwego ciągu wyjściowego istnieją dokładnie dwa ciągi wejściowe, które powodują, że zwraca ten ciąg. Co więcej, te dwa ciągi wejściowe muszą mieć postać i dla pewnego ciągu
Ważne jest, by zauważyć, że jeśli obietnica jest spełniona, to może istnieć tylko jeden ciąg który działa — zatem dla funkcji spełniających obietnicę zawsze istnieje dokładnie jedna poprawna odpowiedź.
Oto przykład funkcji postaci spełniającej obietnicę dla ciągu
Istnieje różnych ciągów wejściowych i różne ciągi wyjściowe, z których każdy pojawia się dwukrotnie — mamy więc funkcję dwa-do-jednego. Co więcej, dla dowolnych dwóch różnych ciągów wejściowych dających ten sam ciąg wyjściowy, bitowy XOR tych dwóch ciągów wejściowych jest równy co jest równoważne temu, że każdy z nich jest równy drugiemu po XOR-owaniu z
Zauważmy, że jedyne, co ma znaczenie w przypadku faktycznych ciągów wyjściowych, to czy są one takie same, czy różne dla różnych wyborów ciągów wejściowych. Na przykład w powyższym przykładzie cztery ciągi i pojawiają się jako wyjścia Moglibyśmy zastąpić te cztery ciągi innymi, o ile byłyby wszystkie różne, a poprawne rozwiązanie nie uległoby zmianie.
Algorithm description
Oto diagram kwantowego Circuit reprezentującego algorytm Simona.
Dla jasności: na górze znajduje się qubitów, na które działają Gate'y Hadamarda, a na dole qubitów wchodzących bezpośrednio do bramki zapytania (query gate). Wygląda to bardzo podobnie do algorytmów omawianych już w tej lekcji, ale tym razem nie ma phase kickback; dolne qubitów wchodzi do bramki zapytania w stanie
Rozwiązanie problemu Simona przy użyciu tego obwód wymaga w praktyce kilku niezależnych jego uruchomień, a następnie etapu klasycznego przetwarzania końcowego, który zostanie opisany później, po przeanalizowaniu zachowania Circuit.
Analiza
Analiza algorytmu Simona przebiega początkowo podobnie jak w przypadku algorytmu Deutscha-Jozsy. Po wykonaniu pierwszej warstwy Hadamard gates na górnych qubitach stan przyjmuje postać
Po wykonaniu wyjście funkcji jest XORowane na stan zerowy dolnych qubitów, więc stan staje się
Po wykonaniu drugiej warstwy Hadamard gates, korzystając z tego samego wzoru na działanie warstwy Hadamard gates co poprzednio, otrzymujemy następujący stan.
W tym momencie analiza rozchodzi się z analizami poprzednich algorytmów z tej lekcji.
Interesuje nas prawdopodobieństwo, że pomiary dadzą każdy możliwy ciąg Korzystając z reguł analizowania pomiarów opisanych w lekcji Układy złożone kursu Podstawy informacji kwantowej, stwierdzamy, że prawdopodobieństwo uzyskania ciągu wynosi
Aby lepiej zrozumieć te prawdopodobieństwa, potrzebujemy odrobiny dodatkowej notacji i terminologii. Po pierwsze, dziedzina obrazu funkcji to zbiór zawierający wszystkie jej ciągi wyjściowe.
Po drugie, dla każdego ciągu możemy wyrazić zbiór wszystkich ciągów wejściowych, dla których funkcja przyjmuje wartość , jako
Zbiór jest nazywany przeciwobrazem pod Analogicznie możemy zdefiniować przeciwobraz pod dowolnego zbioru zamiast — jest to zbiór wszystkich elementów, które odwzorowuje na ten zbiór. (Tej notacji nie należy mylić z odwrotnością funkcji która może nie istnieć. Fakt, że argument po lewej stronie to zbiór , a nie element , pozwala uniknąć tej pomyłki.)
Korzystając z tej notacji, możemy rozdzielić sumę w powyższym wyrażeniu na prawdopodobieństwa i uzyskać
Każdy ciąg jest reprezentowany dokładnie raz przez obie sumy — zasadniczo umieszczamy te ciągi w oddzielnych „koszyczkach" zależnie od tego, który ciąg wyjściowy produkują po obliczeniu funkcji , a następnie sumujemy osobno po wszystkich koszyczkach.
Możemy teraz obliczyć kwadrat normy euklidesowej i otrzymać
Aby jeszcze bardziej uprościć te prawdopodobieństwa, przyjrzyjmy się wartości
dla dowolnie wybranego
Jeśli to jest funkcją różnowartościową i dla każdego istnieje dokładnie jeden element Wartość wyrażenia wynosi wtedy .
Jeśli natomiast to w zbiorze są dokładnie dwa ciągi. Dokładniej: jeśli wybierzemy jako jeden z tych dwóch ciągów, to drugim ciągiem musi być zgodnie z założeniem problemu Simona. Korzystając z tej obserwacji, możemy uprościć w następujący sposób.
Okazuje się zatem, że wartość jest niezależna od konkretnego wyboru w obu przypadkach.
Możemy teraz dokończyć analizę, rozpatrując osobno te same dwa przypadki co poprzednio.
-
Przypadek 1: W tym przypadku funkcja jest różnowartościowa, więc istnieje ciągów i otrzymujemy
Innymi słowy, pomiary dają ciąg wybrany jednostajnie losowo.
-
Przypadek 2: W tym przypadku jest funkcją dwu-do-jednego, więc zawiera elementów. Korzystając z powyższego wzoru, wnioskujemy, że prawdopodobieństwo zmierzenia każdego wynosi
Innymi słowy, otrzymujemy ciąg wybrany jednostajnie losowo ze zbioru który zawiera ciągów. (Ponieważ dokładnie połowa ciągów binarnych długości ma binarny iloczyn skalarny z , a pozostałe mają binarny iloczyn skalarny z , co już zaobserwowaliśmy w analizie algorytmu Deutscha-Jozsy dla problemu Bernsteina-Vaziraniego.)
Klasyczne przetwarzanie końcowe
Wiemy już, jakie są prawdopodobieństwa możliwych wyników pomiarów podczas uruchamiania układu kwantowego dla algorytmu Simona. Czy to wystarczy, aby wyznaczyć ?
Odpowiedź brzmi: tak, pod warunkiem że jesteśmy gotowi kilkukrotnie powtórzyć proces i zaakceptować, że może on zakończyć się niepowodzeniem z pewnym prawdopodobieństwem, które możemy uczynić bardzo małym, uruchamiając układ wystarczająco wiele razy. Podstawowy pomysł polega na tym, że każde wykonanie układu dostarcza nam statystycznych dowodów dotyczących a na ich podstawie możemy znaleźć z bardzo dużym prawdopodobieństwem, jeśli uruchomimy układ odpowiednio wiele razy.
Załóżmy, że uruchamiamy układ niezależnie razy, gdzie Ta konkretna liczba iteracji nie ma nic szczególnego — możemy wybrać większe (lub mniejsze) w zależności od tego, jakie prawdopodobieństwo błędu jesteśmy w stanie zaakceptować, co zobaczymy dalej. Wybór zapewni nam ponad % szansę na odzyskanie
Uruchamiając układ razy, otrzymujemy ciągi Dla jasności: indeksy górne są tutaj częścią nazw tych ciągów, a nie wykładnikami ani indeksami bitów, więc mamy
Tworzymy teraz macierz o wierszach i kolumnach, przyjmując bity tych ciągów jako wartości binarne wpisów.
W tym momencie nie znamy jeszcze — naszym celem jest właśnie znalezienie tego ciągu. Wyobraź sobie jednak na chwilę, że znamy ciąg i tworzymy wektor kolumnowy z bitów ciągu w następujący sposób.
Jeśli wykonamy mnożenie macierzy przez wektor modulo — tzn. wykonamy mnożenie w zwykły sposób, a następnie weźmiemy reszty z dzielenia przez dla każdego wpisu wyniku — otrzymamy wektor zerowy.
Innymi słowy, potraktowany jako wektor kolumnowy w sposób opisany powyżej, ciąg zawsze będzie elementem jądra macierzy pod warunkiem że wykonujemy arytmetykę modulo Jest to prawdziwe zarówno w przypadku jak i Mówiąc precyzyjniej, wektor zerowy zawsze należy do jądra a w przypadku dołącza do niego wektor, którego wpisy są bitami
Pozostaje pytanie, czy w jądrze pojawią się jakieś inne wektory oprócz tych odpowiadających i Odpowiedź jest taka, że staje się to coraz mniej prawdopodobne wraz ze wzrostem — a jeśli wybierzemy jądro macierzy nie będzie zawierać żadnych innych wektorów poza tymi odpowiadającymi i z prawdopodobieństwem większym niż %. Mówiąc ogólniej, jeśli zastąpimy przez dla dowolnie wybranej dodatniej liczby całkowitej prawdopodobieństwo, że wektory odpowiadające i są jedynymi elementami jądra wynosi co najmniej
Używając algebry liniowej, można efektywnie obliczyć opis jądra macierzy modulo Konkretnie, można to zrobić za pomocą eliminacji Gaussa, która działa tak samo, gdy arytmetyka jest wykonywana modulo jak w przypadku liczb rzeczywistych lub zespolonych. Dopóki wektory odpowiadające i są jedynymi elementami jądra — co zachodzi z dużym prawdopodobieństwem — możemy na podstawie wyników tego obliczenia wyznaczyć
Klasyczna trudność
Ile zapytań potrzebuje klasyczny algorytm z wyroczną, aby rozwiązać problem Simona? Odpowiedź brzmi: generalnie bardzo dużo.
Istnieje kilka precyzyjnych sformułowań dotyczących klasycznej trudności tego problemu — oto jedno z nich. Jeśli mamy dowolny probabilistyczny algorytm z wyroczną, który wykonuje mniej niż zapytań — czyli liczbę zapytań wykładniczą względem — to algorytm ten nie rozwiąże problemu Simona z prawdopodobieństwem co najmniej
Udowodnienie takich twierdzeń o niemożności bywa niekiedy bardzo trudne, ale to konkretne można wykazać stosunkowo prosto za pomocą elementarnej analizy probabilistycznej. Tutaj jednak tylko pokrótce zarysujemy podstawową intuicję stojącą za tym wynikiem.
Staramy się znaleźć ukryty ciąg ale dopóki nie zapytamy wyroczni o dwa ciągi dające tę samą wartość funkcji, będziemy mieć bardzo ograniczone informacje na temat Intuicyjnie mówiąc, dowiemy się jedynie, że ukryty ciąg nie jest XOR-em żadnej pary różnych ciągów, o które zapytaliśmy. A jeśli zapytamy o mniej niż ciągów, nadal pozostanie wiele możliwych wartości których nie wykluczyliśmy, bo nie ma wystarczająco wielu par ciągów, by to zrobić. To nie jest formalny dowód — to tylko podstawowy pomysł.
Podsumowując, algorytm Simona daje nam uderzającą przewagę algorytmów kwantowych nad klasycznymi w modelu z wyroczną.