Skip to main content
IBM Quantum Platform

Analisi

Ora analizzeremo l'algoritmo di Grover per capire come funziona. Inizieremo con quella che potremmo definire un'analisi simbolica, in cui calcoliamo come l'operazione di Grover GG agisce su determinati stati, e poi legheremo questa analisi simbolica a un'immagine geometrica utile per visualizzare il funzionamento dell'algoritmo.


Soluzioni e non soluzioni

Iniziamo definendo due serie di stringhe.

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}

L'insieme A1A_1 contiene tutte le soluzioni al nostro problema di ricerca, mentre A0A_0 contiene le stringhe che non sono soluzioni (che possiamo chiamare “non-soluzioni” quando è opportuno). Questi due insiemi soddisfano le condizioni A0∩A1=∅A_0 \cap A_1 = \varnothing e A0∪A1=ΣnA_0 \cup A_1 = \Sigma^n, il che significa che si tratta di una bipartizione di Σn\Sigma^n.

Successivamente definiremo due vettori unitari che rappresentano le sovrapposizioni uniformi sugli insiemi di soluzioni e non soluzioni.

∣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}

Dal punto di vista formale, ognuno di questi vettori è definito solo quando l'insieme corrispondente è non vuoto, ma di seguito ci concentreremo sul caso in cui né A0A_0 né A1A_1 siano vuoti. I casi di A0=∅A_0 = \varnothing e A1=∅A_1 = \varnothing possono essere trattati separatamente e lo faremo più avanti.

Per inciso, la notazione qui utilizzata è comune: ogni volta che abbiamo un insieme finito e non vuoto SS, possiamo scrivere ∣S⟩\vert S\rangle per indicare il vettore di stato quantistico che è uniforme sugli elementi di SS.

Definiamo inoltre che ∣u⟩\vert u \rangle è uno stato quantistico uniforme su tutte le stringhe di nn bit:

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

Si noti che

∣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.

Abbiamo anche che ∣u⟩=H⊗n∣0n⟩\vert u\rangle = H^{\otimes n} \vert 0^n \rangle, quindi ∣u⟩\vert u\rangle rappresenta lo stato del registro Q\mathsf{Q} dopo l'inizializzazione al passo 1 dell'algoritmo di Grover.

Ciò implica che, immediatamente prima che avvengano le iterazioni di GG nella fase 2, lo stato di Q\mathsf{Q} sia contenuto nello spazio vettoriale bidimensionale generato da ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle, e che inoltre i coefficienti di questi vettori siano numeri reali. Come vedremo, lo stato Q\mathsf{Q} avrà sempre queste proprietà — il che significa che lo stato è una combinazione lineare reale di ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle — dopo un numero qualsiasi di iterazioni dell’operazione GG nel passaggio 2.


Un'osservazione sull'operazione Grover

Passiamo ora all'operazione di Grover

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

iniziando con un'interessante osservazione al riguardo.

Immaginiamo per un momento di sostituire la funzione ff con la composizione di ff e della funzione NOT — ovvero, la funzione che si ottiene invertendo il bit di uscita di ff. Chiameremo questa nuova funzione gg e potremo esprimerla utilizzando i simboli in diversi modi alternativi.

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}

Si noti che

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

per ogni stringa x∈Σnx\in\Sigma^n, e quindi

Zg=−Zf.Z_g = - Z_f.

Ciò significa che se sostituissimo la funzione ff con la funzione gg, l'algoritmo di Grover non funzionerebbe in modo diverso, poiché gli stati ottenuti dall'algoritmo nei due casi sono necessariamente equivalenti, a parte una fase globale.

Non è un problema! Intuitivamente, l'algoritmo non si preoccupa di quali stringhe siano soluzioni e quali non soluzioni: deve solo essere in grado di distinguere le soluzioni e le non soluzioni per funzionare correttamente.


Azione dell'operazione Grover

Consideriamo ora l'azione di GG sui vettori di stato quantistico ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle.

Innanzitutto, notiamo che l'operazione ZfZ_f ha un effetto molto semplice su ∣A0⟩\vert A_0\rangle e ∣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}

In secondo luogo, abbiamo l’operazione H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. L’operazione ZORZ_{\mathrm{OR}} è definita come

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}

ancora una volta per ogni stringa x∈Σnx\in\Sigma^n, e un modo alternativo e pratico per esprimere questa operazione è il seguente:

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

Un modo semplice per verificare che questa espressione sia in accordo con la definizione di ZORZ_{\mathrm{OR}} è quello di valutare la sua azione sugli stati base standard.

L'operazione H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} può quindi essere scritta in questo modo:

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},

utilizzando la stessa notazione, ∣u⟩\vert u \rangle, che abbiamo usato in precedenza per la sovrapposizione uniforme su tutte le stringhe di bit nn.

E ora abbiamo ciò che ci serve per calcolare l'azione di GG su ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle. Per prima cosa calcoliamo l'azione di GG su ∣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}

In secondo luogo, calcoliamo l’azione di GG su ∣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}

In entrambi i casi si utilizza l'equazione

∣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

insieme alle espressioni

⟨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}}

che seguono.

In sintesi, abbiamo

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}

Come abbiamo già osservato, lo stato di Q\mathsf{Q} immediatamente prima della fase 2 è contenuto nello spazio bidimensionale generato da ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle, e abbiamo appena dimostrato che GG mappa qualsiasi vettore in questo spazio su un altro vettore nello stesso spazio. Ciò significa che, ai fini dell'analisi, possiamo concentrare la nostra attenzione esclusivamente su questo sottospazio.

Per comprendere meglio ciò che accade in questo spazio bidimensionale, esprimiamo l'azione di GG su questo spazio come una matrice,

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},

le cui prima e seconda riga/colonna corrispondono rispettivamente a ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle. Finora, in questa serie, abbiamo sempre associato le righe e le colonne delle matrici agli stati classici di un sistema, ma le matrici possono anche essere utilizzate per descrivere le azioni delle applicazioni lineari su basi diverse, come nel caso che ci occupa.

Anche se non è affatto ovvio a prima vista, la matrice MM è ciò che si ottiene squadrando una matrice di aspetto più semplice.

(∣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

La matrice

(∣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}

è una matrice di rotazione, che possiamo esprimere alternativamente come

(∣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}

per

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

Questo angolo θ\theta avrà un ruolo molto importante nell'analisi che segue, quindi vale la pena di sottolinearne l'importanza in questa sede, visto che lo vediamo per la prima volta.

Alla luce di questa espressione della matrice, osserviamo che

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}.

Questo perché ruotare di due volte di un angolo pari a θ\theta equivale a ruotare di un angolo pari a 2θ2\theta. Un altro modo per renderlo evidente è quello di ricorrere all'espressione alternativa

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

insieme alle formule degli angoli doppi della trigonometria:

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}

In sintesi, lo stato del registro Q\mathsf{Q} all'inizio del passo 2 è

∣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,

e l'effetto dell'applicazione di GG a questo stato è quello di ruotarlo di un angolo 2θ2\theta all'interno dello spazio generato da ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle. Quindi, ad esempio, abbiamo

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}

e in generale

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.

Immagine geometrica

Ora colleghiamo l'analisi che abbiamo appena svolto a un'immagine geometrica. L'idea è che l'operazione GG sia il prodotto di due riflessioni, ZfZ_f e H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. E l'effetto complessivo dell'esecuzione di due riflessioni è quello di eseguire una rotazione.

Cominciamo con ZfZ_f. Come abbiamo già osservato in precedenza, abbiamo

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}

All'interno dello spazio vettoriale bidimensionale generato da ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle, si tratta di una riflessione rispetto alla retta parallela a ∣A0⟩\vert A_0\rangle, che chiameremo L1L_1. Ecco una figura che illustra l'azione di questa riflessione su un ipotetico vettore unitario ∣ψ⟩\vert\psi\rangle, che supponiamo sia una combinazione lineare reale di ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle.

Una figura che rappresenta l'azione di una riflessione su un vettore.

In secondo luogo abbiamo l'operazione H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}, che, come abbiamo già visto, può essere scritta come

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}.

Anche questa è una riflessione, questa volta riguardante la retta L2L_2 parallela al vettore ∣u⟩\vert u\rangle. Ecco una figura che illustra l'effetto di questa riflessione su un vettore unitario ∣ψ⟩\vert\psi\rangle.

Una figura che rappresenta l'azione di una seconda riflessione su un vettore.

Quando componiamo queste due riflessioni, otteniamo una rotazione - di due volte l'angolo tra le linee di riflessione - come illustra questa figura.

Una figura che illustra l'azione dell'operazione di Grover su un vettore.

Questo spiega, in termini geometrici, perché l’effetto dell’operazione di Grover consiste nel ruotare le combinazioni lineari di ∣A0⟩\vert A_0\rangle e ∣A1⟩\vert A_1\rangle di un angolo pari a 2θ2\theta.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.