# Algoritmo de búsqueda de orden para algoritmos cuánticos

Encontrar el llamado orden es uno de los pasos esenciales en diversos algoritmos cuánticos. Aquí, por analogía con los demás casos, se tratará el problema de la búsqueda del orden enfocado al algoritmo de Shor, lo cual proporciona un marco claro donde puede verse una motivación para este parámetro. Por ello, se citarán algunos razonamientos o conclusiones extraídos de dicho algoritmo o alguna de sus subrutinas.

## Definición de orden

Sean $x$ y $N$ enteros positivos sin divisores comunes, se define el orden $r$ como el menor número entero tal que $x^{r}=1$ (módulo $N$).
No existe un algoritmo clásico que resuelva el problema de encontrar el orden fijados $x$ y $N$ cualesquiera con recursos polinómicos. Por este motivo se hace necesaria la implementación de un algoritmo cuántico eficiente tal como el que va a explicarse haciendo uso de lo que se conoce como estimación de fase.

## Desarrollo del algoritmo

De hecho, el algoritmo cuántico para encontrar el orden consiste en el algoritmo cuántico de estimación de fase aplicado al siguiente operador unitario:
$U|y>=|xy(mod\ N)>$
con $y\in \{0,1\}^{L}$, actuando no trivialmente solo cuando $0\leq y\leq N-1$.
Este operador tiene como autoestados:
$|u_{s}>\equiv {\frac {1}{\sqrt {r}}}\sum _{k=0}^{r-1}exp[{\frac {-i2\pi sk}{r}}]|x^{k}\ mod\ N>$
Fácilmente se comprueba que efectivamente al actuar el operador $U$ sobre este autoestado obtenemos el mismo autoestado salvo una fase (su autovalor):
$U|u_{s}>\equiv {\frac {1}{\sqrt {r}}}\sum _{k'=0}^{r-1}exp[{\frac {-i2\pi sk'}{r}}]|x^{k'+1}\ mod\ N>={\frac {1}{\sqrt {r}}}\sum _{k=1}^{r}exp[{\frac {-i2\pi s(k-1)}{r}}]|x^{k}\ mod\ N>=exp[{\frac {i2\pi s}{r}}]{\frac {1}{\sqrt {r}}}\sum _{k=1}^{r}exp[{\frac {-i2\pi sk}{r}}]|x^{k}\ mod\ N>=exp[{\frac {i2\pi s}{r}}]|u_{s}>$
Para recuperar el autoestado hemos necesitado que el sumando correspondiente a $k=r$ sea igual al correspondiente a $k=0$, lo cual se cumple por la definición de orden que hemos dado.
La estimación de fase proporcionará estos autovalores del cual obtendremos el orden. Para llevar a cabo este procedimiento, hay dos requerimientos:
* Tener procedimientos eficientes para implementar una operación controlada $U^{2j}$ para cualquier entero $j$, lo que se consigue mediante la exponenciación modular.
* Ser capaces de preparar un autoestado con autovalor no trivial, que se toma como elección ad hoc como:
${\frac {1}{\sqrt {r}}}\sum _{s=0}^{r-1}|u_{s}>\equiv |1>$

### Exponenciación modular

Buscamos una transformación del tipo:
$|z>|y>\longrightarrow |z>|x^{z}y\ (mod\ N)>$
donde el primer $|z>$ corresponde a los $t$ qubits del primer registro e $|y>$ corresponde al segundo registro, tal y como se explica en el algoritmo cuántico de estimación de fase.
Por lo visto anteriormente, es conocido que dicha transformación puede darse por medio de la aplicación del operador $U$:
$|z>|y>\longrightarrow |z>U^{z}|y>=|z>U^{z_{t}2^{t-1}}...U^{z_{1}2^{0}}|y>=|z>|x^{z_{t}2^{t-1}}\times ...\times x^{z_{1}2^{0}}y>=|z>|x^{z}y\ (mod\ N)>$
donde se ha escrito $z$ (el contenido del primer registro) en notación binaria.
Así, el circuito cuántico del algoritmo para encontrar el orden se resume en lo anterior donde los $t$ qubits del primer registro son $|0>$ y el estado del segundo registro es precisamente el autovector definido como $|1>$. Este algoritmo, como ya se ha visto en estimación de fase, proporciona el valor de $\varphi ={\frac {s}{r}}$. Por tanto, ya solo queda ser capaces de hallar el valor de r, para lo cual se va a explicar a continuación la subrutina que habría que implementar:

### Expansión de fracciones continuada

La fracción continua constituye una transformación sencilla y original de una fracción que tiene gran utilidad a la hora de estudiar números irracionales, y que en el contexto dentro del algoritmo de Shor no será más que una subrutina puramente clásica que no introducirá una mayor dificultad teórica. Esta idea se entiende muy bien explicándolo con un ejemplo sencillo:
${\frac {7}{33}}={\frac {1}{\frac {33}{7}}}={\frac {1}{4+{\frac {5}{7}}}}={\frac {1}{4+{\frac {1}{\frac {7}{5}}}}}={\frac {1}{4+{\frac {1}{1+{\frac {2}{5}}}}}}={\frac {1}{4+{\frac {1}{1+{\frac {1}{\frac {5}{2}}}}}}}={\frac {1}{4+{\frac {1}{1+{\frac {1}{2+{\frac {1}{2}}}}}}}}\longrightarrow [4,1,2,2]$
Con este procedimiento se puede conocer el cociente $s/r$ con el previo conocimiento del correspondiente conjunto de enteros. Puesto que no es conocido dicho conjunto de enteros, básicamente se tiene que ir probando aleatoriamente combinaciones de enteros hasta que se obtiene el valor del cociente. Cuando se llega a esta situación basta con realizar marcha atrás el desarrollo y obtendremos unos $s$ y $r,$ que ahora se verá que no tienen por qué ser los requeridos ($r$ podría no ser el orden).
Como se puede entender, este algoritmo conlleva un tiempo de cómputo increíblemente alto en general, por lo que no constituye un método muy eficiente para obtener el orden. Además, este método podría dar un $r$ que no coincida con el orden por dos motivos:
* Que el algoritmo de estimación de fase haya proporcionado un $s/r$ erróneo, posibilidad que se puede minimizar cuanto se quiera aumentando el número de qubits $t$ del primer registro en estimación de fase (aumentar el circuito).
* Que $s$ y $r$ tengan máximo común divisor distinto de 1 y por tanto $r$ no sea el menor número posible que cumpla que $x^{r}=1$ (módulo $N$).
Para estar seguros de que no se da este segundo motivo de error, se puede repetir el proceso un número alto de veces concreto que ahora razonaremos. Para ello, vamos a dar dos resultados útiles:
* Dos números son coprimos si su máximo común divisor es 1. Como consecuencia, cualquier número primo es coprimo con todos.
* Dado un número entero positivo $\alpha$, hay como mínimo ${\frac {\alpha }{2\log {\alpha }}}$ números primos bajo este. Así, al elegir un número menor que $\alpha$ la probabilidad de que este número sea primo es como mínimo ${\frac {1}{2\log \alpha }}$.
Por lo contado hasta ahora, también se conoce que $s<r$. Puesto que la probabilidad de que conocido $r$ se cumpla que $s$ es un número primo (y por tanto coprimo con $r$) es como mínimo ${\frac {1}{2\log r}}$, habría que elegir $s$ aleatoriamente $2\log r$ veces para hallar (con alta probabilidad) un $s$ primo. Sin embargo, no se conoce $r$. Por otro lado, se extrae inmediatamente de la definición de orden dada que $r<N$, no haciendo falta conocer $r$ previamente, pues repitiendo el proceso de expansión de fracciones $2\log N$ veces aleatoriamente puede asegurarse de nuevo con alta probabilidad que uno de los valores de $s$ hallados es primo. Para cada "elección aleatoria" de $s$ y $r$ hasta que se cumpla $x^{r}=1$ (módulo $N$), pudiendo afirmar definitivamente que este es el orden.