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?

Descripción del algoritmo de Grover

En esta sección describimos el algoritmo de Grover. Comenzamos analizando las puertas de consulta de fase y cómo construirlas, seguido de la descripción del algoritmo en sí. Finalmente, comentamos brevemente cómo el algoritmo se aplica naturalmente a la búsqueda.

Puertas de consulta de fase​

El algoritmo de Grover utiliza operaciones conocidas como puertas de consulta de fase. A diferencia de una puerta de consulta ordinaria UfU_f, que para una función dada ff se define como se describió anteriormente, una puerta de consulta de fase para la función ff se define de la siguiente manera:

Zf∣x⟩=(−1)f(x)∣x⟩Z_f \vert x\rangle = (-1)^{f(x)} \vert x\rangle

para cada cadena x∈Σnx\in\Sigma^n.

La operación ZfZ_f puede implementarse con una sola puerta de consulta UfU_f, como muestra este diagrama:

Un circuito cuántico que implementa una puerta Z_f usando una puerta de consulta y el fenómeno de retroceso de fase

Esta implementación aprovecha el fenómeno de retroceso de fase y requiere que un qubit auxiliar, inicializado en el estado ∣−⟩\vert -\rangle, esté disponible. Este qubit permanece en el estado ∣−⟩\vert - \rangle después de la implementación y puede reutilizarse (por ejemplo, para implementar puertas ZfZ_f posteriores) o simplemente descartarse.

Además de la operación ZfZ_f, también usamos una puerta de consulta de fase para la función OR de nn bits, que se define para cada cadena x∈Σnx\in\Sigma^n de la siguiente manera:

OR(x)={0x=0n1x≠0n\mathrm{OR}(x) = \begin{cases} 0 & x = 0^n\\[0.5mm] 1 & x \neq 0^n \end{cases}

Explícitamente, la puerta de consulta de fase para la función OR de nn bits actúa así:

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

Para ser claros: así es como ZORZ_{\mathrm{OR}} actúa sobre estados de la base estándar; su comportamiento para estados arbitrarios se obtiene por linealidad a partir de esta expresión.

La operación ZORZ_{\mathrm{OR}} puede implementarse como un circuito cuántico comenzando con un circuito booleano para la función OR, convirtiéndolo en una operación UORU_{\mathrm{OR}} (es decir, una puerta de consulta estándar para la función OR de nn bits) — según el procedimiento descrito en la lección Fundamentos algorítmicos de la computación cuántica —, y finalmente construyendo una operación ZORZ_{\mathrm{OR}} mediante el fenómeno de retroceso de fase. Observa que ZORZ_{\mathrm{OR}} no depende de la función ff y, por lo tanto, puede implementarse mediante un circuito cuántico sin puertas de consulta.

Descripción del algoritmo​

Ahora que tenemos las dos operaciones ZfZ_f y ZORZ_{\mathrm{OR}}, podemos describir el algoritmo de Grover.

El algoritmo se refiere a un número tt, que indica el número de iteraciones (y por tanto el número de consultas a la función ff). Este número tt no está determinado por el algoritmo de Grover en la forma aquí descrita; discutiremos más adelante en la lección cómo puede elegirse.

Algoritmo de Grover
  1. Inicializar un registro de nn qubits Q\mathsf{Q} en el estado de todos ceros ∣0n⟩\vert 0^n \rangle y luego aplicar una operación de Hadamard a cada qubit de Q\mathsf{Q}.
  2. Aplicar tt veces la operación unitaria G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f al registro Q\mathsf{Q}.
  3. Medir los qubits de Q\mathsf{Q} en la base estándar y devolver la cadena resultante.

La operación G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f iterada en el paso 2 se denominará la operación de Grover en el resto de esta lección. Aquí hay una representación en circuito cuántico de la operación de Grover para n=7 ⁣:n=7\!:

Una representación en circuito cuántico de la operación de Grover

En este diagrama, la operación ZfZ_f se muestra más grande que ZORZ_{\mathrm{OR}} — una indicación visual informal de que probablemente es la operación más costosa. En particular, ZfZ_f requiere una consulta en el modelo de consulta, mientras que ZORZ_{\mathrm{OR}} no requiere consultas. Si, en cambio, tenemos un circuito booleano para la función ff y lo convertimos en un circuito cuántico para ZfZ_f, puede suponerse que el circuito cuántico resultante será más grande y complejo que uno para ZORZ_{\mathrm{OR}}.

Aquí hay un diagrama de un circuito cuántico para el algoritmo completo con n=7n=7 y t=3t=3. Para valores más grandes de tt, simplemente podemos insertar más instancias de la operación de Grover inmediatamente antes de las mediciones.

Un circuito cuántico para el algoritmo de Grover con t=3

El algoritmo de Grover puede aplicarse al problema de búsqueda de la siguiente manera:

  • Elegir el número tt en el paso 2. (Esto se discutirá más adelante en la lección.)

  • Ejecutar el algoritmo de Grover para la función ff con el número tt elegido, para obtener una cadena x∈Σnx\in\Sigma^n.

  • Consultar la función ff para la cadena xx para verificar si es una solución válida:

    • Si f(x)=1f(x) = 1, hemos encontrado una solución y podemos detenernos y devolver xx.

    • Si f(x)=0f(x) = 0, podemos ejecutar el procedimiento de nuevo, posiblemente con una elección diferente para tt, o podemos rendirnos y devolver "sin solución".

Una vez que hayamos analizado cómo funciona el algoritmo de Grover, veremos que eligiendo t=O(N)t = O(\sqrt{N}) obtenemos una solución a nuestro problema de búsqueda con alta probabilidad (siempre que exista una).