13 Algoritmos cuánticos
En esta sección estudiaremos tres algoritmos cuánticos que muestran las ventajas de un sistema de computación cuántico con respecto a uno clásico. En concreto, analizaremos el algoritmo de Deutsch-Jotzsa, el algoritmo de búsqueda de Grover, y el algoritmo de factorización de Shor.
13.1 Algoritmo de Deutsch-Jotzsa
Consideremos una función booleana con bits de entrada y bit de salida: El algoritmo de Deutsch-Jotzsa permite determinar ciertas propiedades de una función booleana sin necesidad de evaluar la función para todas las posibles entradas. En particular, es capaz de determinar si una función booleana es constante o balanceada.
Definición 13.1 La función es si siempre devuelve el mismo valor (bien o ) para todas las entradas. La función es si devuelve para exactamente la mitad de las entradas y para la otra mitad.
Ejemplo 13.1 Consideremos las siguintes funciones booleanas :
(función XOR OR exclusivo). Esta función devuelve y por tanto se trata de una función balanceada (mismo número de y de a su salida).
(función ‘0’). Esta función devuelve y por tanto se trata de una función constante (siempre devuelve ).
(función AND). Esta función devuelve y por tanto esta función no es ni constante ni balanceada.
Planteamiento del problema
Tenemos acceso a una caja negra que permite evaluar una función , de la que sabemos que es bien constante o balanceada (pero sólo una de estas dos alternativas). Nos piden determinar de forma unívoca qué tipo de función es con el mínimo número de llamadas o evaluaciones de la función.
Nuestra intuición nos indica que, dado que no conocemos ninguna información sobre la función (excepto que es bien constante o bien balanceada), solo podemos probar algunas de las posibles entradas y observar su salida correspondiente. Si observáramos dos salidas diferentes sabríamos con seguridad que la función no es constante. Sin embargo, en el peor caso, podemos obtener salidas iguales y todavía no podríamos descartar que la función sea constante o balanceada (dado que las otras salidas podrían ser iguales o diferentes a las primeras). Por tanto, concluimos que, en el peor caso, necesitaremos llamadas a la función para resolver este problema de forma unívoca.
Ejemplo 13.2 Consideremos una función booleana desconocida, de la que sabemos que es o constante o balanceada. Se realizan dos llamadas a la función y se obtienen los resultados , . Todavía no podemos saber si la función es constante o balanceada. De hecho, estos resultados son compatibles con las funciones y del ejemplo anterior. Así, es necesario realizar una nueva llamada a la función. Obtenemos y por tanto podemos concluir que , y la función es balanceada.
Para resolver el problema planteado hemos requerido llamadas a la función.
Así, no parece que sea posible resolver este problema con menos de llamadas a la función . Aunque esto es cierto para sistemas de computación clásica, veremos que utilizando las propiedades de la mecánica cuántica es posible resolver este problema de una forma radicalmente diferente con un único uso de la función , o de forma más precisa, con un único uso de su operador cuántico asociado.
Funciones de entrada binaria
Por sencillez, consideremos en primer lugar una función booleana con un único bit de entrada, Para esta función, solo existen dos posibilidades: si , la función es constante, mientras que si la función es balanceada. Así, para una función de entrada binaria no se puede dar el caso de que no sea ni constante ni balanceada. En un sistema de computación clásico, es necesario realizar dos llamadas a la función para comprobar si es constante o balanceada. Con una implementación cuántica, en cambio, es posible determinar esta propiedad con un único uso del operador cuántico asociado.
Oráculo
Este operador se denomina oráculo de la función y tiene la estructura vista en la sección anterior para la implementación cuántica de funciones booleanas:
donde las salidas deben cumplir e .
Inicialización
Para entender el funcionamiento del algoritmo de Deutsch-Jotzsa, vamos a estudiar como se comporta el oráculo si introducimos en la entrada auxiliar el cúbit :
El cúbit de salida superior está dado por . Por otra parte, dado que , utilizando la propiedad del paralelismo cuántico,obtenemos que el cúbit de salida inferior queda Este estado se puede modelar de forma compacta como compacta como por lo que concluimos que cuando , se produce un cambio de signo en el cúbit de salida . En el análisis subsiguiente se debe tener en cuenta que el producto por no afecta únicamente al cúbit inferior sino al estado conjunto a la salida del circuito. En particular se tiene que
A continuación, vamos a ignorar (o descartar) la parte del estado conjunto, independiente de y nos centraremos en el primer cúbit , que para esta inicialización “mágica” pasa a ser
Paralelismo cuántico
En el análisis anterior hemos determinado la salida del circuito cuántico para una entrada o . En particular, evaluando la expresión anterior para obtenemos
Vamos ahora a utilizar la propiedad del paralelismo cuántico para procesar estas dos entradas al mismo tiempo. Para ello, aplicamos una superposición de estos dos casos en la entrada principal del oráculo :
Según el principio del paralelismo cuántico, para una superposición de entradas, la salida se corresponde a la superposición de las salidas correspondientes. Entonces, utilizando (), obtenemos que se puede reescribir como Aquí, en la opción superior hemos agrupado los casos y , y en la inferior hemos agrupado los casos y . Se debe notar que los estados correspondientes a la parte superior e inferior de esta ecuación son ortogonales entre sí, y se corresponden a los estados cuánticos puros y . Así, se podrían distinguir sin errores mediante un proceso de medida en la base .
Medida y resultado
No es posible implementar una medida directamente en la base en un ordenador cuántico, ya que este último trabaja siempre en la base computacional. Sin embargo, sabemos que la puerta de Hadamard transforma la base en la base , y viceversa. Así, si definimos un estado , tenemos que Si aplicamos una medida sobre el estado con respecto a la base computacional , obtendremos por tanto un resultado determinista que va a depender de si la función es (constante) o (balanceada).
Algoritmo de Deutsch
El proceso descrito anteriormente fue propuesto inicialmente por David Deutsch en 1985, por lo que se conoce habitualmente como algoritmo de Deutsch. La siguiente figura muestra el diagrama de bloques completo del algoritmo de Deutsch:
Para determinar si la función es constante o balanceada, ejercutamos el algoritmo en un ordenador cuántico y comprobamos el resultado:
- Si , entonces la función es constante, .
- Si , entonces la función es balanceada, .
Este algoritmo permite determinar de forma determinista si la función es constante o balanceada, mediante un único uso del oráculo . Recordemos que el mejor algoritmo clásico requería dos llamadas a la función .
Ejercicio 13.1 Considere la función booleana de entrada binaria . ¿Cual debería ser la salida del algoritmo de Deutsch para esta función? El oráculo cuántico asociado a es
Implemente el algoritmo de Deutsch en IBM Quantum y ejecutelo en el simulador. ¿Funciona?
Repita el proceso para los siguientes oráculos
¿Qué funciones booleanas representa cada uno de estos oráculos? ¿Funciona el algoritmo?
Algoritmo de Deutsch-Jotzsa
Mientras que la ganancia de este algoritmo cuántico es marginal para funciones booleanas de entrada binaria, la idea se extendió posteriormente para considerar funciones booleanas con entradas en un trabajo realizado por el propio Deutsch en colaboración de Richard Jozsa.1 Esta extensión, conocida como algoritmo de Deutsch-Jotzsa, permite determinar si una función es constante o balanceada mediante un único uso del operador , frente a las llamadas que, en el peor caso, requiere un ordenador clásico.
La siguiente figura muestra el diagrama de bloques del algoritmo de Deutsch-Jotzsa general:
Mientras que en el caso de la ventaja del algoritmo cuántico es marginal (pasamos de dos usos de la función a un único uso del oráculo ), para el caso de funciones con entradas, el algoritmo cuántico presenta una ventaja exponencial sobre el clásico: El algoritmo clásico (en el peor caso) requiere llamadas a la función , mientras que el algoritmo de Deutsch-Jozsa ofrece una solución determinista con un único uso del oráculo .
A pesar de que el problema considerado carece de utilidad práctica (distinguir si una función es constante o balanceada), este algoritmo fue la primera demostración de que los ordenadores cuánticos permiten resolver ciertos problemas de una forma (exponencialmente) más rápida que el mejor ordenador clásico. Así, este resultado impulsaría el desarrollo y búsqueda de otros algoritmos que acabarían teniendo grandes implicaciones, como veremos a continuación.
13.2 Algoritmo de búsqueda de Grover
Consideremos ahora una función booleana tal que Es decir, la función se activa para una entrada y permanece inactiva para las demás entradas.
Planteamiento del problema
Para una función desconocida tal que para una (y solo una) entrada , deseamos encontrar el valor que activa la función .
Se debe tener en cuenta que este problema se corresponde con una búsqueda de un único elemento en un espacio con posibilidades. Así, se trata de “encontrar una aguja en un pajar” de posibles entradas.
Ejemplo 13.3 A diferencia del algoritmo de Deutsch-Jozsa, esta formulación permite modelar diversos problemas de índole práctica, como pueden ser:
La búsqueda dentro de una lista desordenada de elementos. Por ejemplo, en una base de datos podríamos buscar en qué registro se encuentra un determinado dato.
Un ataque por fuerza bruta a un sistema criptográfico con posibles entradas (claves) en el cual una única posibilidad es la correcta. Si disponemos de una función que nos indique si la clave funciona (por ejemplo,comprobando que el archivo desencriptado cumple ciertas propiedades), entonces podemos modelar el problema de búsqueda de la clave de esta forma.
El mejor algoritmo clásico para resolver este problema tiene complejidad con , ya que requiere (en el peor caso) llamadas a la función para encontrar la entrada que la activa. En cambio, un algoritmo cuántico desarrollado por Lov Grover en 1996 puede resolver este problema con solo usos del oráculo asociado a la función.2
Este resultado presenta unas enorme implicaciones, ya que permite, por ejemplo, acelerar un ataque de fuerza bruta pasando de requerir probar las claves, a tan solo evaluaciones de la función. Así, si consideramos un sistema criptográfico con una clave de longitud bits, estaríamos reduciendo su longitud efectiva de la clave a la mitad.
Oráculo e inicialización
Al igual que en el algoritmo de Deutsch-Jozsa necesitamos un oráculo de la función a analizar:
Los primeros pasos del algoritmo de Grover coinciden con los correspondientes pasos del algoritmo de Deutsch-Jozsa. Así, si introducimos el cúbit en la entrada auxiliar , a la salida obtenemos Es decir, el estado a la salida pasa a tener una amplitud negativa para . La clave del algoritmo de Grover está en cómo transformar esta propiedad en un observable que se pueda detectar mediante un proceso de medida.
Paralelismo cuántico
En la entrada principal del operador cuántico introducimos una superposición de entradas: donde denota el estado cuántico de la base computacional asociado a la descomposición binaria de , y donde es un factor de normalización. Si aplicamos esta entrada al oráculo con la inicialización considerada en el punto anterior, a la salida obtendremos una superposición de salidas:
Ejemplo 13.4 Vamos a considerar una función booleana con bits de entrada que se activa con , siendo cero en los demás casos. Para , , tenemos que la superposición de todas las posibles entradas de la función está dada por Si aplicamos esta entrada al oráculo con la inicialización mágica, obtenemos Vemos que el estado presenta un signo negativo debido al término que se activa para la entrada (y solo para la entrada) .
Por ejemplo, para , y tenemos que
Operador de difusión de Grover
Para detectar la componente de la superposición marcada con un signo negativo, necesitamos transformarla en un observable que podamos medir. Utilizaremos el operador de difusión de Grover, definido como: donde es una superposición uniforme e es el operador identidad.
Se puede demostrar que este operador transforma diferencias en fase en la superposición de entrada a diferencias en amplitud en la superposición de salida. Más precisamente, para un estado puro y con valor medio , a la salida del operador de difusión se obtiene El operador de difusión transforma las amplitudes cuánticas en amplitudes a su salida.
Ejemplo 13.5 Para , vamos a aplicar el operador de difusión a un estado , y observar su efecto en la salida . En este caso .
Amplitudes de igual fase:
Amplitudes con diferente fase:
En el algoritmo de Grover, el oráculo y el operador de difusión se deben aplicar veces para aumentar la amplitud del estado deseado, de forma que al aplicar una medida sobre el mismo ofrezca la solución correcta con alta probabilidad (ver Ejercicio 8 de la colección de ejercicios de este tema).
Medida y resultado
El diagrama de bloques del algoritmo de Grover completo entonces queda:
Este algoritmo se estudiará en detalle en la Práctica 4 de la asignatura, y su implementación se deja como trabajo del alumno. La principal dificultad para aplicar el algoritmo de Grover en un problema real es determinar un oráculo adecuado. Como ejemplo, en el Ejercicio 5 de la práctica se considera la implementación de una búsqueda en una base de datos.
13.3 Algoritmo de factorización de Shor
Dentro de los algoritmos cuánticos conocidos hasta ahora, es especialmente relevante el algoritmo de Shor, que permite descomponer un número en sus factores primos. En esta sección estudiaremos sus claves principales.
Transformada cuántica de Fourier
En la asignatura Sistemas Lineales (dedicada al Análisis de Fourier) hemos estudiado la transformada discreta de Fourier (DFT) para secuencias en tiempo discreto. Para una secuencia , $= 0,,N-1 $, la transformada discreta de Fourier se define como Esta operación transforma el vector , al dominio frecuencial, , . Si consideramos las secuencias y como vectores, esta operación se puede reescribir como donde se corresponde a una matriz unitaria.
En este curso hemos visto que los sistemas cuánticos admiten transformaciones unitarias, por lo que podríamos plantearnos la creación de un operador cuántico que calcula la transformada de Fourier de un estado cuántico. Esto es posible y es lo que se conoce como (QFT): donde es el elemento -ésimo de la base computacional. Este estado se define para un sistema cuántico de dimensión cúbits, de forma que la correspondiente base computacional tiene elementos.
Cálculo del periodo de una función
La transformada discreta de Fourier (DFT) se puede utilizar para encontrar el periodo de una función, ya que Así, la DFT de una función periódica se corresponde a una señal formada por deltas situadas en los múltiplos de la frecuencia fundamental.
Ejemplo 13.6 La siguiente figura muestra una secuencia periódica de longitud y periodo , así como su correspondiente DFT .
Se puede ver como la trasformada es una secuencia compuesta por deltas situadas en la frecuencia fundamental y sus múltiplos.
Del mismo modo, si aplicamos la transformada cuántica de Fourier (QFT) a un estado que presente un cierto periodo con respecto a la base computacional, entonces a su salida obtendremos un estado cuántico en el que no hay amplitud fuera de los múltiplos de la frecuencia fundamental. Así, si medimos el estado cuántico a la salida de la QFT obtendremos la frecuencia fundamental (o uno de sus armónicos).
Algoritmo de factorización
En 1992, Peter W. Shor propuso un algoritmo cuántico para la factorización de números utilizando que la QFT permite obtener el periodo de una función de una forma eficiente. El algoritmo resultante presentaba una complejidad polinómica con el número de dígitos del número a factorizar, a diferencia del mejor algoritmo clásico para esta tarea, que presenta una complejidad exponencial (ver Ejercicio 9 de la Colección 4).
Planteamiento del problema: Consideremos un número entero tal que con y primos. Asumimos que se puede representar con dígitos binarios, es decir . Para un dado, nos piden encontrar y .
Algoritmo:
- Elegir un número entre y .
- Si , devolver .
- Encontrar el periodo de la función
si es par y , devolver
en otro caso, devolver error
Este algoritmo se puede ejecutar en un ordenador clásico y permite obtener (con alta probabilidad) los factores de . La ventaja de utilizar un ordenador cuántico viene a la hora de determinar el periodo de la función . Esta operación se puede realizar utilizando la QFT mediante un número de puertas cuánticas que crece polinomialmente con la longitud del número a factorizar. Por tanto, la única parte cuántica del algoritmo e correpondería a este proceso. A continuación aparece representado el diagrama de bloques correspondiente:

Si es el número de dígitos binarios, esta implementación cuántica requiere del orden de operaciones. Por otra parte, este es una algoritmo que ofrece no ofrece la solución de forma determinista, sino con alta probabilidad, por lo que es necesario repetir el algoritmo veces para conseguir factorizar el número con éxito. Así el algoritmo de factorización de Shor presenta una complejidad , que se puede comparar con la complejidad de uno de los mejores algoritmos de factorización clásicos como puede ser el algoritmo de Pollard y Strassen de 1976, que tiene complejidad .
Ejemplo 13.7 Consideremos el problema de factorizar un número con dígitos binarios.
- El algoritmo cuántico de Shor presentaría una complejidad del orden de .
- El algoritmo clásico de Pollard y Strassen requiere del orden de operaciones.
Para tener algo de intuición sobre la diferencia de magnitud de estas cantidades, asumamos que el tiempo para realizar una operación fuera similar en ambas implementaciones. Entonces, si el algoritmo de Shor tarda segundo en realizar la factorización, el algoritmo de Pollard y Strassen tardaría en torno a años en realizar la misma tarea.
Muchos de los sistemas criptográficos usados en la actualidad, como por ejemplo RSA, se basan en la dificultad de factorizar números grandes. Entonces, ¿están estos sistemas criptográficos amenazados? Para responder a esta pregunta, se debe tener en cuenta el estado de la tecnología de computación cuántica hoy.
Para implementar el algoritmo de Shor con un ordenador cuántico ideal, se necesitarían cúbits por cada dígito binario del número a factorizar (en la práctica, debido al ruido existente se necesitarían entre y cúbits por cada dígito binario a factorizar. La tecnología actual con ordenadores de cúbits, permitiría (en el mejor de los casos) factorizar números de hasta bits. Así, teniendo en cuenta que que las claves RSA actuales tienen una longitud de entre y bits, podemos concluir que este algoritmo (todavía) no presenta una amenaza a la seguridad de nuestras comunicaciones.