Przejdź do głównej treści

Analiza

Teraz przeanalizujemy algorytm Grovera, aby zrozumieć, jak działa. Zaczniemy od tego, co można określić jako analizę symboliczną, w której obliczamy, jak operacja Grovera GG działa na pewne stany, a następnie powiążemy tę analizę symboliczną z geometrycznym obrazem, który pomaga wizualizować działanie algorytmu.

Rozwiązania i nierozwiązania​

Zacznijmy od zdefiniowania dwóch zbiorów ciągów.

A0={x∈Σn:f(x)=0}A1={x∈Σn:f(x)=1}\begin{aligned} A_0 &= \bigl\{ x\in\Sigma^n : f(x) = 0\bigr\} \\ A_1 &= \bigl\{ x\in\Sigma^n : f(x) = 1\bigr\} \end{aligned}

Zbiór A1A_1 zawiera wszystkie rozwiązania naszego problemu wyszukiwania, natomiast A0A_0 zawiera ciągi, które rozwiązaniami nie są (które możemy dla wygody nazywać nierozwiązaniami). Te dwa zbiory spełniają warunki A0∩A1=∅A_0 \cap A_1 = \varnothing i A0∪A1=ΣnA_0 \cup A_1 = \Sigma^n, czyli tworzą bipartycję Σn\Sigma^n.

Następnie zdefiniujemy dwa wektory jednostkowe reprezentujące jednorodne superpozycje nad zbiorami rozwiązań i nierozwiązań.

∣A0⟩=1∣A0∣∑x∈A0∣x⟩∣A1⟩=1∣A1∣∑x∈A1∣x⟩\begin{aligned} \vert A_0\rangle &= \frac{1}{\sqrt{\vert A_0\vert}} \sum_{x\in A_0} \vert x\rangle \\ \vert A_1\rangle &= \frac{1}{\sqrt{\vert A_1\vert}} \sum_{x\in A_1} \vert x\rangle \end{aligned}

Formalnie rzecz biorąc, każdy z tych wektorów jest zdefiniowany wyłącznie wtedy, gdy odpowiadający mu zbiór jest niepusty, ale od tej chwili skupimy się na przypadku, gdy ani A0A_0, ani A1A_1 nie jest pusty. Przypadki A0=∅A_0 = \varnothing oraz A1=∅A_1 = \varnothing można łatwo obsłużyć oddzielnie i zrobimy to później.

Na marginesie: używana tu notacja jest powszechna — ilekroć mamy skończony i niepusty zbiór SS, możemy napisać ∣S⟩\vert S\rangle, żeby oznaczyć wektor stanu kwantowego jednorodnego na elementach SS.

Zdefiniujmy też ∣u⟩\vert u \rangle jako jednorodny stan kwantowy nad wszystkimi nn-bitowymi ciągami:

∣u⟩=1N∑x∈Σn∣x⟩.\vert u\rangle = \frac{1}{\sqrt{N}} \sum_{x\in\Sigma^n} \vert x\rangle.

Zauważ, że

∣u⟩=∣A0∣N∣A0⟩+∣A1∣N∣A1⟩.\vert u\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1 \vert}{N}} \vert A_1\rangle.

Mamy również ∣u⟩=H⊗n∣0n⟩\vert u\rangle = H^{\otimes n} \vert 0^n \rangle, więc ∣u⟩\vert u\rangle reprezentuje stan rejestru Q\mathsf{Q} po inicjalizacji w kroku 1 algorytmu Grovera.

Wynika z tego, że tuż przed iteracjami GG w kroku 2 stan rejestru Q\mathsf{Q} należy do dwuwymiarowej przestrzeni wektorowej rozpiętej przez ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle, przy czym współczynniki przy tych wektorach są liczbami rzeczywistymi. Jak zobaczymy, stan rejestru Q\mathsf{Q} będzie zawsze miał te właściwości — tzn. będzie rzeczywistą kombinacją liniową ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle — po dowolnej liczbie iteracji operacji GG w kroku 2.

Obserwacja dotycząca operacji Grovera​

Teraz skupimy się na operacji Grovera

G=H⊗nZORH⊗nZf,G = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f,

zaczynając od ciekawej obserwacji na jej temat.

Wyobraź sobie na chwilę, że zastąpiliśmy funkcję ff złożeniem ff z funkcją NOT — czyli innymi słowy, funkcją otrzymaną przez odwrócenie bitu wyjściowego ff. Nazwiemy tę nową funkcję gg, i możemy ją wyrazić symbolicznie na kilka równoważnych sposobów.

g(x)=¬f(x)=1⊕f(x)=1−f(x)={1f(x)=00f(x)=1g(x) = \neg f(x) = 1 \oplus f(x) = 1 - f(x) = \begin{cases} 1 & f(x) = 0\\[1mm] 0 & f(x) = 1 \end{cases}

Zauważ, że

(−1)g(x)=(−1)1⊕f(x)=−(−1)f(x)(-1)^{g(x)} = (-1)^{1 \oplus f(x)} = - (-1)^{f(x)}

dla każdego ciągu x∈Σnx\in\Sigma^n, i dlatego

Zg=−Zf.Z_g = - Z_f.

To oznacza, że gdybyśmy mieli zastąpić funkcję ff funkcją gg, algorytm Grovera nie działałby inaczej — ponieważ stany, które otrzymujemy z algorytmu w obu przypadkach są koniecznie równoważne aż do globalnej fazy.

To nie jest problem! Mówiąc intuicyjnie, algorytmowi nie zależy na tym, które ciągi są rozwiązaniami, a które nie — musi jedynie umieć odróżnić rozwiązania od nierozwiązań, aby działać poprawnie.

Działanie operacji Grover​

Rozważmy teraz działanie GG na wektory stanu kwantowego ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle.

Rozważmy teraz działanie GG na wektorach stanu kwantowego ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle.

Zf∣A0⟩=∣A0⟩Zf∣A1⟩=−∣A1⟩\begin{aligned} Z_f \vert A_0\rangle & = \vert A_0\rangle \\[1mm] Z_f \vert A_1\rangle & = -\vert A_1\rangle \end{aligned}

Po drugie, mamy operację H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. Operacja ZORZ_{\mathrm{OR}} jest zdefiniowana jako

ZOR∣x⟩={∣x⟩x=0n−∣x⟩x≠0n,Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[2mm] -\vert x\rangle & x \neq 0^n, \end{cases}

ponownie dla każdego ciągu x∈Σnx\in\Sigma^n, i wygodnym alternatywnym sposobem wyrażenia tej operacji jest taki:

ZOR=2∣0n⟩⟨0n∣−I.Z_{\mathrm{OR}} = 2 \vert 0^n \rangle \langle 0^n \vert - \mathbb{I}.

Prostym sposobem na sprawdzenie, że to wyrażenie zgadza się z definicją ZORZ_{\mathrm{OR}}, jest obliczenie jego działania na standardowych stanach bazowych.

Prosty sposób na zweryfikowanie, że to wyrażenie zgadza się z definicją ZOR,Z_{\mathrm{OR}}, to obliczenie jego działania na stanach bazy standardowej.

H⊗nZORH⊗n=2H⊗n∣0n⟩⟨0n∣H⊗n−I=2∣u⟩⟨u∣−I,H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} = 2 H^{\otimes n} \vert 0^n \rangle \langle 0^n \vert H^{\otimes n} - \mathbb{I} = 2 \vert u \rangle \langle u \vert - \mathbb{I},

używając tej samej notacji ∣u⟩\vert u \rangle, którą użyliśmy powyżej dla jednolitej superpozycji po wszystkich nn-bitowych ciągach.

Teraz mamy to, czego potrzebujemy do obliczenia działania GG na ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle. Najpierw obliczmy działanie GG na ∣A0⟩\vert A_0\rangle.

G∣A0⟩=(2∣u⟩⟨u∣−I)Zf∣A0⟩=(2∣u⟩⟨u∣−I)∣A0⟩=2∣A0∣N∣u⟩−∣A0⟩=2∣A0∣N(∣A0∣N∣A0⟩+∣A1∣N∣A1⟩)−∣A0⟩=(2∣A0∣N−1)∣A0⟩+2∣A0∣⋅∣A1∣N∣A1⟩=∣A0∣−∣A1∣N∣A0⟩+2∣A0∣⋅∣A1∣N∣A1⟩\begin{aligned} G \vert A_0 \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) Z_f \vert A_0\rangle \\ & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) \vert A_0\rangle \\ & = 2 \sqrt{\frac{\vert A_0\vert}{N}} \vert u\rangle -\vert A_0 \rangle\\ & = 2 \sqrt{\frac{\vert A_0\vert}{N}} \biggl( \sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle\biggr) -\vert A_0 \rangle \\ & = \biggl( \frac{2\vert A_0\vert}{N} - 1\biggr) \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle \\ & = \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle \end{aligned}

Po drugie, obliczmy działanie GG na ∣A1⟩\vert A_1\rangle.

G∣A1⟩=(2∣u⟩⟨u∣−I)Zf∣A1⟩=−(2∣u⟩⟨u∣−I)∣A1⟩=−2∣A1∣N∣u⟩+∣A1⟩=−2∣A1∣N(∣A0∣N∣A0⟩+∣A1∣N∣A1⟩)+∣A1⟩=−2∣A1∣⋅∣A0∣N∣A0⟩+(1−2∣A1∣N)∣A1⟩=−2∣A1∣⋅∣A0∣N∣A0⟩+∣A0∣−∣A1∣N∣A1⟩\begin{aligned} G \vert A_1 \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I} \bigr) Z_f \vert A_1\rangle \\ & = - \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I} \bigr) \vert A_1\rangle \\ & = - 2 \sqrt{\frac{\vert A_1\vert}{N}} \vert u\rangle + \vert A_1 \rangle \\ & = - 2 \sqrt{\frac{\vert A_1\vert}{N}} \biggl(\sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle\biggr) + \vert A_1 \rangle \\ & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \biggl( 1 - \frac{2\vert A_1\vert}{N} \biggr) \vert A_1 \rangle \\ & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_1 \rangle \end{aligned}

W obu przypadkach używamy równania

∣u⟩=∣A0∣N∣A0⟩+∣A1∣N∣A1⟩\vert u\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1 \vert}{N}} \vert A_1\rangle

wraz z wyrażeniami

⟨u∣A0⟩=∣A0∣Nand⟨u∣A1⟩=∣A1∣N\langle u \vert A_0\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \qquad\text{and}\qquad \langle u \vert A_1\rangle = \sqrt{\frac{\vert A_1 \vert}{N}}

które następują.

Podsumowując, mamy

G∣A0⟩=∣A0∣−∣A1∣N∣A0⟩+2∣A0∣⋅∣A1∣N∣A1⟩G∣A1⟩=−2∣A1∣⋅∣A0∣N∣A0⟩+∣A0∣−∣A1∣N∣A1⟩.\begin{aligned} G \vert A_0 \rangle & = \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle\\[2mm] G \vert A_1 \rangle & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_1 \rangle. \end{aligned}

Jak już zauważyliśmy, stan Q\mathsf{Q} tuż przed krokiem 2 zawiera się w dwuwymiarowej przestrzeni rozpiętej przez ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle, a właśnie wykazaliśmy, że GG odwzorowuje każdy wektor z tej przestrzeni na inny wektor w tej samej przestrzeni. Oznacza to, że na potrzeby analizy możemy skupić uwagę wyłącznie na tej podprzestrzeni.

Aby lepiej zrozumieć, co dzieje się w tej dwuwymiarowej przestrzeni, wyrażmy działanie GG na tej przestrzeni jako macierz,

M=(∣A0∣−∣A1∣N−2∣A1∣⋅∣A0∣N2∣A0∣⋅∣A1∣N∣A0∣−∣A1∣N),M = \begin{pmatrix} \frac{\vert A_0\vert - \vert A_1\vert}{N} & -\frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \\[2mm] \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} & \frac{\vert A_0\vert - \vert A_1\vert}{N} \end{pmatrix},

której pierwszy i drugi wiersz/kolumna odpowiadają odpowiednio ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle. Do tej pory w tej serii zawsze łączyliśmy wiersze i kolumny macierzy ze stanami klasycznymi układu, ale macierzy można też używać do opisywania działań odwzorowań liniowych na różnych bazach — tak jak tutaj.

Choć na pierwszy rzut oka wcale nie jest to oczywiste, macierz MM otrzymujemy, podnosząc do kwadratu prostszą macierz.

(∣A0∣N−∣A1∣N∣A1∣N∣A0∣N)2=(∣A0∣−∣A1∣N−2∣A1∣⋅∣A0∣N2∣A0∣⋅∣A1∣N∣A0∣−∣A1∣N)=M\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix}^2 = \begin{pmatrix} \frac{\vert A_0\vert - \vert A_1\vert}{N} & -\frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \\[2mm] \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} & \frac{\vert A_0\vert - \vert A_1\vert}{N} \end{pmatrix} = M

Macierz

(∣A0∣N−∣A1∣N∣A1∣N∣A0∣N)\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix}

jest macierzą obrotu, którą możemy alternatywnie zapisać jako

(∣A0∣N−∣A1∣N∣A1∣N∣A0∣N)=(cos⁡(θ)−sin⁡(θ)sin⁡(θ)cos⁡(θ))\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix} = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\[2mm] \sin(\theta) & \cos(\theta) \end{pmatrix}

dla

θ=sin⁡−1(∣A1∣N).\theta = \sin^{-1}\biggl(\sqrt{\frac{\vert A_1\vert}{N}}\biggr).

Ten kąt θ\theta odegra bardzo ważną rolę w dalszej analizie, dlatego warto podkreślić jego znaczenie już teraz, gdy widzimy go po raz pierwszy.

Mając to wyrażenie macierzy przed oczami, obserwujemy, że

M=(cos⁡(θ)−sin⁡(θ)sin⁡(θ)cos⁡(θ))2=(cos⁡(2θ)−sin⁡(2θ)sin⁡(2θ)cos⁡(2θ)).M = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\[2mm] \sin(\theta) & \cos(\theta) \end{pmatrix}^2 = \begin{pmatrix} \cos(2\theta) & -\sin(2\theta) \\[2mm] \sin(2\theta) & \cos(2\theta) \end{pmatrix}.

Wynika to z faktu, że dwukrotne obrócenie o kąt θ\theta jest równoważne obrotowi o kąt 2θ2\theta. Innym sposobem, by to zobaczyć, jest skorzystanie z alternatywnego wyrażenia

θ=cos⁡−1(∣A0∣N),\theta = \cos^{-1}\biggl(\sqrt{\frac{\vert A_0\vert}{N}}\biggr),

wraz z formułami na kąt podwojony z trygonometrii:

cos⁡(2θ)=cos⁡2(θ)−sin⁡2(θ)sin⁡(2θ)=2sin⁡(θ)cos⁡(θ).\begin{aligned} \cos(2\theta) & = \cos^2(\theta) - \sin^2(\theta)\\[1mm] \sin(2\theta) & = 2 \sin(\theta)\cos(\theta). \end{aligned}

Podsumowując, stan rejestru Q\mathsf{Q} na początku kroku 2 wynosi

∣u⟩=∣A0∣N∣A0⟩+∣A1∣N∣A1⟩=cos⁡(θ)∣A0⟩+sin⁡(θ)∣A1⟩,\vert u\rangle = \sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle = \cos(\theta) \vert A_0\rangle + \sin(\theta) \vert A_1\rangle,

a efekt zastosowania GG do tego stanu polega na obróceniu go o kąt 2θ2\theta w przestrzeni rozpiętej przez ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle. Mamy więc na przykład

G∣u⟩=cos⁡(3θ)∣A0⟩+sin⁡(3θ)∣A1⟩G2∣u⟩=cos⁡(5θ)∣A0⟩+sin⁡(5θ)∣A1⟩G3∣u⟩=cos⁡(7θ)∣A0⟩+sin⁡(7θ)∣A1⟩\begin{aligned} G \vert u \rangle &= \cos(3\theta) \vert A_0\rangle + \sin(3\theta) \vert A_1\rangle\\[1mm] G^2 \vert u \rangle &= \cos(5\theta) \vert A_0\rangle + \sin(5\theta) \vert A_1\rangle\\[1mm] G^3 \vert u \rangle &= \cos(7\theta) \vert A_0\rangle + \sin(7\theta) \vert A_1\rangle \end{aligned}

i ogólnie

Gt∣u⟩=cos⁡((2t+1)θ)∣A0⟩+sin⁡((2t+1)θ)∣A1⟩.G^t \vert u \rangle = \cos\bigl((2t + 1)\theta\bigr) \vert A_0\rangle + \sin\bigl((2t + 1)\theta\bigr) \vert A_1\rangle.

Obraz geometryczny​

Teraz połączmy analizę, którą właśnie przeprowadziliśmy, z obrazem geometrycznym. Chodzi o to, że operacja GG jest iloczynem dwóch odbić, ZfZ_f i H⊗nZORH⊗n.H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. A efektem złożenia dwóch odbić jest wykonanie obrotu.

Zacznijmy od ZfZ_f. Jak już wcześniej zauważyliśmy, mamy

Zf∣A0⟩=∣A0⟩Zf∣A1⟩=−∣A1⟩.\begin{aligned} Z_f \vert A_0\rangle & = \vert A_0\rangle \\[1mm] Z_f \vert A_1\rangle & = -\vert A_1\rangle. \end{aligned}

W dwuwymiarowej przestrzeni wektorowej rozpiętej przez ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle, jest to odbicie względem prostej równoległej do ∣A0⟩\vert A_0\rangle, którą nazwiemy L1L_1. Oto rysunek ilustrujący działanie tego odbicia na hipotetyczny wektor jednostkowy ∣ψ⟩\vert\psi\rangle, który zakładamy jest rzeczywistą kombinacją liniową ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle.

A figure depicting the action of a reflection on a vector.

Następnie mamy operację H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}, którą już widzieliśmy i którą można zapisać jako

H⊗nZORH⊗n=2∣u⟩⟨u∣−I.H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} = 2 \vert u \rangle \langle u \vert - \mathbb{I}.

Jest to również odbicie, tym razem względem prostej L2L_2 równoległej do wektora ∣u⟩\vert u\rangle. Oto rysunek przedstawiający działanie tego odbicia na wektor jednostkowy ∣ψ⟩\vert\psi\rangle.

A figure depicting the action of a second reflection on a vector.

Gdy złożymy te dwa odbicia, otrzymamy obrót — o dwukrotność kąta między prostymi odbicia — co ilustruje ten rysunek.

A figure depicting the action of the Grover operation on a vector.

Wyjaśnia to, w kategoriach geometrycznych, dlaczego efektem operacji Grovera jest obrót kombinacji liniowych ∣A0⟩\vert A_0\rangle i ∣A1⟩\vert A_1\rangle o kąt 2θ2\theta.