Algorytm Deutscha rozwiązuje problem parzystości dla szczególnego przypadku, gdy n=1.
W kontekście obliczeń kwantowych problem ten jest czasem nazywany problemem Deutscha i takiej nomenklatury będziemy się trzymać w tej lekcji.
Dokładnie rzecz ujmując, dane wejściowe są reprezentowane przez funkcję f:Σ→Σ z jednego bitu do jednego bitu.
Istnieją cztery takie funkcje:
Pierwsza i ostatnia z tych funkcji są stałe, a środkowe dwie są zrównoważone (ang. balanced), co oznacza, że dwie możliwe wartości wyjściowe funkcji występują tyle samo razy, gdy przebiegamy po wszystkich wejściach.
Problem Deutscha polega na ustaleniu, do której z tych dwóch kategorii należy dana funkcja wejściowa: stała czy zrównoważona.
Problem Deutscha
Wejście: funkcja f:{0,1}→{0,1}
Wyjście: 0 jeśli f jest stała, 1 jeśli f jest zrównoważona
Jeśli potraktujemy funkcję wejściową f w problemie Deutscha jako reprezentację losowego dostępu do ciągu znaków, myślimy o dwubitowym ciągu: f(0)f(1).
functionf1f2f3f4string00011011
Patrząc na to w ten sposób, problem Deutscha sprowadza się do obliczenia parzystości (lub, co równoważne, XOR) dwóch bitów.
Każdy klasyczny algorytm z zapytaniami, który poprawnie rozwiązuje ten problem, musi zapytać oba bity: f(0) i f(1).
Jeśli na przykład dowiemy się, że f(1)=1, odpowiedź nadal może wynosić 0 lub 1, zależnie od tego, czy f(0)=1, czy f(0)=0.
Każdy inny przypadek jest podobny; znajomość tylko jednego z dwóch bitów nie dostarcza żadnej informacji o ich parzystości.
Tak więc circuit logiczny opisany w poprzedniej sekcji jest najlepszym, co możemy osiągnąć pod względem liczby zapytań potrzebnych do rozwiązania tego problemu.
Algorytm Deutscha rozwiązuje problem Deutscha za pomocą jednego zapytania, zapewniając tym samym wymierną przewagę obliczeń kwantowych nad klasycznymi.
Może to być skromna przewaga — jedno zapytanie zamiast dwóch — ale od czegoś trzeba zacząć.
Postęp naukowy czasem rodzi się z pozornie skromnych początków.
Aby przeanalizować algorytm Deutscha, prześledzmy działanie powyższego układu i określmy stany qubitów w momentach zaznaczonych na poniższym rysunku:
Stan początkowy to ∣1⟩∣0⟩, a dwie operacje Hadamarda po lewej stronie układu przekształcają go do postaci
∣π1⟩=∣−⟩∣+⟩=21(∣0⟩−∣1⟩)∣0⟩+21(∣0⟩−∣1⟩)∣1⟩.
(Jak zawsze, stosujemy tu konwencję kolejności qubitów przyjętą w Qiskit, gdzie górny qubit jest po prawej, a dolny po lewej.) Zapisanie tego stanu iloczynowego częściowo w postaci rozłożonej (z wyciągniętymi stanami qubitu 1) może wydawać się nieintuicyjne, jednak dzięki temu późniejsze wyrażenia będą bardziej zwięzłe.
Następnie wykonywana jest bramka Uf.
Zgodnie z definicją bramki Uf, wartość funkcji f dla klasycznego stanu górnego/prawego qubitu jest XORowana na dolny/lewy qubit, co przekształca ∣π1⟩ w stan
Właśnie stało się coś interesującego!
Mimo że działanie bramki Uf na stany bazy standardowej pozostawia górny/prawy qubit bez zmian i XORuje wartość funkcji na dolny/lewy qubit, tutaj widzimy, że stan górnego/prawego qubitu zmienił się (ogólnie rzecz biorąc), podczas gdy stan dolnego/lewego qubitu pozostał taki sam — przed i po zastosowaniu bramki Uf jest on w stanie ∣−⟩.
Zjawisko to znane jest jako phase kickback i wrócimy do niego niebawem.
Po ostatnim uproszczeniu, polegającym na wyciągnięciu czynnika (−1)f(0) przed nawias, otrzymujemy następujące wyrażenie na stan ∣π2⟩:
Zauważ, że w tym wyrażeniu w wykładniku −1 mamy f(0)⊕f(1), a nie f(1)−f(0), czego moglibyśmy się spodziewać patrząc czysto algebraicznie — jednak wynik jest w obu przypadkach identyczny.
Wynika to z tego, że wartość (−1)k dla dowolnej liczby całkowitej k zależy wyłącznie od tego, czy k jest parzyste, czy nieparzyste.
Po zastosowaniu ostatniej bramki Hadamarda do górnego qubitu otrzymujemy stan
Zanim przejdziemy dalej, przyjrzyjmy się powyższej analizie z nieco innego kąta — może to rzucić nieco światła na zjawisko phase kickback.
Na początku zauważmy, że poniższy wzór działa dla wszystkich możliwych wartości bitów b,c∈Σ.
∣b⊕c⟩=Xc∣b⟩
Można to sprawdzić, podstawiając dwie możliwe wartości c=0 i c=1:
∣b⊕0⟩∣b⊕1⟩=∣b⟩=I∣b⟩=X0∣b⟩=∣¬b⟩=X∣b⟩=X1∣b⟩.
Korzystając z tego wzoru, widzimy, że
Uf(∣b⟩∣a⟩)=∣b⊕f(a)⟩∣a⟩=(Xf(a)∣b⟩)∣a⟩
dla dowolnych bitów a,b∈Σ.
Ponieważ ten wzór jest prawdziwy dla b=0 i b=1, widzimy na mocy liniowości, że
Uf(∣ψ⟩∣a⟩)=(Xf(a)∣ψ⟩)∣a⟩
dla wszystkich wektorów stanu qubit ∣ψ⟩, a zatem
Uf(∣−⟩∣a⟩)=(Xf(a)∣−⟩)∣a⟩=(−1)f(a)∣−⟩∣a⟩.
Kluczem, który sprawia, że to działa, jest fakt, że X∣−⟩=−∣−⟩.
W języku matematyki wektor ∣−⟩ jest wektorem własnym macierzy X o wartości własnej−1.
Wektory własne i wartości własne omówimy szczegółowo w nadchodzącej lekcji poświęconej estymacji fazy i faktoryzacji, gdzie zjawisko phase kickback zostanie uogólnione na inne operacje unitarne.
Mając na uwadze, że skalary swobodnie „przepływają" przez iloczyny tensorowe, znajdujemy alternatywny sposób uzasadnienia, jak operacja Uf przekształca ∣π1