Algoritmo de Shor
Ahora nos centraremos en el problema de la factorización entera y veremos cómo puede resolverse de forma eficiente en un ordenador cuántico utilizando la estimación de fase. El algoritmo que obtendremos es el algoritmo de Shor para la factorización de enteros. Shor no describió su algoritmo específicamente en términos de estimación de fase, pero es una forma natural e intuitiva de explicar cómo funciona.
Empezaremos analizando un problema intermedio conocido como el problema de búsqueda de órdenes y veremos cómo la estimación de fase proporciona una solución a este problema. A continuación veremos cómo una solución eficiente al problema de búsqueda de órdenes nos da una solución eficiente al problema de factorización de enteros. (Cuando la solución a un problema proporciona una solución a otro problema como éste, decimos que el segundo problema se reduce al primero - así que en este caso estamos reduciendo la factorización entera a la búsqueda de órdenes) Esta segunda parte del algoritmo de Shor no hace uso de la computación cuántica en absoluto; es completamente clásica. La computación cuántica sólo es necesaria para resolver la búsqueda de órdenes.
El problema de la búsqueda de pedidos
Algunos conceptos básicos de teoría de números
Para explicar el problema de la búsqueda de órdenes y cómo se puede resolver utilizando la estimación de fase, será útil empezar con un par de conceptos básicos de teoría de números e introducir algunas notaciones útiles por el camino.
Para empezar, para cualquier número entero positivo dado defina el conjunto de la siguiente manera.
Por ejemplo, etc.
Son conjuntos de números, pero podemos pensar en ellos como algo más que conjuntos. En concreto, podemos pensar en operaciones aritméticas en , como la suma y la multiplicación, y si acordamos tomar siempre nuestras respuestas en módulo (es decir, dividir por y tomar el resto como resultado), siempre nos mantendremos dentro de este conjunto cuando realicemos estas operaciones. Las dos operaciones específicas de suma y multiplicación, ambas tomadas módulo convierten en un anillo, que es un tipo de objeto fundamentalmente importante en álgebra.
Por ejemplo, y son elementos de y si los multiplicamos entre sí obtenemos que deja un resto de al dividirlo por A veces expresamos esto de la siguiente manera
Pero también podemos escribir simplemente , siempre que quede claro que estamos trabajando en , para que nuestra notación sea lo más sencilla posible.
Como ejemplo, aquí están las tablas de sumar y multiplicar para
Entre los elementos de los elementos que satisfacen son especiales. Con frecuencia, el conjunto que contiene estos elementos se denota con una estrella, como en el caso anterior.
Si centramos nuestra atención en la operación de multiplicación, el conjunto forma un grupo -concretamente un grupo abeliano-, que es otro tipo de objeto importante en álgebra. Es un hecho básico sobre estos conjuntos (y grupos finitos en general), que si escogemos cualquier elemento y multiplicamos repetidamente a sí mismo, siempre obtendremos eventualmente el número
Para un primer ejemplo, tomemos Tenemos que porque y si multiplicamos a sí mismo obtenemos como confirma la tabla anterior.
Como segundo ejemplo, tomemos Si recorremos los números de a los que tienen DGC igual a con son los siguientes.
Para cada uno de estos elementos, es posible elevar ese número a una potencia entera positiva para obtener Estas son las potencias más pequeñas para las que esto funciona:
Naturalmente, estamos trabajando en para todas estas ecuaciones, que no nos hemos molestado en escribir: las damos por implícitas para no complicar las cosas. Seguiremos haciéndolo durante el resto de la lección.
Descripción del problema y relación con la estimación de fase
Ahora podemos plantear el problema de búsqueda de órdenes.
Entrada: enteros positivos y que satisfagan \ Salida: el menor entero positivo tal que
Alternativamente, en términos de la notación que acabamos de introducir más arriba, se nos da y buscamos el menor número entero positivo tal que Este número se llama el orden de módulo
Para conectar el problema de búsqueda de orden con la estimación de fase, pensemos en la operación definida sobre un sistema cuyos estados clásicos corresponden a donde multiplicamos por un elemento fijo
Para que quede claro, estamos haciendo la multiplicación en por lo que está implícito que estamos tomando el producto módulo dentro de la cometa en el lado derecho de la ecuación.
Por ejemplo, si tomamos y entonces la acción de sobre la base estándar es la siguiente.
Esta es una operación unitaria siempre que baraje los elementos de la base estándar por lo que como matriz es una matriz de permutación. Es evidente por su definición que esta operación es determinista, y una forma sencilla de ver que es invertible es pensar en el orden de módulo y reconocer que la inversa de es
Hay otra manera de pensar en la inversa que no requiere ningún conocimiento de (que, después de todo, es lo que estamos tratando de calcular). Para cada elemento siempre hay un único elemento que satisface Denotamos este elemento por y puede ser calculado eficientemente; una extensión del algoritmo GCD de Euclides lo hace con un coste cuadrático en Y así
Así pues, la operación es a la vez determinista e invertible. Eso implica que está descrita por una matriz de permutación y, por tanto, es unitaria.
Pensemos ahora en los vectores y valores propios de la operación suponiendo que Como se acaba de argumentar, esta suposición nos dice que es unitaria.
Hay valores propios de , incluido posiblemente el mismo valor propio repetido varias veces, y en general hay cierta libertad a la hora de seleccionar los vectores propios correspondientes, pero no tendremos que preocuparnos por todas las posibilidades. Empecemos de forma sencilla e identifiquemos sólo un vector propio de
El número es el orden de módulo aquí y en el resto de la lección. El valor propio asociado a este vector propio es porque no cambia cuando multiplicamos por
Esto sucede porque por lo que cada estado base estándar se desplaza a para y se desplaza de nuevo a Informalmente hablando, es como si estuviéramos agitando lentamente pero ya está completamente agitado así que nada cambia.
He aquí otro ejemplo de un vector propio de Este resulta ser más interesante en el contexto de la búsqueda de orden y la estimación de fase.
Alternativamente, podemos escribir este vector utilizando una suma de la siguiente manera.
Aquí vemos que el número complejo aparece de forma natural, debido a la forma en que funciona la multiplicación por módulo Esta vez el valor propio correspondiente es Para ver esto, primero podemos calcular de la siguiente manera.
Entonces, porque y vemos que
así que
Utilizando el mismo razonamiento, podemos identificar pares adicionales de vector propio/valor propio para Para cualquier elección de tenemos que
es un vector propio de cuyo valor propio correspondiente es
Existen otros vectores propios de , pero no es necesario que nos ocupemos de ellos; nos centraremos únicamente en los vectores propios que acabamos de identificar.
Búsqueda de órdenes mediante estimación de fase
Para resolver el problema de búsqueda de orden para una elección dada de podemos aplicar el procedimiento de estimación de fase a la operación
Para ello, necesitamos implementar no sólo eficientemente con un circuito cuántico, sino también y así sucesivamente, llegando tan lejos como sea necesario para obtener una estimación suficientemente precisa del procedimiento de estimación de fase. Aquí explicaremos cómo se puede hacer, y más adelante averiguaremos exactamente cuánta precisión se necesita.
Empecemos con la operación por sí misma. Naturalmente, como estamos trabajando con el modelo de circuito cuántico, utilizaremos notación binaria para codificar los números comprendidos entre y El mayor número que necesitamos codificar es , por lo que el número de bits que necesitamos es
Por ejemplo, si en tenemos Este es el aspecto de la codificación de elementos de como cadenas binarias de longitud .
Y ahora, he aquí una definición precisa de cómo se define como una operación -qubit.
La cuestión es que, aunque sólo nos importa cómo funciona para , tenemos que especificar cómo funciona para el resto de estados de la base estándar , y tenemos que hacerlo de forma que nos siga dando una operación unitaria. Esto se consigue definiendo de forma que no afecte a los demás estados básicos estándar.
Utilizando los algoritmos para la multiplicación y división de enteros discutidos en la lección anterior, junto con la metodología para implementaciones reversibles y libres de basura de los mismos, podemos construir un circuito cuántico que realice para cualquier elección de a coste He aquí una forma de hacerlo.
- Construye un circuito para realizar la operación
donde
utilizando el método descrito en la lección anterior. Esto nos da un circuito de tamaño
-
Intercambia los dos sistemas -qubit utilizando swap gates para intercambiar los qubits individualmente.
-
De forma similar al primer paso, construye un circuito para la operación
donde es la inversa de en
Inicializando los qubits inferiores y componiendo los tres pasos, obtenemos esta transformación:
El método requiere qubits de espacio de trabajo, pero al final vuelven a su estado inicial, lo que nos permite utilizar estos circuitos para la estimación de fase. El coste total del circuito que obtenemos es
Para realizar y así sucesivamente, podemos utilizar exactamente el mismo método, excepto que sustituimos por y así sucesivamente, como elementos de Es decir, para cualquier potencia que elijamos, podemos crear un circuito para no iterando veces el circuito para sino calculando y luego usando el circuito para
El cálculo de potencias es el problema de exponenciación modular mencionado en la lección anterior. Este cálculo se puede hacer de forma clásica, utilizando el algoritmo de exponenciación modular mencionado en la lección anterior (a menudo llamado algoritmo de potencia en la teoría computacional de números). De hecho, sólo requerimos power-of-2 potencias de en concreto y podemos obtener estas potencias elevando iterativamente al cuadrado veces. Cada cuadratura puede realizarse mediante un circuito booleano de tamaño
En esencia, lo que estamos haciendo aquí es descargar el problema de iterar tantas como veces a una computación clásica eficiente. Y es una suerte que esto sea posible Para una elección arbitraria de un circuito cuántico en el problema de estimación de fase, es probable que esto no sea posible - y en ese caso el coste resultante para la estimación de fase crece exponencialmente en el número de qubits de control
Solución dada un vector propio conveniente
Para entender cómo podemos resolver el problema de búsqueda de órdenes utilizando la estimación de fase, empecemos suponiendo que ejecutamos el procedimiento de estimación de fase en la operación utilizando el vector propio Conseguir este eigenvector no es fácil, así que este no será el final de la historia, pero es útil empezar por aquí.
El valor propio de correspondiente al vector propio es
Es decir, para Por lo tanto, si ejecutamos el procedimiento de estimación de fase en utilizando el vector propio obtendremos una aproximación a Calculando el recíproco podremos aprender - siempre que nuestra aproximación sea lo suficientemente buena.
Más en detalle, cuando ejecutamos el procedimiento de estimación de fase utilizando qubits de control, lo que obtenemos es un número A continuación, tomamos como conjetura para , que es en el caso que nos ocupa. Para averiguar cuál es a partir de esta aproximación, lo natural es calcular el recíproco de nuestra aproximación y redondear al entero más próximo.
Por ejemplo, supongamos y realizamos la estimación de fase en con el vector propio utilizando los bits de control de . La mejor aproximación -bit a es y tenemos bastantes posibilidades (alrededor de en este caso) de obtener el resultado a partir de la estimación de fase. Tenemos
y redondeando al entero más próximo se obtiene , que es la respuesta correcta.
Por otro lado, si no utilizamos la precisión suficiente, es posible que no obtengamos la respuesta correcta. Por ejemplo, si tomamos qubits de control en la estimación de fase, podríamos obtener la mejor aproximación de -bit a que es Si tomamos el recíproco obtenemos
y redondeando al entero más próximo se obtiene una respuesta incorrecta de
¿Cuánta precisión necesitamos para obtener la respuesta correcta? Sabemos que el orden es un número entero, e intuitivamente lo que necesitamos es suficiente precisión para distinguir de las posibilidades cercanas, incluyendo y El número más cercano a del que tenemos que preocuparnos es y la distancia entre estos dos números es
Así, si queremos asegurarnos de que no confundimos con basta con utilizar la precisión suficiente para garantizar que una mejor aproximación a está más cerca de que de Si utilizamos la precisión suficiente para que
de modo que el error sea inferior a la mitad de la distancia entre y , entonces estará más cerca de que de cualquier otra posibilidad, incluidas y
Podemos comprobarlo de la siguiente manera. Supongamos que
para satisfaciendo
Si tomamos el recíproco obtenemos
Maximizando en el numerador y minimizando en el denominador, podemos acotar lo lejos que estamos de de la siguiente manera.
Estamos a menos de de así que, como era de esperar, llegaremos a cuando demos la vuelta.
Por desgracia, como aún no sabemos qué es , no podemos utilizarlo para saber cuánta precisión necesitamos. Lo que podemos hacer en su lugar es utilizar el hecho de que debe ser menor que para asegurarnos de que utilizamos la precisión suficiente. En particular, si utilizamos la precisión suficiente para garantizar que la mejor aproximación a satisface
entonces tendremos suficiente precisión para determinar correctamente cuando tomemos el recíproco. Tomando nos aseguramos de tener una alta probabilidad de obtener una estimación con esta precisión utilizando el método descrito anteriormente. (Tomar es suficiente si nos sentimos cómodos con un límite inferior del 40% en la probabilidad de éxito)
Solución general
Como acabamos de ver, si tenemos el vector propio de podemos aprender a través de la estimación de fase, siempre que utilicemos suficientes qubits de control para hacerlo con suficiente precisión. Por desgracia, no es fácil conseguir el vector propio , así que tenemos que averiguar cómo proceder.
Supongamos momentáneamente que procedemos igual que arriba, excepto con el vector propio en lugar de para cualquier elección de en la que decidamos pensar. El resultado que obtengamos del procedimiento de estimación de fase será una aproximación
Trabajando bajo el supuesto de que no conocemos ni ni esto podría o no permitirnos identificar Por ejemplo, si obtendremos una aproximación a que desgraciadamente no nos dice nada. Sin embargo, este es un caso inusual; para otros valores de al menos podremos aprender algo sobre
Podemos utilizar un algoritmo conocido como el algoritmo de la fracción continua para convertir nuestra aproximación en fracciones cercanas - incluyendo si la aproximación es lo suficientemente buena. No explicaremos aquí el algoritmo de la fracción continua. En su lugar, he aquí una declaración de un hecho conocido sobre este algoritmo.
Dado un número entero y un número real existe a lo sumo una elección de enteros con y satisfaciendo Dados y el algoritmo de fracción continua encuentra y o informa de que no existen. Este algoritmo puede implementarse como un circuito booleano de tamaño
Si tenemos una aproximación muy cercana a y ejecutamos el algoritmo de fracción continua para y obtendremos y tal y como se describen en el hecho. El análisis del hecho permite concluir que
Nótese en particular que no aprendemos necesariamente y sólo aprendemos en los términos más bajos.
Por ejemplo, y como ya nos hemos dado cuenta, no vamos a aprender nada de Pero ese es el único valor de en el que ocurre eso. Cuando es distinto de cero, puede tener factores comunes con pero el número que obtenemos del algoritmo de la fracción continua debe al menos dividir a
Está lejos de ser obvio, pero es cierto que si tenemos la capacidad de aprender y para para elegidos uniformemente al azar, entonces es muy probable que seamos capaces de recuperar después de unas pocas muestras. En particular, si nuestra suposición para es el mínimo común múltiplo de todos los valores para el denominador que observamos, acertaremos con alta probabilidad. Intuitivamente hablando, algunos valores de no son buenos porque comparten factores comunes con y esos factores comunes se nos ocultan cuando aprendemos y Pero no es probable que las elecciones aleatorias de oculten los factores de durante mucho tiempo, y la probabilidad de que no adivinemos correctamente tomando el mínimo común múltiplo de los denominadores que observamos cae exponencialmente en el número de muestras.
Queda por abordar la cuestión de cómo conseguir un vector propio de para ejecutar el procedimiento de estimación de fase. Resulta que, en realidad, no necesitamos crearlos
Lo que haremos en su lugar es ejecutar el procedimiento de estimación de fase en el estado por el que entendemos la codificación binaria de -bit del número en lugar de un eigenvector de Hasta ahora, sólo hemos hablado de ejecutar el procedimiento de estimación de fase en un eigenvector particular, pero nada nos impide ejecutar el procedimiento en un estado de entrada que no sea un eigenvector de y eso es lo que estamos haciendo aquí con el estado (Este no es un eigenvector de a menos que que no es una opción que nos interese)
La razón para elegir el estado en lugar de un vector propio de es que la siguiente ecuación es cierta.
Una forma de verificar esta ecuación es comparar los productos internos de los dos lados con cada estado base estándar, utilizando las fórmulas mencionadas anteriormente en la lección para ayudar a evaluar los resultados del lado derecho. En consecuencia, obtendremos exactamente los mismos resultados de medición que si hubiéramos elegido uniformemente al azar y utilizado como vector propio.
Para más detalle, imaginemos que ejecutamos el procedimiento de estimación de fase con el estado en lugar de uno de los vectores propios Tras realizar la transformada cuántica de Fourier inversa, obtenemos el estado
donde
El vector representa el estado de los qubits superiores después de haberles realizado la inversa de la transformada cuántica de Fourier.
Así, en virtud del hecho de que es un conjunto ortonormal, encontramos que una medición de los qubits superiores produce una aproximación al valor donde se elige uniformemente al azar. Como ya hemos comentado, esto nos permite aprender con un alto grado de confianza tras varias ejecuciones independientes, que era nuestro objetivo.
Coste total
El coste de ejecución de cada operación controlada-unitaria es Hay operaciones controladas-unitarias, y tenemos por lo que el coste total de las operaciones controladas-unitarias es Además, tenemos puertas Hadamard (que contribuyen al coste), y la transformada cuántica inversa de Fourier contribuye al coste. Así pues, el coste de las operaciones controladas-unitarias domina el coste de todo el procedimiento - que es por tanto
Además del propio circuito cuántico, hay que realizar algunos cálculos clásicos. Esto incluye el cálculo de las potencias en para que son necesarias para crear las puertas unitarias controladas, así como el algoritmo de fracción continua que convierte las aproximaciones de en fracciones. Estos cálculos pueden realizarse mediante circuitos booleanos con un coste total de
Como es habitual, todos estos límites pueden mejorarse utilizando algoritmos asintóticamente rápidos; estos límites suponen que estamos utilizando algoritmos estándar para las operaciones aritméticas básicas.
Factoring por búsqueda de pedidos
Lo último que tenemos que discutir es cómo la resolución del problema de búsqueda de órdenes nos ayuda a factorizar. Esta parte es completamente clásica: no tiene nada que ver específicamente con la computación cuántica.
Esta es la idea básica. Queremos factorizar el número y podemos hacerlo recursivamente. En concreto, podemos centrarnos en la tarea de dividir , lo que significa encontrar dos enteros cualesquiera para los que Esto no es posible si es un número primo, pero podemos comprobar eficientemente si es primo utilizando primero un algoritmo de comprobación de primalidad, y si no es primo intentaremos dividirlo. Una vez que dividimos podemos simplemente recurrir en y hasta que todos nuestros factores sean primos y obtengamos la factorización prima de
Dividir números enteros pares es fácil: simplemente mostramos y
También es fácil dividir potencias perfectas, es decir, números de la forma para números enteros con sólo aproximando las raíces y así sucesivamente, y comprobando los enteros cercanos como sospechosos para No necesitamos ir más allá de pasos en esta secuencia, porque en ese punto la raíz cae por debajo de y no revelará candidatos adicionales.
Es bueno que podamos hacer estas dos cosas porque la búsqueda de orden no nos ayudará a factorizar números pares o para potencias primos, donde el número resulta ser primo. Sin embargo, si es impar y no una potencia prima, la búsqueda de orden nos permite dividir
-
Elige al azar
-
Compute
-
Si entonces salida y y parada. De lo contrario, continúe con el siguiente paso sabiendo que
-
Sea el orden de módulo (Aquí es donde necesitamos encontrar el orden.)
-
Si es par:
5.1 Calcular módulo \ 5.2 Calcular \ 5.3 Si entonces salida y y parada.
-
Si se alcanza este punto, el algoritmo no ha conseguido encontrar un factor de
Una ejecución de este algoritmo puede no encontrar un factor de Concretamente, esto ocurre en dos situaciones:
- El orden de módulo es impar.
- El orden de módulo es par y
Utilizando la teoría básica de números, se puede demostrar que, para una elección aleatoria de con una probabilidad de al menos , no se produce ninguno de estos sucesos. De hecho, la probabilidad de que ocurra cualquiera de los dos sucesos es como máximo , siendo el número de factores primos distintos de por lo que es necesario suponer que no es una potencia prima. (La suposición de que es impar también es necesaria para que este hecho sea cierto)
Esto significa que cada ejecución tiene al menos un 50% de probabilidades de dividir Por lo tanto, si ejecutamos el algoritmo veces, eligiendo aleatoriamente cada vez, conseguiremos dividir con una probabilidad de al menos
La idea básica del algoritmo es la siguiente. Si tenemos una elección de para la cual el orden de módulo es par, entonces es un número entero y podemos considerar los números
Utilizando la fórmula concluimos que
Ahora, sabemos que por la definición del orden - que es otra manera de decir que divide uniformemente a Eso significa que divide uniformemente el producto
Para que esto sea cierto, todos los factores primos de deben ser también factores primos de o (o ambos) - y para una selección aleatoria de resulta improbable que todos los factores primos de dividan uno de los términos y ninguno divida el otro. En caso contrario, siempre que algunos de los factores primos de dividan al primer término y otros dividan al segundo, podremos encontrar un factor no trivial de calculando el DGC con el primer término.