Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

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 A0∩A1=∅A_0 \cap A_1 = \varnothing y A0∪A1=Σ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⟩=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}

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⟩=1N∑x∈Σn∣x⟩.\vert u\rangle = \frac{1}{\sqrt{N}} \sum_{x\in\Sigma^n} \vert x\rangle.

Observa que

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

También tenemos que ∣u⟩=H⊗n∣0n⟩\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=H⊗nZORH⊗nZf,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)=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}

Observa que

(−1)g(x)=(−1)1⊕f(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.

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}

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

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}

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

ZOR=2∣0n⟩⟨0n∣−I.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 H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} puede entonces escribirse como:

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

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.

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}

Y segundo, calculamos la acción de GG sobre ∣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}

En ambos casos usamos la ecuación

∣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

junto con las expresiones que se derivan de ella

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

En resumen, tenemos

En resumen, tenemos

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}

Como ya hemos señalado, el estado de Q\mathsf{Q} justo antes del paso 2 se encuentra en el espacio bidimensional abarcado por ∣A0⟩\vert A_0\rangle y ∣A1⟩\vert A_1\rangle, y acabamos de establecer que GG mapea cualquier vector en este espacio a otro vector en el mismo espacio. Esto significa que, para propósitos del análisis, podemos enfocar nuestra atención exclusivamente en este subespacio.

Para entender mejor qué está sucediendo dentro de este espacio bidimensional, expresemos la acción de GG en este espacio como una matriz,

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

cuya primera y segunda filas/columnas corresponden a ∣A0⟩\vert A_0\rangle y ∣A1⟩\vert A_1\rangle, respectivamente. Hasta ahora en esta serie, siempre hemos conectado las filas y columnas de las matrices con los estados clásicos de un sistema, pero las matrices también pueden usarse para describir las acciones de aplicaciones lineales sobre diferentes bases, como en este caso.

Aunque no es en absoluto obvio a primera vista, la matriz MM es lo que obtenemos al elevar al cuadrado una matriz de apariencia más simple.

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

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

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

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

for

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

Este ángulo θ\theta va a desempeñar un papel muy importante en el análisis que sigue, así que vale la pena resaltar su importancia aquí al verlo por primera vez.

A la luz de esta expresión de esta matriz, 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 ocurre porque rotar por el ángulo θ\theta dos veces es equivalente a rotar por el ángulo 2θ2\theta. Otra forma de ver esto es utilizar la expresión alternativa

θ=cos⁡−1(∣A0∣N),\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θ)=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}

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

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

y el efecto de aplicar GG a este estado es rotarlo por un ángulo 2θ2\theta dentro del espacio abarcado por ∣A0⟩\vert A_0\rangle y ∣A1⟩\vert A_1\rangle. Entonces, por ejemplo, tenemos

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}

y en general

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.

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 H⊗nZORH⊗nH^{\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,

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}

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 H⊗nZORH⊗nH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}, que ya sabemos que puede escribirse como

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

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.