Saltar al contenido principal

Descripción del algoritmo de Grover

En esta sección describimos el algoritmo de Grover. Comenzamos con la discusión de las puertas de consulta de fase y cómo construirlas, seguida de la descripción del algoritmo en sí. Finalmente, discutimos 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:

Zfx=(1)f(x)xZ_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=0n1x0n\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í:

ZORx={xx=0nxx0n.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 tiene dependencia 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 cero 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=HnZORHnZfG = 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=HnZORHnZfG = 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)=1,f(x) = 1, hemos encontrado una solución y podemos detenernos y devolver xx.
    • Si f(x)=0,f(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).