Algorytm Shora
Teraz skupimy naszą uwagę na problemie faktoryzacji liczb całkowitych i zobaczymy, jak można go efektywnie rozwiązać na komputerze kwantowym, używając estymacji fazy. Algorytm, który otrzymamy, to algorytm Shora faktoryzacji liczb całkowitych. Shor nie opisał swojego algorytmu konkretnie w kategoriach estymacji fazy, ale jest to naturalny i intuicyjny sposób wyjaśnienia, jak on działa.
Zaczniemy od omówienia pośredniego problemu znanego jako problem znajdowania rzędu i zobaczymy, jak estymacja fazy dostarcza rozwiązania tego problemu. Następnie zobaczymy, jak efektywne rozwiązanie problemu znajdowania rzędu daje nam efektywne rozwiązanie problemu faktoryzacji liczb całkowitych. (Gdy rozwiązanie jednego problemu zapewnia rozwiązanie innego problemu w ten sposób, mówimy, że ten drugi problem redukuje się do pierwszego — więc w tym przypadku redukujemy faktoryzację liczb całkowitych do znajdowania rzędu.) Ta druga część algorytmu Shora w ogóle nie korzysta z obliczeń kwantowych; jest całkowicie klasyczna. Obliczenia kwantowe są potrzebne tylko do rozwiązania problemu znajdowania rzędu.
Problem znajdowania rzędu
Kilka podstawowych pojęć z teorii liczb
Aby wyjaśnić problem znajdowania rzędu i sposób, w jaki można go rozwiązać za pomocą estymacji fazy, pomocne będzie rozpoczęcie od kilku podstawowych pojęć z teorii liczb oraz wprowadzenie po drodze przydatnej notacji.
Na początek, dla dowolnej dodatniej liczby całkowitej zdefiniujmy zbiór w następujący sposób.
Na przykład, i tak dalej.
Są to zbiory liczb, ale możemy myśleć o nich jako o czymś więcej niż tylko zbiorach. W szczególności możemy rozważać operacje arytmetyczne na takie jak dodawanie i mnożenie — a jeśli umówimy się, że zawsze bierzemy nasze wyniki modulo (czyli dzielimy przez i bierzemy resztę jako wynik), zawsze pozostaniemy wewnątrz tego zbioru podczas wykonywania tych operacji. Te dwie konkretne operacje dodawania i mnożenia, obie brane modulo czynią pierścieniem, który jest fundamentalnie ważnym typem obiektu w algebrze.
Na przykład, i są elementami a jeśli pomnożymy je przez siebie, otrzymamy co daje resztę po podzieleniu przez Czasami wyrażamy to w następujący sposób.
Ale możemy również po prostu napisać o ile jasne jest, że pracujemy w po to tylko, aby utrzymać naszą notację tak prostą, jak to możliwe.
Jako przykład, oto tabliczki dodawania i mnożenia dla
Spośród elementów szczególne są elementy spełniające Często zbiór zawierający te elementy oznacza się gwiazdką, w następujący sposób.
Jeśli skupimy naszą uwagę na operacji mnożenia, zbiór tworzy grupę — konkretnie grupę abelową — która jest kolejnym ważnym typem obiektu w algebrze. Podstawowym faktem dotyczącym tych zbiorów (i skończonych grup w ogóle) jest to, że jeśli wybierzemy dowolny element i będziemy wielokrotnie mnożyć przez siebie, to w końcu zawsze otrzymamy liczbę
Jako pierwszy przykład weźmy Mamy, że ponieważ a jeśli pomnożymy przez siebie, otrzymamy co potwierdza powyższa tabela.
Jako drugi przykład weźmy Jeśli przejdziemy przez liczby od do to te, które mają NWD równe z są następujące.
Dla każdego z tych elementów możliwe jest podniesienie tej liczby do dodatniej potęgi całkowitej, aby otrzymać Oto najmniejsze potęgi, dla których to działa:
Naturalnie pracujemy w dla wszystkich tych równań, czego nie zawracaliśmy sobie głowy zapisywaniem — przyjmujemy to za domyślne, aby uniknąć zaśmiecania. Będziemy to kontynuować przez resztę lekcji.
Sformułowanie problemu i związek z estymacją fazy
Możemy teraz sformułować problem znajdowania rzędu.
Alternatywnie, używając notacji, którą właśnie wprowadziliśmy powyżej, mamy dane i szukamy najmniejszej dodatniej liczby całkowitej takiej, że Tę liczbę nazywamy rzędem elementu modulo
Aby powiązać problem znajdowania rzędu z estymacją fazy, rozważmy operację zdefiniowaną na układzie, którego stany klasyczne odpowiadają gdzie mnożymy przez ustalony element
Dla jasności: mnożenie wykonujemy w więc niejawnie zakładamy, że bierzemy iloczyn modulo wewnątrz ketu po prawej stronie równania.
Na przykład, jeśli weźmiemy i to działanie na bazie standardowej wygląda następująco.
Jest to operacja unitarna, pod warunkiem że permutuje ona elementy bazy standardowej więc jako macierz jest macierzą permutacji. Z jej definicji jasno wynika, że operacja ta jest deterministyczna, a prostym sposobem, by zobaczyć, że jest odwracalna, jest rozważenie rzędu elementu modulo i zauważenie, że odwrotnością jest
Istnieje inny sposób myślenia o odwrotności, który nie wymaga żadnej wiedzy o (które w końcu jest tym, co próbujemy obliczyć). Dla każdego elementu zawsze istnieje jednoznaczny element spełniający Ten element oznaczamy przez i można go wydajnie obliczyć; rozszerzenie algorytmu GCD Euklidesa robi to z kosztem kwadratowym względem A zatem
Tak więc operacja jest zarówno deterministyczna, jak i odwracalna. Oznacza to, że jest opisana przez macierz permutacji, a więc jest unitarna.
Zastanówmy się teraz nad wektorami własnymi i wartościami własnymi operacji zakładając, że Jak właśnie uzasadniono, to założenie mówi nam, że jest unitarne.
Istnieje wartości własnych być może zawierających tę samą wartość własną powtórzoną wielokrotnie, i ogólnie istnieje pewna dowolność w wyborze odpowiadających wektorów własnych — ale nie musimy się martwić wszystkimi możliwościami. Zacznijmy prosto i zidentyfikujmy tylko jeden wektor własny
Liczba to rząd modulo tutaj i w całej pozostałej części lekcji. Wartość własna związana z tym wektorem własnym to ponieważ nie zmienia się on, gdy mnożymy przez
Dzieje się tak, ponieważ więc każdy stan bazy standardowej zostaje przesunięty do dla a zostaje przesunięty z powrotem do Mówiąc nieformalnie, to tak, jakbyśmy powoli mieszali ale jest już całkowicie wymieszany, więc nic się nie zmienia.
Oto kolejny przykład wektora własnego Ten jest bardziej interesujący w kontekście znajdowania rzędu i estymacji fazy.
Alternatywnie, możemy zapisać ten wektor za pomocą sumowania w następujący sposób.
Tutaj widzimy, że liczba zespolona pojawia się w naturalny sposób, ze względu na to, jak działa mnożenie przez modulo Tym razem odpowiadająca wartość własna to Aby to zobaczyć, możemy najpierw obliczyć w następujący sposób.
Następnie, ponieważ oraz widzimy, że
a zatem
Stosując to samo rozumowanie, możemy zidentyfikować dodatkowe pary wektor własny/wartość własna dla Dla dowolnego wyboru mamy, że
jest wektorem własnym którego odpowiadająca wartość własna to
Istnieją inne wektory własne ale nie musimy się nimi zajmować — skupimy się wyłącznie na wektorach własnych które właśnie zidentyfikowaliśmy.
Znajdowanie rzędu za pomocą estymacji fazy
Aby rozwiązać problem znajdowania rzędu dla danego wyboru możemy zastosować procedurę estymacji fazy do operacji
W tym celu musimy wydajnie zaimplementować nie tylko za pomocą obwodu kwantowego, lecz także i tak dalej, posuwając się na tyle daleko, na ile to konieczne, aby uzyskać wystarczająco precyzyjne oszacowanie z procedury estymacji fazy. Wyjaśnimy tutaj, jak można to zrobić, a później ustalimy dokładnie, jaka precyzja jest potrzebna.
Zacznijmy od samej operacji Naturalnie, ponieważ pracujemy z modelem obwodów kwantowych, użyjemy notacji binarnej do zakodowania liczb pomiędzy a Największą liczbą, którą musimy zakodować, jest zatem liczba potrzebnych bitów wynosi
Na przykład, jeśli mamy Oto jak wygląda kodowanie elementów jako ciągów binarnych długości
A teraz oto precyzyjna definicja tego, w jaki sposób jest zdefiniowana jako operacja -kubitowa.
Chodzi o to, że chociaż interesuje nas tylko, jak działa dla musimy określić, jak działa dla pozostałych stanów bazy standardowej — i musimy to zrobić w taki sposób, aby nadal otrzymać operację unitarną. Zdefiniowanie tak, aby nic nie robiła z pozostałymi stanami bazy standardowej, spełnia ten warunek.
Korzystając z algorytmów mnożenia i dzielenia liczb całkowitych omówionych w poprzedniej lekcji, wraz z metodologią ich odwracalnych, bezśmieciowych implementacji, możemy zbudować obwód kwantowy realizujący dla dowolnego wyboru o koszcie Oto jeden ze sposobów, w jaki można to zrobić.
-
Zbuduj obwód realizujący operację
gdzie
przy użyciu metody opisanej w poprzedniej lekcji. Daje to obwód o rozmiarze
-
Zamień dwa -kubitowe układy, używając bramek swap do indywidualnej zamiany kubitów.
-
Podobnie jak w pierwszym kroku, zbuduj obwód dla operacji
gdzie jest odwrotnością w
Inicjalizując dolne kubitów i składając te trzy kroki, uzyskujemy następującą transformację:
Metoda wymaga kubitów roboczych, ale są one na końcu przywracane do stanu początkowego, co pozwala nam wykorzystać te obwody do estymacji fazy. Całkowity koszt uzyskanego obwodu wynosi
Aby wykonać i tak dalej, możemy zastosować dokładnie tę samą metodę, z tą różnicą, że zastępujemy przez i tak dalej, jako elementy To znaczy, dla dowolnej potęgi którą wybierzemy, możemy utworzyć obwód dla nie przez -krotne iterowanie obwodu dla lecz obliczając i następnie używając obwodu dla
Obliczanie potęg to problem potęgowania modularnego wspomniany w poprzedniej lekcji. Obliczenie to można wykonać klasycznie, używając algorytmu potęgowania modularnego wspomnianego w poprzedniej lekcji (często nazywanego algorytmem potęgowania w obliczeniowej teorii liczb). W rzeczywistości potrzebujemy jedynie potęg o wykładnikach będących potęgami dwójki, a mianowicie a potęgi te możemy uzyskać poprzez iteracyjne podnoszenie do kwadratu razy. Każde podniesienie do kwadratu można wykonać przez obwód logiczny o rozmiarze
W istocie to, co tu faktycznie robimy, to przerzucenie problemu iterowania aż razy na wydajne obliczenia klasyczne. I mamy szczęście, że jest to możliwe! Dla dowolnego wyboru obwodu kwantowego w problemie estymacji fazy jest to mało prawdopodobne — a w takim przypadku wynikowy koszt estymacji fazy rośnie wykładniczo wraz z liczbą kubitów sterujących
Rozwiązanie przy zadanym dogodnym wektorze własnym
Aby zrozumieć, jak możemy rozwiązać problem znajdowania rzędu za pomocą estymacji fazy, zacznijmy od założenia, że uruchamiamy procedurę estymacji fazy na operacji używając wektora własnego Zdobycie tego wektora własnego nie jest łatwe, jak się okaże, więc nie będzie to koniec historii — ale warto od tego zacząć.
Wartość własna operacji odpowiadająca wektorowi własnemu wynosi
To znaczy dla Zatem, jeśli uruchomimy procedurę estymacji fazy na używając wektora własnego otrzymamy przybliżenie Obliczając odwrotność będziemy w stanie poznać — pod warunkiem, że nasze przybliżenie jest wystarczająco dobre.
Bardziej szczegółowo: gdy uruchamiamy procedurę estymacji fazy z kubitami sterującymi, otrzymujemy liczbę Następnie przyjmujemy jako przybliżenie którym w rozważanym przypadku jest Aby z tego przybliżenia odgadnąć, czym jest naturalną rzeczą jest obliczenie odwrotności naszego przybliżenia i zaokrąglenie do najbliższej liczby całkowitej.
Przykładowo, załóżmy, że i wykonujemy estymację fazy na z wektorem własnym używając bitów sterujących. Najlepszym -bitowym przybliżeniem jest i mamy dość dużą szansę (około w tym przypadku) uzyskać wynik z estymacji fazy. Mamy
a zaokrąglenie do najbliższej liczby całkowitej daje co jest prawidłową odpowiedzią.
Z drugiej strony, jeśli nie użyjemy wystarczającej precyzji, możemy nie otrzymać prawidłowej odpowiedzi. Na przykład, jeśli weźmiemy kubity sterujące w estymacji fazy, możemy uzyskać najlepsze -bitowe przybliżenie które wynosi Wzięcie odwrotności daje
a zaokrąglenie do najbliższej liczby całkowitej daje błędną odpowiedź
Jak dużej precyzji potrzebujemy zatem, aby uzyskać prawidłową odpowiedź? Wiemy, że rząd jest liczbą całkowitą, i intuicyjnie mówiąc potrzebujemy precyzji wystarczającej do odróżnienia od pobliskich możliwości, w tym i Najbliższą liczbą do którą musimy się przejmować, jest a odległość między tymi dwiema liczbami wynosi
Zatem, jeśli chcemy mieć pewność, że nie pomylimy z wystarczy użyć precyzji wystarczającej do zagwarantowania, że najlepsze przybliżenie liczby jest bliższe niż Jeśli użyjemy na tyle dużej precyzji, że
tak aby błąd był mniejszy niż połowa odległości między a wtedy będzie bliższe niż jakiejkolwiek innej możliwości, w tym i
Możemy to dodatkowo zweryfikować w następujący sposób. Załóżmy, że
dla spełniającego
Gdy weźmiemy odwrotność, otrzymamy
Maksymalizując licznik i minimalizując mianownik, możemy ograniczyć, jak daleko jesteśmy od w następujący sposób.
Jesteśmy w odległości mniejszej niż od więc zgodnie z oczekiwaniami otrzymamy po zaokrągleniu.
Niestety, ponieważ nie znamy jeszcze nie możemy go użyć do określenia, jakiej dokładności potrzebujemy. Zamiast tego możemy wykorzystać fakt, że musi być mniejsze niż aby zapewnić użycie wystarczającej precyzji. W szczególności, jeśli użyjemy dokładności wystarczającej do zagwarantowania, że najlepsze przybliżenie liczby spełnia
to będziemy mieli wystarczającą precyzję, aby poprawnie wyznaczyć po wzięciu odwrotności. Przyjęcie zapewnia, że mamy dużą szansę uzyskać estymację z taką precyzją przy użyciu metody opisanej wcześniej. (Przyjęcie jest wystarczające, jeśli akceptujemy dolne ograniczenie 40% na prawdopodobieństwo sukcesu.)
Rozwiązanie ogólne
Jak właśnie zobaczyliśmy, jeśli mamy wektor własny operatora możemy poznać poprzez estymację fazy, o ile użyjemy wystarczającej liczby kubitów sterujących, aby zrobić to z wystarczającą precyzją. Niestety, nie jest łatwo zdobyć wektor własny więc musimy wymyślić, jak postępować dalej.
Załóżmy na moment, że postępujemy tak samo jak powyżej, ale z wektorem własnym zamiast dla dowolnego wyboru który zechcemy rozważyć. Wynik, jaki otrzymamy z procedury estymacji fazy, będzie przybliżeniem
Przy założeniu, że nie znamy ani ani może to pozwolić nam zidentyfikować albo nie. Na przykład, jeśli otrzymamy przybliżenie do co niestety nic nam nie mówi. To jest jednak nietypowy przypadek; dla innych wartości będziemy w stanie przynajmniej dowiedzieć się czegoś o
Możemy użyć algorytmu znanego jako algorytm ułamków łańcuchowych, aby zamienić nasze przybliżenie na pobliskie ułamki — w tym jeśli przybliżenie jest wystarczająco dobre. Nie będziemy tutaj wyjaśniać algorytmu ułamków łańcuchowych. Zamiast tego, oto sformułowanie znanego faktu dotyczącego tego algorytmu.
Jeśli mamy bardzo bliskie przybliżenie wartości i uruchamiamy algorytm ułamków łańcuchowych dla i otrzymamy i jak opisano w powyższym fakcie. Analiza tego faktu pozwala nam wywnioskować, że
Zauważmy w szczególności, że niekoniecznie poznajemy i poznajemy jedynie w postaci nieskracalnej.
Na przykład, jak już zauważyliśmy, niczego się nie dowiemy z Ale to jedyna wartość dla której tak się dzieje. Gdy jest niezerowe, może mieć wspólne czynniki z ale liczba którą otrzymujemy z algorytmu ułamków łańcuchowych, musi przynajmniej dzielić
Nie jest to oczywiste, ale jest prawdą, że jeśli mamy zdolność poznania i dla dla wybranego jednostajnie losowo, to z dużym prawdopodobieństwem będziemy w stanie odzyskać po zaledwie kilku próbkach. W szczególności, jeśli naszym zgadnięciem dla jest najmniejsza wspólna wielokrotność wszystkich wartości mianownika które obserwujemy, to z dużym prawdopodobieństwem będziemy mieli rację. Intuicyjnie mówiąc, niektóre wartości nie są dobre, ponieważ mają wspólne czynniki z a te wspólne czynniki są przed nami ukryte, gdy poznajemy i Ale losowe wybory raczej nie będą ukrywać czynników przez długi czas, a prawdopodobieństwo, że nie zgadniemy poprawnie, biorąc najmniejszą wspólną wielokrotność obserwowanych mianowników, spada wykładniczo wraz z liczbą próbek.
Pozostaje rozwiązać problem, jak zdobyć wektor własny operatora na którym uruchomimy procedurę estymacji fazy. Jak się okazuje, wcale nie musimy ich tworzyć!
Zamiast tego uruchomimy procedurę estymacji fazy na stanie przez co rozumiemy -bitowe binarne kodowanie liczby zamiast wektora własnego operatora Do tej pory mówiliśmy tylko o uruchamianiu procedury estymacji fazy na konkretnym wektorze własnym, ale nic nie stoi na przeszkodzie, aby uruchomić tę procedurę na stanie wejściowym, który nie jest wektorem własnym i to właśnie robimy tutaj ze stanem (Nie jest on wektorem własnym chyba że czym nie będziemy zainteresowani.)
Uzasadnieniem wyboru stanu zamiast wektora własnego jest to, że następujące równanie jest prawdziwe.
Jednym ze sposobów weryfikacji tego równania jest porównanie iloczynów skalarnych obu stron z każdym standardowym stanem bazowym, używając wzorów wspomnianych wcześniej w lekcji, aby pomóc w ocenie wyników dla prawej strony. W konsekwencji otrzymamy dokładnie te same wyniki pomiarów, jak gdybyśmy wybrali jednostajnie losowo i użyli jako wektora własnego.
Bardziej szczegółowo, wyobraźmy sobie, że uruchamiamy procedurę estymacji fazy ze stanem zamiast jednego z wektorów własnych Po wykonaniu odwrotnej kwantowej transformaty Fouriera pozostaje nam stan
gdzie
Wektor reprezentuje stan górnych kubitów po wykonaniu na nich odwrotności kwantowej transformaty Fouriera.
Zatem, dzięki temu, że jest zbiorem ortonormalnym, stwierdzamy, że pomiar górnych kubitów daje przybliżenie wartości gdzie jest wybierane jednostajnie losowo. Jak już omówiliśmy, pozwala to nam poznać z wysokim stopniem pewności po kilku niezależnych uruchomieniach, co było naszym celem.
Całkowity koszt
Koszt implementacji każdej kontrolowanej operacji unitarnej wynosi Mamy kontrolowanych operacji unitarnych, a ponieważ całkowity koszt kontrolowanych operacji unitarnych wynosi Dodatkowo mamy bramek Hadamarda (które dają wkład do kosztu), a odwrotna kwantowa transformata Fouriera daje wkład do kosztu. Zatem koszt kontrolowanych operacji unitarnych dominuje nad kosztem całej procedury — który w związku z tym wynosi
Oprócz samego obwodu kwantowego po drodze trzeba wykonać kilka klasycznych obliczeń. Obejmuje to obliczenie potęg w dla które są potrzebne do skonstruowania kontrolowanych bramek unitarnych, a także algorytm ułamków łańcuchowych przekształcający przybliżenia na ułamki. Obliczenia te mogą być wykonane przez obwody Boole'a o łącznym koszcie
Jak to zwykle bywa, wszystkie te ograniczenia można poprawić, używając asymptotycznie szybkich algorytmów; podane ograniczenia zakładają stosowanie standardowych algorytmów dla podstawowych operacji arytmetycznych.
Faktoryzacja przez znajdowanie rzędu
Ostatnia rzecz, którą musimy omówić, to jak rozwiązanie problemu znajdowania rzędu pomaga nam w faktoryzacji. Ta część jest całkowicie klasyczna — nie ma w niej nic specyficznie związanego z obliczeniami kwantowymi.
Oto podstawowa idea. Chcemy rozłożyć liczbę na czynniki, i możemy to zrobić rekurencyjnie. Dokładniej, możemy skupić się na zadaniu rozszczepienia co oznacza znalezienie dowolnych dwóch liczb całkowitych dla których Nie jest to możliwe, jeśli jest liczbą pierwszą, ale możemy najpierw efektywnie sprawdzić, czy jest pierwsze, używając algorytmu testowania pierwszości, a jeśli nie jest liczbą pierwszą, spróbujemy ją rozszczepić. Po rozszczepieniu możemy po prostu zastosować rekurencję na i , aż wszystkie nasze czynniki będą pierwsze i otrzymamy rozkład na czynniki pierwsze.
Rozszczepianie liczb parzystych jest łatwe: po prostu zwracamy i
Łatwo jest również rozszczepiać potęgi doskonałe, czyli liczby postaci dla liczb całkowitych po prostu poprzez przybliżanie pierwiastków i tak dalej, oraz sprawdzanie pobliskich liczb całkowitych jako kandydatów na Nie musimy posuwać się dalej niż kroków w tym ciągu, ponieważ w tym momencie pierwiastek spada poniżej i nie ujawni dodatkowych kandydatów.
Dobrze, że potrafimy zrobić obie te rzeczy, ponieważ znajdowanie rzędu nie pomoże nam w faktoryzacji liczb parzystych ani potęg liczb pierwszych, gdzie liczba akurat jest pierwsza. Jeśli jednak jest nieparzysta i nie jest potęgą liczby pierwszej, znajdowanie rzędu pozwala nam rozszczepić
Pojedyncze uruchomienie tego algorytmu może nie znaleźć czynnika Konkretnie, dzieje się tak w dwóch sytuacjach:
- Rząd modulo jest nieparzysty.
- Rząd modulo jest parzysty oraz
Korzystając z podstawowej teorii liczb, można udowodnić, że dla losowego wyboru z prawdopodobieństwem co najmniej żadne z tych zdarzeń nie zachodzi. W rzeczywistości prawdopodobieństwo, że którekolwiek ze zdarzeń zachodzi, wynosi co najwyżej gdzie jest liczbą różnych czynników pierwszych co jest powodem, dla którego potrzebne jest założenie, że nie jest potęgą liczby pierwszej. (Założenie, że jest nieparzyste, jest również wymagane, aby ten fakt był prawdziwy.)
Oznacza to, że każde uruchomienie ma co najmniej 50% szans na rozszczepienie Dlatego, jeśli uruchomimy algorytm razy, losowo wybierając za każdym razem, uda nam się rozszczepić z prawdopodobieństwem co najmniej
Podstawowa idea algorytmu jest następująca. Jeśli wybierzemy dla którego rząd liczby modulo jest parzysty, to jest liczbą całkowitą i możemy rozważyć liczby
Korzystając ze wzoru wnioskujemy, że
Wiemy, że z definicji rzędu — co jest innym sposobem powiedzenia, że dzieli bez reszty Oznacza to, że dzieli bez reszty iloczyn
Aby tak było, wszystkie czynniki pierwsze muszą być również czynnikami pierwszymi lub (lub obu) — a dla losowego wyboru okazuje się, że jest mało prawdopodobne, aby wszystkie czynniki pierwsze dzieliły jeden z wyrazów, a żaden nie dzielił drugiego. W przeciwnym razie, o ile niektóre czynniki pierwsze dzielą pierwszy wyraz, a niektóre dzielą drugi, będziemy w stanie znaleźć nietrywialny czynnik , obliczając NWD z pierwszym wyrazem.