Saltar al contenido principal

Análisis

Ahora analizamos el algoritmo de Grover para entender cómo funciona. Comenzamos con lo que podría describirse como un análisis simbólico, en el que calculamos cómo la operación de Grover GG actúa sobre ciertos estados, y luego conectamos este análisis simbólico con una imagen geométrica que ayuda a visualizar el funcionamiento del algoritmo.

Soluciones y no soluciones

Comencemos definiendo dos conjuntos de cadenas.

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}

El conjunto A1A_1 contiene todas las soluciones de nuestro problema de búsqueda, mientras que A0A_0 contiene las cadenas que no son soluciones (a las que nos referiremos como no soluciones cuando sea conveniente). Estos dos conjuntos satisfacen A0A1=A_0 \cap A_1 = \varnothing y A0A1=ΣnA_0 \cup A_1 = \Sigma^n, es decir, esto es una bipartición de Σn\Sigma^n.

A continuación, definimos dos vectores unitarios que representan superposiciones uniformes sobre los conjuntos de soluciones y no soluciones.

A0=1A0xA0xA1=1A1xA1x\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}

Formalmente, cada uno de estos vectores solo está definido si el conjunto correspondiente no está vacío, pero a continuación nos enfocamos en el caso en que ni A0A_0 ni A1A_1 están vacíos. Los casos A0=A_0 = \varnothing y A1=A_1 = \varnothing pueden tratarse fácilmente por separado, lo cual haremos más adelante.

Como nota al margen: la notación utilizada aquí es común — siempre que tenemos un conjunto finito y no vacío SS, podemos escribir S\vert S\rangle para denotar el vector de estado cuántico distribuido uniformemente sobre los elementos de SS.

Definamos además u\vert u \rangle como el estado cuántico uniforme sobre todas las cadenas de nn bits:

u=1NxΣnx.\vert u\rangle = \frac{1}{\sqrt{N}} \sum_{x\in\Sigma^n} \vert x\rangle.

Observa que

u=A0NA0+A1NA1.\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.

También tenemos que u=Hn0n\vert u\rangle = H^{\otimes n} \vert 0^n \rangle, por lo que u\vert u\rangle representa el estado del registro Q\mathsf{Q} después de la inicialización en el paso 1 del algoritmo de Grover.

Esto implica que el estado de Q\mathsf{Q} inmediatamente antes de las iteraciones de GG en el paso 2 se encuentra en el espacio vectorial bidimensional generado por A0\vert A_0\rangle y A1\vert A_1\rangle, y que los coeficientes de estos vectores son números reales. Como veremos, estas propiedades del estado — que es una combinación lineal real de A0\vert A_0\rangle y A1\vert A_1\rangle — se preservarán después de cualquier número de iteraciones de la operación GG en el paso 2.

Una observación sobre la operación de Grover

Ahora nos dirigimos a la operación de Grover:

G=HnZORHnZf,G = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f,

comenzando con una observación interesante al respecto.

Imaginemos brevemente que reemplazamos la función ff por la composición de ff con la función NOT — o dicho de otra manera, por la función que obtenemos al invertir el bit de salida de ff. Llamamos a esta nueva función gg y podemos expresarla simbólicamente de varias formas alternativas.

g(x)=¬f(x)=1f(x)=1f(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}

Observa que

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

para cada cadena xΣnx\in\Sigma^n y, por lo tanto,

Zg=Zf.Z_g = - Z_f.

Esto significa que si reemplazáramos la función ff por la función gg, el algoritmo de Grover no funcionaría de manera diferente — porque los estados que obtenemos del algoritmo en ambos casos son necesariamente equivalentes salvo una fase global.

¡Esto no es un problema! Intuitivamente hablando, al algoritmo no le importa qué cadenas son soluciones y cuáles no — solo necesita poder distinguir las soluciones de las no soluciones para funcionar correctamente.

Acción de la operación de Grover

Consideremos ahora la acción de GG sobre los vectores de estado cuántico A0\vert A_0\rangle y A1\vert A_1\rangle.

Primero, observamos que la operación ZfZ_f tiene una acción muy simple sobre A0\vert A_0\rangle y A1\vert A_1\rangle.

ZfA0=A0ZfA1=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}

Segundo, tenemos la operación HnZORHnH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. La operación ZORZ_{\mathrm{OR}} se define como

ZORx={xx=0nxx0n,Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[2mm] -\vert x\rangle & x \neq 0^n, \end{cases}

nuevamente para cada cadena xΣnx\in\Sigma^n, y una forma alternativa conveniente de expresar esta operación es:

ZOR=20n0nI.Z_{\mathrm{OR}} = 2 \vert 0^n \rangle \langle 0^n \vert - \mathbb{I}.

Una forma sencilla de verificar que esta expresión coincide con la definición de ZORZ_{\mathrm{OR}} consiste en evaluar su acción sobre estados de la base estándar.

La operación HnZORHnH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} puede entonces escribirse como:

HnZORHn=2Hn0n0nHnI=2uuI,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},

donde usamos la misma notación u\vert u \rangle que antes para la superposición uniforme sobre todas las cadenas de nn bits.

Y ahora tenemos lo que necesitamos para calcular la acción de GG sobre A0\vert A_0\rangle y A1\vert A_1\rangle. Primero calculamos la acción de GG sobre A0\vert A_0\rangle.

GA0=(2uuI)ZfA0=(2uuI)A0=2A0NuA0=2A0N(A0NA0+A1NA1)A0=(2A0N1)A0+2A0A1NA1=A0A1NA0+2A0A1NA1\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}

Y segundo, calculamos la acción de GG sobre A1\vert A_1\rangle.

GA1=(2uuI)ZfA1=(2uuI)A1=2A1Nu+A1=2A1N(A0NA0+A1NA1)+A1=2A1A0NA0+(12A1N)A1=2A1A0NA0+A0A1NA1\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}

En ambos casos usamos la ecuación

u=A0NA0+A1NA1\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

junto con las expresiones que se derivan de ella

uA0=A0NyuA1=A1N.\langle u \vert A_0\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \qquad\text{y}\qquad \langle u \vert A_1\rangle = \sqrt{\frac{\vert A_1 \vert}{N}}.

En resumen, tenemos

GA0=A0A1NA0+2A0A1NA1GA1=2A1A0NA0+A0A1NA1.\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}

Como se señaló anteriormente, el estado de Q\mathsf{Q} inmediatamente antes del paso 2 se encuentra en el espacio bidimensional generado por A0\vert A_0\rangle y A1\vert A_1\rangle, y acabamos de demostrar que GG envía cada vector en este espacio a otro vector en el mismo espacio. Esto significa que para el análisis podemos enfocarnos exclusivamente en este subespacio.

Para comprender mejor lo que ocurre en este espacio bidimensional, expresamos la acción de GG en este espacio como una matriz,

M=(A0A1N2A1A0N2A0A1NA0A1N),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},

cuya primera y segunda fila/columna corresponden respectivamente a A0\vert A_0\rangle y A1\vert A_1\rangle. Hasta ahora en esta serie hemos asociado las filas y columnas de las matrices siempre con los estados clásicos de un sistema, pero las matrices también pueden usarse para describir las acciones de aplicaciones lineales en otras bases, como hacemos aquí.

Aunque a primera vista no es para nada evidente, la matriz MM es lo que obtenemos al elevar al cuadrado una matriz de aspecto más simple.

(A0NA1NA1NA0N)2=(A0A1N2A1A0N2A0A1NA0A1N)=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 matriz

(A0NA1NA1NA0N)\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}

es una matriz de rotación, que alternativamente podemos expresar como

(A0NA1NA1NA0N)=(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}

para

θ=sin1(A1N)\theta = \sin^{-1}\biggl(\sqrt{\frac{\vert A_1\vert}{N}}\biggr)

Este ángulo θ\theta desempeñará un papel muy importante en el análisis siguiente, por lo que vale la pena enfatizar su significado cuando lo vemos aquí por primera vez.

Dada esta expresión, observamos que

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

Esto se debe a que rotar dos veces por el ángulo θ\theta equivale a una rotación por el ángulo 2θ2\theta. Otra forma de verificar esto es usando la expresión alternativa

θ=cos1(A0N),\theta = \cos^{-1}\biggl(\sqrt{\frac{\vert A_0\vert}{N}}\biggr),

junto con las fórmulas del ángulo doble de la trigonometría:

cos(2θ)=cos2(θ)sin2(θ)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}

En resumen, el estado del registro Q\mathsf{Q} al comienzo del paso 2 es

u=A0NA0+A1NA1=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,

y el efecto de aplicar GG a este estado es rotarlo por un ángulo 2θ2\theta en el espacio generado por A0\vert A_0\rangle y A1\vert A_1\rangle. Así, por ejemplo, tenemos

Gu=cos(3θ)A0+sin(3θ)A1G2u=cos(5θ)A0+sin(5θ)A1G3u=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}

y en general

Gtu=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.

Imagen geométrica

Conectemos ahora el análisis que acabamos de realizar con una imagen geométrica. La idea es que la operación GG es el producto de dos reflexiones: ZfZ_f y HnZORHnH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. Y el efecto neto de dos reflexiones es una rotación.

Comencemos con ZfZ_f. Como ya observamos anteriormente,

ZfA0=A0ZfA1=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}

En el espacio vectorial bidimensional generado por A0\vert A_0\rangle y A1\vert A_1\rangle, esto es una reflexión respecto a la recta paralela a A0\vert A_0\rangle, que llamaremos L1L_1. Aquí hay una figura que ilustra la acción de esta reflexión sobre un vector unitario hipotético ψ\vert\psi\rangle, que se asume como una combinación lineal real de A0\vert A_0\rangle y A1\vert A_1\rangle.

Una figura que muestra la acción de una reflexión sobre un vector.

Segundo, tenemos la operación HnZORHnH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}, que ya sabemos que puede escribirse como

HnZORHn=2uuIH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} = 2 \vert u \rangle \langle u \vert - \mathbb{I}

Esto también es una reflexión, esta vez respecto a la recta L2L_2 paralela al vector u\vert u\rangle. Aquí hay una figura que muestra la acción de esta reflexión sobre un vector unitario ψ\vert\psi\rangle.

Una figura que muestra la acción de una segunda reflexión sobre un vector.

Cuando componemos estas dos reflexiones, obtenemos una rotación — por el doble del ángulo entre las rectas de reflexión — como muestra esta figura.

Una figura que muestra la acción de la operación de Grover sobre un vector.

Esto explica en términos geométricos por qué el efecto de la operación de Grover es rotar combinaciones lineales de A0\vert A_0\rangle y A1\vert A_1\rangle por un ángulo de 2θ2\theta.