Przeskocz do treści

Delta mi!

Co to jest?

Jak to działa?

Algorytm faktoryzacji Shora

Wojciech Czerwiński

o artykule ...

  • Publikacja w Delcie: grudzień 2017
  • Publikacja elektroniczna: 2 grudnia 2017
  • Autor: Wojciech Czerwiński
    Afiliacja: adiunkt, Instytut Informatyki, Uniwersytet Warszawski
  • Wersja do druku [application/pdf]: (148 KB)

W 1994 roku Peter Shor, pracujący wówczas w Bell Labs w New Jersey, pokazał, jak przy użyciu hipotetycznego komputera kwantowego rozłożyć w czasie wielomianowym dowolną liczbę naturalną na czynniki pierwsze. W tamtym czasie algorytmy kwantowe dopiero raczkowały. To właśnie odkrycie Shora spowodowało wielki rozwój tej dziedziny. Społeczność informatyków zrozumiała, że gdyby udało się zbudować komputer kwantowy rozsądnej wielkości, to świat stałby się istotnie inny. Nie jest bowiem znany żaden algorytm dla problemu faktoryzacji, czyli rozkładu na dzielniki pierwsze, który działa w czasie wielomianowym na komputerze klasycznym. Co więcej, nawet nie znaleziono algorytmu losowego, który z dużym prawdopodobieństwem w zazwyczaj niedługim czasie faktoryzuje liczbę: nie jest po prostu znana zupełnie żadna rozsądna heurystyka...

obrazek

W 1994, ale też i teraz, w 2017 roku, po prostu nie umiemy rozkładać szybko liczb na czynniki pierwsze. A na trudności faktoryzacji opiera się m.in. kryptologia, najbardziej znany kryptosystem RSA dałby się łatwo łamać, gdybyśmy umieli szybko rozkładać liczby na czynniki pierwsze. Drugim najbardziej popularnym problemem, na którego trudności opiera się wiele w kryptologii, jest problem logarytmu dyskretnego (dla danych |a,b ∈N i liczby pierwszej |p znajdź k takie, że ak ≡b mod p). Warto wiedzieć, że w tym samym artykule Shor udowodnił również, że komputer kwantowy umie rozwiązywać problem logarytmu dyskretnego w czasie wielomianowym. Algorytm Shora nie tylko zainspirował intensywne badania w tej dziedzinie, ale chyba do tej pory jest najbardziej znanym i celebrowanym algorytmem kwantowym.

W tym artykule postaramy się zrozumieć najistotniejsze idee w algorytmie Shora. Niektóre szczegóły techniczne pominiemy, gdyż tłumaczenie wszystkiego zajęłoby raczej kilkanaście stron niż kilka.

Sprecyzujmy problem. Dostajemy liczbę |n∈ N. W naszych rozważaniach skupimy się na przypadku, gdy n jest iloczynem dwóch liczb pierwszych, tj. |n = p1p2. Ten przypadek jest również trudny (nie ma dla niego żadnych szybko działających heurystyk), a algorytm Shora w ogólności działa prawie identycznie, jak dla tego przypadku. Nasz cel to znaleźć liczby |p1 i |p2. Po pierwsze powiedzmy sobie od razu, że algorytm Shora jest oparty na losowości. Uruchomiony wiele razy z pewnym dużym (bliskim |1 ) prawdopodobieństwem znajdzie rozkład n = p1p2. Myślmy, że zarówno |p , 1 jak i |p 2 mają po 100 cyfr, wtedy będziemy mieli odpowiednie wyobrażenie o tym, co się da, a czego nie da się szybko zrobić.

Pierwszy krok, niemający jeszcze żadnego związku z kwantami, to redukcja faktoryzacji do problemu rzędu elementu modulo n. Problem ten, dla danych |x,n ∈N, pyta o najmniejsze naturalne r > 0 takie, że xr ≡1 mod n (takie |r nazywamy rzędem |x modulo n). Przy założeniu, że umiemy w czasie wielomianowym znajdować rząd elementu (wszędzie tu używana jest losowość, więc przestaniemy się na niej skupiać, a czasem nawet o niej wspominać), pokażemy, jak rozłożyć n na czynniki w czasie wielomianowym. Rozważmy n = p1p2 i wylosujmy liczbę x ze zbioru {1,...,n − 1}. Jeśli |nwd(x, n) ≠1 (co możemy szybko sprawdzić algorytmem Euklidesa), to świetnie, bo wtedy nwd(x, n) = p 1 albo nwd(x, n) = p 2 i znaleźliśmy rozkład. Ale to się zdarza rzadko. Załóżmy więc, że |nwd(x, n) = 1. Można wykazać (nie bardzo trudno, szczegóły pominiemy), że dla co najmniej jednej czwartej wylosowanych |x zachodzą następujące dwa warunki: 1) |r, czyli rząd |x, jest parzysty, 2) |xr2 /≡± 1 mod n. Dla takiego x mamy  r r2 r2 |n (x − 1) = (x −1) (x + 1). Jednak skoro |n nie dzieli żadnego z dwóch nawiasów, to musi być tak, że p1 dzieli jeden z nich, a |p2 drugi. Zatem  r |nwd (n,x 2− 1) jest równe albo |p1, albo p2. Łatwo je obliczyć algorytmem Euklidesa, a tym samym znaleźć rozkład n. A więc wystarczy skupić się na znajdowaniu rzędu liczby |x modulo n, co zrobimy przy użyciu algorytmu kwantowego.

Ustalmy pewne q, które należy do przedziału  2 2 (n ,2n ] oraz jest potęgą dwójki, niech q = 2ℓ. Nasz algorytm na wejściu będzie miał 2ℓ drutów, czyli będzie operował na 2ℓ kubitach (albo jeszcze inaczej: stan pamięci może być opisany przez wektor długości 1 z C22`). Te 2ℓ drutów podzielimy na dwa segmenty po ℓ drutów. Zaczynamy od stanu pamięci równego 0 na wszystkich kubitach. Czyli, formalnie rzecz biorąc, jest to stan  0...0⟩, gdzie ciąg zer ma długość 2ℓ. My jednak na potrzeby naszego algorytmu będziemy o nim myśleli jako o  0 ℓ⟩ ⊗ 0ℓ⟩, co będziemy zapisywać w skrócie jako  ℓ ℓ | 0 ⟩ 0 ⟩.

obrazek

Cały obwód kwantowy realizujący algorytm Shora przedstawiony jest na rysunku. Wchodzi do niego 2ℓ drutów po lewej, do których po kolei aplikowane są bramki kwantowe i na końcu wykonywany jest pomiar. Fakt, że algorytm jest wielomianowy, oznacza, że w obwodzie jest wielomianowo wiele podstawowych bramek (czyli bramek Hadamarda |H, obrotu T i kontrolowanej negacji CNOT, z których składamy wszystkie macierze unitarne, potrzebne do obliczeń). Teraz szczegółowo opiszemy, co dzieje się po kolei (od lewej).

Najpierw robimy to, co często robią na początek algorytmy kwantowe, czyli zamieniamy stan "same zera" na superpozycję wszystkich możliwych stanów bazowych, każdy z równym prawdopodobieństwem. Tyle, że my teraz zrobimy to tylko na pierwszych ℓ kubitach, tj. w pierwszym segmencie. Aby to zrobić, używamy, jak zawsze w takim przypadku, bramek Hadamarda

H = √1--[1 1]. 2 1 −1

Bramka |H przekształca | 0⟩ na  1 H 0⟩= --2( 0⟩+ 1⟩ ), czyli na superpozycję | 0⟩ i  1⟩ z równym prawdopodobieństwem. Jeśli zastosujemy bramkę |H do każdego z pierwszych |ℓ kubitów, to stan  0ℓ⟩ 0ℓ⟩ zostanie przekształcony na stan  ℓ |Pq−a 1 0( -12) a⟩ 0 ℓ⟩ = Pqa− 10-1q a ⟩ 0ℓ⟩, gdzie przez | a⟩ rozumiemy stan określony przez binarną reprezentację a, np. dla |ℓ= 4 przez  9 ⟩= 1001⟩. Formalnie rzecz biorąc, powyżej przyłożyliśmy do aktualnego stanu przekształcenie będące produktem ℓ macierzy Hadamarda H i |ℓ macierzy identycznościowych I. Jednak warto patrzeć na to intuicyjnie, jako na przyłożenie bramki Hadamarda do każdego kubitu oddzielnie, bo takie jest właśnie znaczenie produktu tensorowego.

obrazek

Następnie w algorytmie przykładamy do wszystkich drutów bramkę, która liczy funkcję  22` 22` | f C C (czyli z 2ℓ kubitów w 2ℓ kubitów) taką, że

 f( a ⟩ 0ℓ⟩) = a⟩ xa mod n⟩.

Przypomnijmy, że x to nasza wylosowana liczba ze zbioru {1,...,n −1}. Na rysunku obwód obliczający funkcję  f oznaczamy przez Of Sprawdzenie, że obliczenie funkcji  f jest unitarne oraz że da się je zrealizować obwodem o wielomianowej liczbie małych bramek, nie jest specjalnie trudne. Tutaj jednak pominiemy szczegóły. A więc po przejściu przez bramkę Of stan jest następującą superpozycją:

q−1 1 Q √--- a⟩ xa mod n ⟩. a 0 q

Teraz wykonujemy pomiar na drugim segmencie, czyli na drugich |ℓ kubitach. W wyniku pomiaru zmierzona zostaje jakaś (nie wiemy z góry jaka!) wartość | xs mod n ⟩. Przy czym nie wiadomo wcale, czy na pierwszych |ℓ kubitach jest wartość s. Może być również tak, że jest tam wartość |s+ r, gdyż |xs+r = xs⋅xr≡ xs ⋅1≡ xs mod n. Podobnie może być tam wartość |s+ 2r,s+ 3r,... Tak jak po każdym pomiarze, teraz stan układu jest superpozycją tych stanów bazowych sprzed pomiaru, które są zgodne z pomiarem.

W dalszej części rozważa się dwa przypadki. Pierwszy, gdy r q, jest łatwiejszy, a drugi, gdy r q trudniejszy. My przyjrzyjmy się pierwszemu, bo idea jest w obu przypadkach podobna, tylko w drugim jest więcej szczegółów technicznych. W tym przypadku z pomiarem  s x mod n (dla |0⩽ s < r) zgodne są wartości |s,s+ r,s+ 2r,...,s +(q − r) na pierwszych |ℓ kubitach. Zatem po pomiarze stan układu na pierwszych ℓ kubitach jest postaci

 1 q~r −1 √----- Q s+ jr⟩. q/r j 0

Widać teraz, że |r jest jakoś związane ze stanem układu. Pytanie tylko, jak je z niego wydobyć. Jeśli zmierzymy po prostu wartość tych kubitów, to otrzymamy pewną liczbę s+ jr, która będzie jakąś liczbą ze zbioru |{0,...,q− 1}, wiele nam nie powie. Nie znamy przecież s, żeby móc obliczyć | jr, a tym bardziej nie znamy  j, żeby obliczyć z  jr wartość |r. Musimy więc postępować inaczej.

Tu w sukurs przychodzi nam dziedzina, która wielu Czytelnikom zapewne wcale nie kojarzy się z faktoryzacją liczb pierwszych. Przyjrzyjmy się jeszcze raz naszemu pytaniu, z nieco innej strony. Możemy pomyśleć o naszej superpozycji jako o ciągu wartości  a⟩, dla których przy większości jest współczynnik 0, ale dla niektórych niezerowy współczynnik  1 --q~r. Te wartości o niezerowych współczynnikach powtarzają się co r i chcemy odkryć, z jakim okresem to robią. Wróćmy na chwilę do świata niekwantowego i zastanówmy się, co należy robić w takich sytuacjach, jak znaleźć okres pewnego okresowego zjawiska. Zauważmy, że nasze ucho robi to przez cały czas. Dźwięk, który słyszymy, rozkłada się bowiem na wiele składowych o różnych częstotliwościach. Ucho właśnie rozkłada dźwięk na składowe, które wyglądają jak sinusy i kosinusy. To, co robi, nazywa się w matematyce transformatą Fouriera. Okazuje się, że każdą funkcję okresową da się rozłożyć na nieskończoną sumę sinusów i kosinusów. Podobnie robi się, gdy mamy sygnał, który nie jest ciągły, lecz dyskretny. Tylko, że wtedy rozkładamy na skończoną sumę próbkowań kosinusów. Czytelnik Zapoznany Z Algebrą Liniową może sobie wyobrażać oba przekształcenia jako wyrażanie funkcji okresowej (bądź jej próbkowania) po prostu w innej bazie, złożonej z sinusów i kosinusów (bądź ich próbkowań). Ciekawostką może być, że ta sama transformata jest wykorzystywana w innych miejscach informatyki, np. w formatach jpeg lub mpeg.

A więc w świecie kwantowym, jeśli chcemy odnaleźć coś w stylu okresu w naszym stanie, też powinniśmy zastosować transformatę Fouriera, tylko że kwantową. Szczęśliwie rzeczywiście istnieje kwantowa transformata Fouriera (QFT - quantum Fourier transform), która okazuje się unitarna i daje się zaimplementować za pomocą wielomianowej liczby podstawowych bramek kwantowych. Przyłożenie jej do naszej konfiguracji | -1-- q~r −1 s+ jr⟩ q~r P j 0 na wyjściu daje współczynniki przy odpowiednich okresach. Dostajemy pewną superpozycję Pq j− 01c j j⟩. Okazuje się, że dla przypadku gdy |q r współczynniki |c j są niezerowe jedynie dla  j będących wielokrotnościami q/r. A więc możemy teraz wykonać pomiar i jesteśmy pewni, że otrzymaliśmy jakąś wielokrotność q/r. Gdy wykonamy wiele (ale wielomianowo wiele) takich pomiarów i weźmiemy minimum albo nwd, to obliczymy z dużym prawdopodobieństwem |q/r. A zatem poznamy również i rząd |r, co kończy naszą opowieść.

Czytelnikom Zainteresowanym Szczegółami polecamy oryginalny artykuł Petera Shora dostępny pod adresem: arxiv.org/abs/quant-ph/9508027.