Algoritmo de Simon
El algoritmo de Simon es un algoritmo de consulta cuántica para un problema conocido como el problema de Simon. Es un problema de promesa con un sabor similar a los problemas de Deutsch-Jozsa y Bernstein-Vazirani, pero con especificaciones distintas.
El algoritmo de Simon es significativo porque proporciona una ventaja exponencial de los algoritmos cuánticos sobre los clásicos (incluidos los probabilísticos), y la técnica que utiliza inspiró el descubrimiento por parte de Peter Shor de un algoritmo cuántico eficiente para la factorización de enteros.
El problema de Simon
La función de entrada del problema de Simon tiene la forma
para enteros positivos y Podríamos restringir nuestra atención al caso en aras de la simplicidad, pero hay poco que ganar con esta suposición — el algoritmo de Simon y su análisis son básicamente los mismos en cualquier caso.
Vamos a desglosar la promesa para entender mejor lo que dice en un momento, pero primero debemos tener claro que exige que tenga una estructura muy especial — por lo que la mayoría de las funciones no cumplirán esta promesa. También es oportuno reconocer que este problema no pretende tener importancia práctica. Más bien, es un problema algo artificial diseñado a medida para ser fácil para las computadoras cuánticas y difícil para las clásicas.
Hay dos casos principales: el primero es que sea la cadena de todos ceros y el segundo es que no sea la cadena de todos ceros.
-
Caso 1: Si es la cadena de todos ceros, podemos simplificar la afirmación de si y solo si en la promesa para que diga Esto es equivalente a que sea una función uno a uno.
-
Caso 2: Si no es la cadena de todos ceros, entonces el cumplimiento de la promesa para esta cadena implica que es dos a uno, lo que significa que para cada cadena de salida posible de hay exactamente dos cadenas de entrada que llevan a a producir esa salida. Además, estas dos cadenas de entrada deben tener la forma y para alguna cadena
Es importante reconocer que solo puede existir una cadena que funcione si se cumple la promesa, por lo que siempre hay una única respuesta correcta para las funciones que satisfacen la promesa.
Aquí hay un ejemplo de una función de la forma que satisface la promesa para la cadena
Hay cadenas de entrada diferentes y cadenas de salida diferentes, cada una de las cuales aparece dos veces — por lo que esta es una función dos a uno. Además, para cualesquiera dos cadenas de entrada distintas que produzcan la misma cadena de salida, vemos que el XOR bit a bit de estas dos cadenas de entrada es igual a lo cual equivale a decir que una de ellas es igual a la otra con XOR aplicado con
Observa que lo único que importa de las cadenas de salida reales es si son iguales o diferentes para distintas elecciones de cadenas de entrada. Por ejemplo, en el ejemplo anterior, hay cuatro cadenas y que aparecen como salidas de Podríamos reemplazar estas cuatro cadenas por cadenas distintas, siempre que sean todas diferentes entre sí, y la solución correcta no cambiaría.
Descripción del algoritmo
Aquí hay un diagrama de circuito cuántico que representa el algoritmo de Simon.
Para ser precisos, hay qubits en la parte superior sobre los que actúan las puertas Hadamard y qubits en la parte inferior que entran directamente en la puerta de consulta. Se parece mucho a los algoritmos que ya hemos discutido en la lección, pero esta vez no hay retroceso de fase; los qubits inferiores entran todos en la puerta de consulta en el estado
Para resolver el problema de Simon usando este circuito en realidad se necesitarán varias ejecuciones independientes del mismo seguidas de un paso de post-procesamiento clásico, que se describirá más adelante una vez analizado el comportamiento del circuito.
Análisis
El análisis del algoritmo de Simon comienza de manera similar al algoritmo de Deutsch-Jozsa. Después de que se aplica la primera capa de puertas Hadamard a los qubits superiores, el estado se convierte en
Cuando se aplica la salida de la función se aplica XOR sobre el estado de todos ceros de los qubits inferiores, por lo que el estado se convierte en
Cuando se aplica la segunda capa de puertas Hadamard, obtenemos el siguiente estado usando la misma fórmula para la acción de una capa de puertas Hadamard que antes.
En este punto, el análisis diverge del de los algoritmos anteriores en esta lección.
Nos interesa la probabilidad de que las mediciones resulten en cada posible cadena Mediante las reglas para analizar mediciones descritas en la lección Sistemas múltiples del curso Fundamentos de información cuántica, encontramos que la probabilidad de obtener la cadena es igual a
Para comprender mejor estas probabilidades, necesitaremos un poco más de notación y terminología. Primero, el rango de la función es el conjunto que contiene todas sus cadenas de salida.
Segundo, para cada cadena podemos expresar el conjunto de todas las cadenas de entrada que hacen que la función evalúe a esta cadena de salida como
El conjunto se conoce como la preimagen de bajo Podemos definir la preimagen bajo de cualquier conjunto en lugar de de manera análoga — es el conjunto de todos los elementos que asigna a ese conjunto. (Esta notación no debe confundirse con la inversa de la función que puede no existir. El hecho de que el argumento en el lado izquierdo sea el conjunto en lugar del elemento es la pista que nos permite evitar esta confusión.)
Usando esta notación, podemos descomponer la suma en nuestra expresión para las probabilidades anteriores para obtener
Cada cadena está representada exactamente una vez por las dos sumaciones — básicamente estamos poniendo estas cadenas en cubos separados según qué cadena de salida producen al evaluar la función y luego sumando por separado sobre todos los cubos.
Ahora podemos evaluar el cuadrado de la norma euclidiana para obtener
Para simplificar aún más estas probabilidades, veamos el valor
para una selección arbitraria de
Si resulta que entonces es una función uno a uno y siempre hay un único elemento para todo El valor de la expresión es en este caso.
Si, por otro lado, entonces hay exactamente dos cadenas en el conjunto Para ser precisos, si elegimos como cualquiera de estas dos cadenas, entonces la otra cadena debe ser por la promesa en el problema de Simon. Usando esta observación podemos simplificar de la siguiente manera.
Así pues, resulta que el valor es independiente de la elección específica de en ambos casos.
Ahora podemos finalizar el análisis analizando los mismos dos casos que antes por separado.
-
Caso 1: En este caso la función es uno a uno, por lo que hay cadenas y obtenemos
En palabras, las mediciones resultan en una cadena elegida uniformemente al azar.
-
Caso 2: En este caso es dos a uno, por lo que hay elementos en Usando la fórmula anterior concluimos que la probabilidad de medir cada es
En palabras, obtenemos una cadena elegida uniformemente al azar del conjunto que contiene cadenas. (Como exactamente la mitad de las cadenas binarias de longitud tienen producto punto binario con y la otra mitad tiene producto punto binario con como ya observamos en el análisis del algoritmo de Deutsch-Jozsa para el problema de Bernstein-Vazirani.)
Post-procesamiento clásico
Ahora sabemos cuáles son las probabilidades para los posibles resultados de las mediciones cuando ejecutamos el circuito cuántico del algoritmo de Simon. ¿Es suficiente esta información para determinar ?
La respuesta es sí, siempre que estemos dispuestos a repetir el proceso varias veces y aceptar que podría fallar con alguna probabilidad, que podemos hacer muy pequeña ejecutando el circuito suficientes veces. La idea esencial es que cada ejecución del circuito nos proporciona evidencia estadística sobre y podemos usar esa evidencia para encontrar con muy alta probabilidad si ejecutamos el circuito suficientes veces.
Supongamos que ejecutamos el circuito de forma independiente veces, para No hay nada especial en este número particular de iteraciones — podríamos tomar más grande (o más pequeño) dependiendo de la probabilidad de fallo que estemos dispuestos a tolerar, como veremos. Elegir garantizará que tengamos más de un % de probabilidad de recuperar
Al ejecutar el circuito veces, obtenemos cadenas Para ser precisos, los superíndices aquí forman parte de los nombres de estas cadenas, no son exponentes ni índices de sus bits, por lo que tenemos