13 Algoritmos cuánticos
Sección en construcción.
En esta sección presentaremos 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 constante si siempre devuelve el mismo valor (bien o ) para todas las entradas. La función es balanceada 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 en este proceso observamos dos salidas diferentes sabemos con seguridad que la función no es constante, y por tanto debe ser balanceada.
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 asegurar 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 concluimos que es balanceada: .
Para resolver el problema planteado hemos requerido llamadas a la función.
Así, en el peor caso, 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 determinar si la función es constante o balanceada con un único uso de , o de forma más precisa, con un único uso de su operador cuántico asociado.
Algoritmo cuántico
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 Usando que , este estado se puede modelar de forma compacta como por lo que concluimos que cuando , se produce un cambio de signo en el cúbit de salida . Si consideramos el estado conjunto a la salida del circuito, éste queda
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, en la entrada principal del oráculo aplicamos una superposición uniforme :
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
En los siguientes pasos vamos a descartar la línea de cúbits auxiliar, que se encuentra en el estado , común para ambos elementos de la misma. Así obtenemos Vamos a agrupar por una parte los casos y , dónde los dos términos de la expresión presentan el mismo signo, bien positivo o negativo; y por otra, los casos y , dónde los dos términos presentan diferentes signos. Así, la expresión anterior se puede reescribir de forma compacta como
Medida y resultado
Se puede comprobar que los dos casos que aparecen en esta expresión son dos estados cuánticos puros ortogonales entre sí, y se podrían distinguir sin errores mediante un proceso de medida en la base . Sin embargo, 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.
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 (Deutsch 1985). La siguiente figura muestra el diagrama de bloques completo de este algoritmo:
Para determinar si la función es constante o balanceada, ejecutamos 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 si la función es constante o balanceada mediante un único uso del oráculo . Por otra parte, el mejor algoritmo clásico para hacer esto 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 ejecútelo. ¿Da el resultado esperado?
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
La idea del algoritmo de Deutsch se extendió también para considerar funciones booleanas con entradas en un trabajo realizado por el propio Deutsch en colaboración de Richard Jozsa (Deutsch and Jozsa 1992). 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 .
La siguiente figura muestra el diagrama de bloques del algoritmo de Deutsch-Jotzsa:
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 :
- Si , entonces la función es constante.
- Si , entonces la función es balanceada.
A pesar de que el problema de distinguir si una función es constante o balanceada carece de utilidad práctica, 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. Por ejemplo, para tendríamos que encontrar la entrada que activa la función entre más de 65 mil posibilidades. Así, podemos pensar en este problema como “encontrar una aguja en un pajar”.
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 (Grover 1996).
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, de ahí su denominación habitual como algoritmo de búsqueda de Grover.
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.
Este resultado presenta unas enorme implicaciones, ya que permite, por ejemplo, acelerar un ataque de fuerza bruta pasando de requerir probar 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.
Operador de difusión de Grover
La pieza clave del algoritmo de Grover es el denominado operador de difusión de Grover .
La transformación unitaria se define como donde es una superposición uniforme e es el operador identidad.
Para ilustrar el efecto del operador de difusión consideremos el estado puro donde denota el estado cuántico de la base computacional asociado a la descomposición binaria de , y donde denota su correspondiente amplitud de probabilidad.
Ejemplo 13.3 Para , , la superposición uniforme está dada por con índices asociados .
Los términos de amplitud de probabilidad para están dados por :
Si aplicamos el operador de difusión a un estado con valor de amplitud de probabilidad medio , a su salida obtendremos El operador transforma así las amplitudes de probabilidad de la superposición a su entrada en amplitudes de probabilidad a su salida. El siguiente ejemplo muestra como esta transformación es capaz de convertir diferencias de fase en diferencias de amplitud a su salida.
Ejemplo 13.4 Vamos a aplicar el operador de difusión a un estado , y observar su efecto en la salida .
Para , , consideremos una superposición con amplitudes de probabilidad: Podemos ver que todas las amplitudes de probabilidad tienen módulo , aunque la amplitud correspondiente al estado (), presenta una fase diferente a las demás. Si aplicamos el operador de difusión , a su salida obtenemos las amplitudes de probabilidad Así, el operador de difusión transforma las diferencias de fase en la superposición de entrada en diferencias de amplitud en la superposición de salida:
Ejercicio 13.2 Para , , Obtenga las amplitudes de probabilidad de salida del estado para los siguientes estados de entrada :
Superposición uniforme:
Un elemento de la superposición con fase negativa:
Dos elementos de la superposición con fase negativa:
Algoritmo cuántico
Al igual que en el algoritmo de Deutsch-Jozsa necesitamos un oráculo de la función a analizar:
Inicialización
La inicialización y primeros pasos del algoritmo de Grover coinciden con los correspondientes pasos del algoritmo de Deutsch-Jozsa. Tal y cómo hemos visto en la sección anterior, si introducimos el cúbit en la entrada auxiliar de , a su salida obtenemos Es decir, el estado a la salida pasa a tener una amplitud negativa para .
Paralelismo cuántico
En la entrada principal del operador cuántico introducimos una superposición uniforme como la vista en el Ejemplo 13.3: Por la propiedad del paralelismo cuántico, aplicando esta entrada al oráculo con la inicialización considerada en el punto anterior, a su salida obtendremos una superposición de salidas: De esta forma, los elementos de la superposición tales que permanecen inalterados, mientras que los elemento de la superposición con pasan a tener una amplitud de probabilidad negativa.
Ejemplo 13.5 Vamos a considerar una función booleana con bits de entrada que se activa con , siendo cero en los demás casos. Si aplicamos a la entrada al oráculo la superposición uniforme con la inicialización del punto anterior, a su salida obtenemos El estado presenta un signo negativo debido al término que se activa para la entrada (y solo para la entrada) .
Operador de difusión y medida
Así, a la salida del oráculo, hemos marcado los elementos de la superposición tales que con una amplitud de probabilidad negativa. Sin embargo, todavía no es posible hacer una medida del sistema que nos permita determinar estos elementos, ya que la probabilidad de medida es proporcional al módulo cuadrado de las amplitudades, y no depende de su fase.
Aquí es donde entra en juego el operador de difusión de Grover , que transforma diferencias de fase en diferencias de amplitud. Este operador amplifica la amplitud del término negativo mientras que reduce la amplitud de los demás términos, tal y cómo hemos visto en el Ejemplo 13.4.
En el algoritmo de Grover, el oráculo y el operador de difusión se deben aplicar veces para maximizar el módulo del elemento deseado, mientras que se minimiza el módulo de la amplitud de los demás elementos.
Una vez se ha realizado este proceso se aplica un proceso de medida en la base computacional, que resulta en la solución correcta de forma determinista, o con alta probabilidad.
Algoritmo de Grover e implementación
El diagrama de bloques del algoritmo de Grover completo aparece representado en la siguiente figura:
Este algoritmo se estudiará en detalle en la última práctica de la asignatura, y su implementación se deja como trabajo al estudiante. La principal dificultad para aplicar el algoritmo de Grover en una palicación real es determinar un oráculo adecuado. En la práctica se considera el ejemplo de la implementación de una búsqueda en una base de datos muy sencilla.
13.3 Algoritmo de factorización de Shor
Dentro de los algoritmos cuánticos descubiertos hasta ahora, es especialmente relevante el algoritmo de Shor, que permite descomponer un número en sus factores primos. Este algoritmo tiene importantes implicaciones en la seguridad de Internet, ya que uno de los sistemas criptográficos de clave público-privada más empleados en la actualidad es el RSA que se basa precisamente en la dificultad computacional de factorizar un número grande en sus factores primos.
En esta sección estudiaremos las claves principales del algoritmo de factorización de Shor.
Transformada cuántica de Fourier
Uno los conceptos básicos de procesado de señal es el análisis de Fourier, que permite descomponer una señal en sus componentes frecuenciales. La transformada discreta de Fourier (DFT) para secuencias en tiempo discreto se define como donde , , es una secuencia en tiempo discreto de longitud finita.
Esta operación transforma la secuencia al dominio frecuencial, , . Si consideramos las secuencias y como vectores y , 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 (Shor 1994). 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.