Saltearse al contenido

Amplificación de amplitudes

La amplificación de amplitudes puede interpretarse como una primitiva cuántica, es decir como un algoritmo que se abstrae de la implementación y que es reutilizable en otros algoritmos. Por ejemplo, el algoritmo de Grover lo utiliza para un problema de búsqueda en particular.

La amplificación de amplitudes busca generalizar el algoritmo de Grover, preservando la mejora cuadrática y permitiendo la búsqueda sobre un conjunto de elementos no estructurado sin las restricciones impuestas por el mismo. De esta manera, no necesariamente los elementos deben disponerse en una superposición uniforme, y puede haber ninguna, una o varias soluciones. Además, la amplificación de amplitudes pretende funcionar correctamente incluso cuando se desconoce la cantidad de soluciones de antemano.

Si el espacio de búsqueda posee NN elementos, es posible poner el foco sobre su índice, el cual puede enumerarse desde 00 hasta N1N - 1. Así, se asume la igualdad N=2nN = 2^n de manera que el índice pueda ser almacenado en nn bits. A su vez, el problema puede tener MM soluciones, con 0MN0 \leq M \leq N. Una instancia del problema de búsqueda puede ser representada por una función χ\chi, que toma un entero xx como entrada dentro del rango que va desde 00 hasta N1N - 1. Por definición, χ(x)=1\chi(x) = 1 si xx es la solución del problema, y χ(x)=0\chi(x) = 0 en caso contrario.

El algoritmo de amplificación de amplitudes se divide en tres partes: la preparación, la selección y el reflejo.

Estructura de la primitiva de amplificación de amplitudes (AA) con tres secciones distintivas, una para la preparación, otra para la selección y otra para el reflejo.

Figura (1): Estructura de la primitiva de amplificación de amplitudes (AA), con superposición uniforme y que selecciona al estado 0011\ket{0011}.

La etapa de preparación denota una precondición del algoritmo: que el estado cuántico se encuentre en superposición. La forma en la que será implementada dependerá del problema en cuestión. Generalmente, se habla de un algoritmo cuántico A\mathcal{A} que no realiza mediciones durante su ejecución.

El resultado de aplicar dicho algoritmo sobre el estado inicial es el siguiente:

Ψ=A0\ket{\Psi} = \mathcal{A}\ket{0}

En la etapa de selección, se provee un circuito que distingue los estados cuánticos a buscar. Esto se hace mediante la modificación de la fase de los estados “buenos”, es decir, que conforman una solución. Para ello, se acude a la función χ\chi antes definida.

En el ejemplo provisto en la figura 1, se implementa con una puerta CZ, marcando el estado 0011\ket{0011}, por lo que solo se invertirá la fase para dicho estado. Normalmente se utilizan subrutinas más complejas para invertir las fases. Por ejemplo, en ciertos algoritmos esta etapa se implementa utilizando un oráculo de fase, como ocurre en el algoritmo de Grover.

Finaliza con la etapa de reflejo, que en ciertas bibliografías se lo llama operador de difusión (Grover) o inversión sobre la media (Nielsen y Chuang). Se convierten las diferencias de fases en contrastes de magnitud y se deselecciona los estados marcados en el paso previo.

El proceso de amplificación se realiza mediante la aplicación repetida de las etapas de selección y reflejo sobre el estado resultante de la etapa de preparación. Cada iteración comprende la aplicación del siguiente operador unitario:

Q=Q(A,χ)=AS0ASχQ = Q(\mathcal{A}, \chi) = -\mathcal{A} S_0 \mathcal{A}^\dag S_{\chi}

Donde SχS_{\chi} cambia condicionalmente el signo de las amplitudes de los estados buenos, S0S_{0} cambia el signo de la amplitud si y sólo si el estado es 0\ket{0}, y A\mathcal{A} representa un algoritmo cuántico que no realiza mediciones durante su ejecución y, por lo tanto, posee inversa.

Para evaluar el comportamiento del algoritmo se definen dos conjuntos de cadenas.

X0={xΣn:χ(x)=0}X1={xΣn:χ(x)=1}X_0 = \{x \in \Sigma^n: \chi(x) = 0\}\\ X_1 = \{x \in \Sigma^n: \chi(x) = 1\}

El conjunto X1X_1 contiene todas las soluciones del problema de búsqueda, mientras que X0X_0 contiene aquellas cadenas que no son soluciones. Ambos conjuntos satisfacen X0X1=X_0 \cap X_1 = \varnothing y X0X1=ΣnX_0 \cup X_1 = \Sigma^n, lo cual significa que X0X_0 y X1X_1 constituyen una bipartición de Σn\Sigma^n (todas las cadenas de bits de longitud nn).

Además, se definen dos vectores unitarios que representan los estados de superposición sobre los conjuntos previamente tratados.

Ψ0=x:χ(x)=0axxΨ1=x:χ(x)=1axx\ket{\Psi_0} = \sum_{x:\chi(x)=0} a_x \ket{x}\\ \ket{\Psi_1} = \sum_{x:\chi(x)=1} a_x \ket{x}

Donde Ψ0\ket{\Psi_0} equivale al estado de superposición de aquellas cadenas que no son soluciones, mientras que Ψ1\ket{\Psi_1} constituye la superposición de las cadenas que sí lo son. Estos vectores se encuentran definidos únicamente cuando ninguno de los conjuntos es vacío.

Además, a=Ψ1Ψ11a = \bra{\Psi_1}\ket{\Psi_1} \ll 1 es la probabilidad de que la medición de Ψ\ket{\Psi} produzca un estado bueno. Así, 1a=Ψ0Ψ01-a = \bra{\Psi_0}\ket{\Psi_0} es la probabilidad de que la misma medición produzca un estado malo.

Dado que Ψ\ket{\Psi} contiene el estado de superposición inicial sobre todas las cadenas, se cumple la siguiente igualdad:

Ψ=A0=Ψ0+Ψ1\ket{\Psi} = \mathcal{A}\ket{0} = \ket{\Psi_0} + \ket{\Psi_1}

Por lo tanto, Ψ\ket{\Psi} representa el estado del programa tras la acción de la etapa de preparación. Esto implica que justo antes de alcanzar la etapa de selección, dicho estado se encuentra contenido en un espacio vectorial abarcado por Ψ0\ket{\Psi_0} y Ψ1\ket{\Psi_1}. Siempre se tendrá esta propiedad luego de cualquier cantidad de iteraciones al encontrarse en el primer paso de la etapa de reflejo.

También considerar que la Amplificación de Amplitudes no se preocupa sobre cuáles cadenas son soluciones, solamente debe ser capaz de distinguirlas respecto de aquellas cadenas que no lo son.

El operador QQ definido previamente puede reescribirse como Q=UΨUΨ0Q = U_{\Psi} U_{\Psi_0}, tales que UΨ=2ΨΨIU_{\Psi} = 2\ket{\Psi}\bra{\Psi} - I y UΨ0=21aΨ0Ψ0IU_{\Psi_0} = \frac{2}{1-a}\ket{\Psi_0}\bra{\Psi_0} - I, donde UΨ0U_{\Psi_0} aplica un reflejo en relación al vector de las no soluciones Ψ0\ket{\Psi_0} y UΨU_{\Psi} refleja respecto del vector Ψ\ket{\Psi}.

Se aplicará QQ sobre la base ortonormalizada {ψ0,ψ1}\left\{\ket{\psi_0}, \ket{\psi_1}\right\} tal que:

ψ0=Ψ01a,ψ1=Ψ1a\ket{\psi_0} = \frac{\ket{\Psi_0}}{\sqrt{1-a}}, \ket{\psi_1} = \frac{\ket{\Psi_1}}{\sqrt{a}}

Notar que se cumple la siguiente igualdad:

Ψ=Ψ0+Ψ1=1aψ0+aψ1\ket{\Psi} = \ket{\Psi_0} + \ket{\Psi_1} = \sqrt{1-a} \ket{\psi_0} + \sqrt{a} \ket{\psi_1}

Al aplicar QQ sobre ψ0\ket{\psi_0} se obtiene (12a)ψ0+2a(1a)ψ1(1-2a)\ket{\psi_0} + 2\sqrt{a(1-a)} \ket{\psi_1}.

Al aplicar QQ sobre ψ1\ket{\psi_1} se obtiene 2a(1a)ψ0+(12a)ψ1-2\sqrt{a(1-a)}\ket{\psi_0} + (1-2a)\ket{\psi_1}.

Por conveniencia, se expresará la acción de QQ en un espacio de dos dimensiones como una matriz.

M=(12a2a(1a)2a(1a)12a)M = \begin{pmatrix} 1-2a&-2\sqrt{a(1-a)}\\ 2\sqrt{a(1-a)}&1-2a\\ \end{pmatrix}

donde la primera y segunda fila corresponden a ψ0\ket{\psi_0} y ψ1\ket{\psi_1} respectivamente. Dicha matriz MM se obtiene al multiplicar por sí misma una matriz más simple.

M=(1aaa1a)2M = \begin{pmatrix} \sqrt{1-a}&-\sqrt{a}\\ \sqrt{a}&\sqrt{1-a}\\ \end{pmatrix}^2

Además, la matriz

(1aaa1a)\begin{pmatrix} \sqrt{1-a}&-\sqrt{a}\\ \sqrt{a}&\sqrt{1-a}\\ \end{pmatrix}

es de rotación, la cual puede expresarse como

(cos(θa)sen(θa)sen(θa)cos(θa))\begin{pmatrix} cos(\theta_a)&-sen(\theta_a)\\ sen(\theta_a)&cos(\theta_a)\\ \end{pmatrix}

para θa=sen1(a)=cos1(1a)\theta_a = sen^{-1}\left(\sqrt{a}\right) = cos^{-1}\left(\sqrt{1-a}\right). Utilizando esta nueva expresión:

M=(cos(θa)sen(θa)sen(θa)cos(θa))2=(cos(2θa)sen(2θa)sen(2θa)cos(2θa))M = \begin{pmatrix} cos(\theta_a)&-sen(\theta_a)\\ sen(\theta_a)&cos(\theta_a) \end{pmatrix}^2 = \begin{pmatrix} cos(2\theta_a)&-sen(2\theta_a)\\ sen(2\theta_a)&cos(2\theta_a) \end{pmatrix}

ya que rotar por el ángulo θa\theta_a dos veces es equivalente a rotar por el ángulo 2θa2\theta_a.

El estado del programa al comienzo de la primera iteración, tras la etapa de preparación es:

Ψ=1aψ0+aψ1=cos(θa)ψ0+sin(θa)ψ1\ket{\Psi} = \sqrt{1-a} \ket{\psi_0} + \sqrt{a} \ket{\psi_1} = cos(\theta_a) \ket{\psi_0} + sin(\theta_a) \ket{\psi_1}

y el efecto de aplicar QQ sobre dicho estado consiste en aplicar una rotación por el ángulo 2θa2\theta_a dentro del espacio abarcado por ψ0\ket{\psi_0} y ψ1\ket{\psi_1}.

Por ejemplo:

Q1Ψ=cos(3θa)ψ0+sen(3θa)ψ1Q2Ψ=cos(5θa)ψ0+sen(5θa)ψ1Q3Ψ=cos(7θa)ψ0+sen(7θa)ψ1Q^1\ket{\Psi} = cos(3\theta_a) \ket{\psi_0} + sen(3\theta_a) \ket{\psi_1}\\ Q^2\ket{\Psi} = cos(5\theta_a) \ket{\psi_0} + sen(5\theta_a) \ket{\psi_1}\\ Q^3\ket{\Psi} = cos(7\theta_a) \ket{\psi_0} + sen(7\theta_a) \ket{\psi_1}

Regla general:

QkΨ=cos((2k+1)θa)ψ0+sen((2k+1)θa)ψ1Q^k\ket{\Psi} = cos((2k+1)\theta_a) \ket{\psi_0} + sen((2k+1)\theta_a) \ket{\psi_1}

La idea es que las iteraciones roten el estado vectorial hacia ψ1\ket{\psi_1}. Cuando esto ocurre, una medición del estado produce con alta probabilidad una de las salidas superpuestas en ψ1\ket{\psi_1}, es decir, una solución al problema.

Inicialmente el estado vectorial es ortogonal respecto de ψ1\ket{\psi_1}. Partiendo de este punto, la operación UΨ0U_{\Psi_0} refleja el estado en torno a ψ0\ket{\psi_0}, y luego la operación UΨU_{\Psi} lo refleja en torno a Ψ\ket{\Psi}. Dado que dos reflexiones producen una rotación, el vector de estado se acerca hacia ψ1\ket{\psi_1}, y luego de reiteradas rotaciones es posible obtener una solución con alta probabilidad mediante una observación en la base computacional.

Reflexión realizada al aplicar el oráculo O respecto del estado ortogonal $\ket{A_0}$.

Figura (2): Rotación realizada por el operador QQ como composición de dos reflexiones. Fuente: https://alexandre01.github.io/projects/quantum_ampl_estimation/

Sea aa la probabilidad inicial de alcanzar una solución a partir de A\mathcal{A}. Asumiendo a>0a > 0 (existe al menos una solución), y definiendo t=π4θat = \left\lfloor \frac{\pi}{4\theta_a} \right\rfloor, donde θa\theta_a se define tal que sen2(θa)=asen^2(\theta_a) = a y 0<θaπ20 \lt \theta_a \leq \frac{\pi}{2}. Entonces, si se computa QtA0Q^t \mathcal{A} \ket{0} (se aplica el operador QQ tt veces) y se realiza una medición, la salida será buena con probabilidad de al menos max(1a,a)max(1 - a, a), definida como el valor más grande entre 1a1 - a y aa.

De esta manera, el número óptimo de iteraciones es el siguiente:

Niteraciones=π41a=π42nsN_{iteraciones}= \left\lfloor \frac{\pi}{4}\sqrt{\frac{1}{a}} \right\rfloor = \left\lfloor \frac{\pi}{4}\sqrt{\frac{2^n}{s}} \right\rfloor

Donde nn es la cantidad de cubits y ss es la cantidad de soluciones posibles. En caso de que aa se desconozca, es posible recurrir a algunas técnicas para resolver el problema conservando la aceleración cuadrática.

Se harán los cálculos necesarios para el caso en el que solamente hay una cadena xx tal que χ(x)=1\chi(x) = 1. Esto quiere decir que s=1s = 1.

a=sN=1Nθa=sen1(a)=sen1(1N)a = \frac{s}{N} = \frac{1}{N}\\ \theta_a = sen^{-1}\left(\sqrt{a}\right) = sen^{-1}\left(\sqrt{\frac{1}{N}}\right)

Cuyo valor puede aproximarse a 1N\sqrt{\frac{1}{N}} cuando NN es un valor grande.

Sustituyendo el valor θa=1N\theta_a = \sqrt{\frac{1}{N}} en la expresión t=π4θat = \left\lfloor\frac{\pi}{4\theta_a}\right\rfloor se obtiene

t=π4θa=π4N1/2=π4Nt = \left\lfloor\frac{\pi}{4\theta_a}\right\rfloor = \left\lfloor\frac{\pi}{4N^{-1/2}}\right\rfloor = \left\lfloor\frac{\pi}{4}\sqrt{N}\right\rfloor

En base al resultado obtenido en tt, este caso requiere a lo sumo O(N)O(\sqrt{N}) consultas para encontrar la solución. La probabilidad de que la medición final resulte en la solución puede expresarse como

p(N,1)=sen2((2t+1)θ))p(N,1)=sen^2((2t+1)θ))

Y en general se cumple

p(N,1)>=11Np(N,1) >= 1 - \frac{1}{N}

para todo NN, por lo que la probabilidad de éxito tiende a 1 a medida que NN crece.

Se harán los cálculos necesarios para el caso en el que hayan distintas cadenas xix_i tal que χ(xi)=1\chi(x_i) = 1.

A medida que la cantidad de elementos en X1X_1 varía, también lo hace el ángulo θa\theta_a, lo cual puede repercutir en gran medida en la probabilidad de éxito del algoritmo. Teniendo ss soluciones, habrá que usar el siguiente ángulo:

θa=sen1(sN)\theta_a=sen^{−1}\left(\sqrt{\frac{s}{N}}\right)

y p(N,s)p(N,s) denota la probabilidad del algoritmo para que en tt iteraciones encuentre una de las ss soluciones dentro de NN posibilidades. Puede probarse que

p(N,s)1sNp(N,s)\geq 1−\frac{s}{N}

y también que

p(N,s)sNp(N,s)\geq \frac{s}{N}

Para todo valor α{0,1}\alpha \in \{0,1\} se cumple que sen1(α)αsen^{-1}(\alpha)\geq\alpha, por lo que puede afirmarse la siguiente inecuación:

θa=sen1(a)=sen1(sN)sN\theta_a = sen^{-1}(\sqrt{a}) = sen^{-1}\left(\sqrt{\frac{s}{N}}\right) \geq \sqrt{\frac{s}{N}}

lo cual implica que

tπ4θaπ4Nst \leq \frac{\pi}{4\theta_a} \leq \frac{\pi}{4} \sqrt{\frac{N}{s}}

Por lo tanto, se reduce la cantidad de consultas requeridas a la función χ\chi a medida que ss aumenta. El número de consultas requeridas es de O(Ns)O\left(\sqrt{\frac{N}{s}}\right).

Si el número de soluciones s=X1s = |X_1| se desconoce debe implementarse una estrategia para encontrar soluciones con alta probabilidad. Existen diferentes alternativas que serán mencionadas a continuación.

La primera opción consiste en elegir un valor aleatorio de tt ubicado entre 1 y π4N\left\lfloor\frac{\pi}{4}\sqrt{N}\right\rfloor. De esta manera es posible encontrar una solución (asumiendo que al menos una existe) con una probabilidad mayor al 40%. Si bien esta probabilidad es baja, repitiendo este procedimiento y verificando el resultado puede alcanzarse una solución con una probabilidad muy cercana a 1.

Por otro lado, existe un método que encuentra una solución cuando al menos una existe realizando O(Ns)O\left(\sqrt{\frac{N}{s}}\right) consultas, incluso cuando el número de soluciones de ss no es conocido. Cabe destacar que se requieren O(N)O\left(\sqrt{N}\right) consultas para determinar que no hay soluciones cuando s=0s=0. La idea consiste en elegir tt de manera uniforme y aleatoria dentro del conjunto {1,...,T}\{1,...,T\} iterativamente, incrementando el valor de TT. Una estrategia válida es comenzar con T=1T=1 e incrementar dicho valor exponencialmente, siempre terminando este proceso tan pronto como una solución sea encontrada y dejando de incrementar TT para no desperdiciar consultas cuando ya se sabe que no existe una solución. Este procedimiento tiene la ventaja de que requiere menos consultas cuando hay más soluciones. No obstante, debe tenerse cuidado a la hora de elegir la tasa de crecimiento de TT: está comprobado que utilizar T54TT \leftarrow \left\lceil \frac{5}{4}T \right\rceil funciona correctamente, pero duplicar TT en cada iteración es demasiado agresivo y genera incrementos demasiado rápidos.

Si todas las cadenas xΣnx \in \Sigma^n son una solución, entonces cualquier medición reflejará una solución; y cuando no haya soluciones, ninguna medición obtendrá una solución. El hecho de que X0X_0 o X1X_1 sean vacíos implica que χ\chi es una función constante: X1X_1 es vacío cuando χ(x)=0\chi(x) = 0 para todo xΣnx \in \Sigma^n y X0X_0 es vacío cuando χ(x)=1\chi(x) = 1 para todo xΣnx \in \Sigma^n.

Lo anterior implica que

SχΨ=±ΨS_{\chi}\ket{\Psi} = \pm\ket{\Psi}

y por lo tanto

QΨ=(2ΨΨI)SχΨ=±(2ΨΨI)Ψ=±ΨQ\ket{\Psi}=(2\ket{\Psi}\bra{\Psi}-I)S_{\chi}\ket{\Psi}=\pm(2\ket{\Psi}\bra{\Psi}-I)\ket{\Psi}=\pm\ket{\Psi}

En conclusión, sin importar la cantidad de iteraciones tt que se realicen en estos casos, las mediciones siempre reflejarán una cadena aleatoria xΣnx\in\Sigma^n.

Sean x1=0001x_1=0001 y x2=0011x_2=0011 las soluciones a un problema que recurre a la superposición uniforme A=H\mathcal{A} = H, se prepara el circuito para distinguir ambas soluciones en la fase de selección. Se sabe de antemano que el problema tiene dos soluciones.

Se analizan los pasos del algoritmo donde:

  • Γ0\Gamma_0 es el estado inicial 0\ket{0}
  • Γ1\Gamma_1 se corresponde con la preparación del estado cuántico que resulta en Ψ\ket{\Psi}
  • σ\sigma representa el resultado de aplicar la operación de selección
  • λ\lambda es el efecto de la etapa de reflejo

En σ\sigma y λ\lambda se utilizará como subíndice el número de iteración.

La cantidad óptima de iteraciones es:

Niteraciones=π4242=π48=2 N_{iteraciones}=\left\lfloor \frac{\pi}{4}\sqrt{\frac{2^4}{2}} \right\rfloor=\left\lfloor \frac{\pi}{4}\sqrt{8} \right\rfloor = 2
\(\Gamma_0\)

El estado inicial del algoritmo 04\ket{0}^{\otimes 4}

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\Gamma_1\)

Estado cuántico luego de la preparación (aplicación del algoritmo A=H\mathcal{A} = H)

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\sigma_1\)

Notar que x1\ket{x_1} y x2\ket{x_2} tienen invertida la fase

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\lambda_1\)

Notar la “deselección” de 0011\ket{0011} y 0001\ket{0001}

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\sigma_2\)
$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\lambda_2\)

Notar que no “deselecciona” ya que alcanzó la cantidad óptima de iteraciones.

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$

Llegados a este punto, el problema se encuentra resuelto con una probabilidad de 96.875%, ya que las probabilidades individuales de obtener x1\ket{x_1} o x2\ket{x_2} son de 47.2656%, y sumadas dan la probabilidad total de llegar a una solución. Se realiza una tercera iteración para mostrar el decremento de la probabilidad al exceder la cantidad óptima de iteraciones.

\(\sigma_3\)
$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\lambda_3\)
$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$

Por lo que en una tercera iteración se disminuyen las probabilidades de encontrar una de las soluciones.

Bibliografía:
Recomendada
Alternativa
Opcional