Bueno, el artículo original de Grover, "La mecánica cuántica ayuda a buscar una aguja en un pajar", establece claramente que se supone que C (S) se puede evaluar en un tiempo constante. La búsqueda de Grover no está preocupada por la implementabilidad, sino por la reducción polinómica en lo que se llama una complejidad de consulta (cuántas veces consulta el oráculo, como una base de datos clásica)
De hecho, el concepto de oráculo en computación fue propuesto por Alan Turing para describir construcciones para las cuales una descripción en un UTM podría no ser realizable (Wikipedia). Que es en cierto sentido mágico.
Pero, por supuesto, volviendo a su pregunta, ¿cómo hacemos realmente el circuito para el algoritmo de búsqueda de Grover (o cualquier oráculo)? ¿Necesitamos saber la respuesta de antemano para buscar el resultado? Bueno, en cierto sentido lo necesitas. Eso es exactamente en lo que las mejoras inteligentes en la búsqueda de Grover intentan trabajar, de tal manera que no necesitamos saber de antemano la respuesta exacta, sino algunas de sus propiedades. Permítanme ilustrar con un ejemplo.
Para el problema de reconocimiento de patrones usando la búsqueda de Grover, si tengo 4 patrones en 2 qubits (00, 01, 10, 11) y quiero marcar y amplificar 11, la diagonal de mi oráculo unitario debería ser como (1,1,1 , -1) para encargarse del cambio de fase pi para la solución. Entonces, para esta implementación simple, para la construcción de lo unitario, necesita saber la respuesta completa de antemano.
Una mejora inteligente de la finalización del patrón si se da en el documento "Coincidencia de patrones cuánticos" de Mateas y Omar. En esencia, construye tantos oráculos fijos como alfabetos en el conjunto. Entonces, para nuestra cadena binaria, habrá un oráculo que marca todos los 1 y otro que marca todos los 0. Los oráculos se invocan condicionalmente en función de lo que quiero buscar. Si quiero buscar 11, llamo al oráculo 1 en el LSqubit, y al oráculo 1 nuevamente en el MSqubit. En el primer oráculo, amplificaría los estados (01, 11), es decir, estados con LSQ como 1, y en la segunda llamada, amplificaría (10, 11). Como puede ver, 11 es el único estado que se amplifica dos veces, lo que termina en una mayor probabilidad de medición. Aunque el circuito cuántico compilado cambiaría en función de cuál sea mi patrón de búsqueda de entrada, Una descripción de alto nivel del algoritmo cuántico sigue siendo la misma. Puede pensar en los oráculos como llamadas de función basadas en un caso de cambio del conjunto de alfabeto invocado para cada carácter en la cadena de búsqueda.