Búsqueda no estructurada
Resumen
Comenzamos con una descripción del problema que resuelve el algoritmo de Grover. Como es habitual, escribimos para el alfabeto binario a lo largo de toda esta discusión.
Sea
una función de cadenas binarias de longitud a bits. Asumimos que podemos evaluar esta función de manera eficiente; sin embargo, aparte de eso, es arbitraria y no podemos contar con ninguna estructura particular ni con una implementación específica.
Lo que hace el algoritmo de Grover es buscar una cadena para la cual . Tales cadenas se denominan soluciones del problema de búsqueda. Si hay múltiples soluciones, cualquiera de ellas es una salida correcta; si no hay solución, la respuesta debe ser que no existe ninguna solución.
Esta tarea se denomina problema de búsqueda no estructurada porque no podemos asumir que tiene alguna estructura particular que lo haga fácil. No estamos buscando en una lista ordenada ni en una estructura de datos diseñada específicamente para la búsqueda — básicamente estamos buscando una aguja en un pajar.
Intuitivamente, se puede imaginar que tenemos un circuito booleano extremadamente complejo que calcula , y que podemos ejecutar fácilmente este circuito para una cadena de entrada seleccionada. Sin embargo, como el circuito es tan complicado, no tenemos posibilidad de entenderlo mediante inspección (aparte de la posibilidad de evaluarlo para entradas seleccionadas).
Una forma de realizar esta tarea de búsqueda clásicamente consiste en recorrer todas las cadenas en orden y evaluar para cada una, comprobando si es una solución. En lo sucesivo, escribimos
por conveniencia. Hay cadenas en , por lo que recorrerlas todas requiere evaluaciones de . Bajo la suposición de que estamos limitados a evaluar en entradas seleccionadas, esto es lo mejor que podemos hacer con un algoritmo determinista si queremos garantizar el éxito. Con un algoritmo probabilístico se podría ahorrar tiempo eligiendo entradas para al azar, pero aun así se necesitan evaluaciones de si el método debe tener éxito con alta probabilidad.
El algoritmo de Grover resuelve este problema de búsqueda con alta probabilidad usando solo evaluaciones de . Estas evaluaciones de la función deben realizarse en superposición, de manera similar a los algoritmos de consulta discutidos en la lección Algoritmos cuánticos de consulta, incluyendo el algoritmo de Deutsch, el algoritmo de Deutsch-Jozsa y el algoritmo de Simon. A diferencia de esos algoritmos, el algoritmo de Grover adopta un enfoque iterativo: evalúa sobre superposiciones de cadenas de entrada e intercala estas evaluaciones con otras operaciones que crean patrones de interferencia y, después de iteraciones, conducen con alta probabilidad a una solución (si existe alguna).
Formulación formal del problema
Formalizamos el problema que resuelve el algoritmo de Grover utilizando el modelo de consulta de la computación. Es decir, asumimos que tenemos acceso a la función a través de una puerta de consulta, definida como es habitual:
para cada y . Esta es la acción de sobre estados de la base estándar; su acción en general se determina por linealidad.
Como se discutió en la lección Fundamentos algorítmicos de la computación cuántica, podemos convertir la descripción de un circuito booleano que calcula en un circuito cuántico que implementa (usando algunos qubits auxiliares que comienzan y terminan la computación en el estado ). Aunque usamos el modelo de consulta para formalizar el problema, el algoritmo de Grover no se limita a este modelo; podemos aplicarlo a cualquier función para la que tengamos un circuito booleano.
Aquí hay una formulación precisa del problema, llamado el problema de búsqueda, porque buscamos una solución — es decir, una cadena para la cual produce el valor .
Observa que esto no es un problema con promesa — la función es arbitraria. Sin embargo, es útil considerar la siguiente variante con promesa del problema, en la que se garantiza que existe exactamente una solución. Este problema fue introducido en la lección Algoritmos cuánticos de consulta como ejemplo de un problema con promesa.
Observa también que el problema Or de la misma lección está estrechamente relacionado con el problema de búsqueda. En aquel problema, el objetivo es simplemente determinar si existe una solución — y no encontrar realmente una solución.