Posterior: Algoritmo de Shor
Arriba: Un poco de computación
Anterior: Algoritmo de Deutsch-Jozsa
Sea
una función. La transformada discreta de Fourier de es la función
tal que para cada
:
. Aquí es la raíz cuadrada de -1.
En consideremos la base canónica formada por los vectores
,
. Para cada vector
, su transformada discreta de Fourier es
. Es claro que es una transformación lineal y, respecto a la base canónica de , se representa por la matriz
, la cual es en efecto unitaria, de hecho la matriz hermitiana de , , tiene la misma estructura que salvo que los exponentes en cada entrada tienen el signo ``''.
En particular, se tiene
|
(6) |
y, por supuesto,
|
(7) |
Ahora, supongamos que es una potencia de 2. En este caso, la puede calcularse mediante el procedimiento de la llamada transformada rápida de Fourier (o si se quiere, por sus siglas en inglés: Fast Fourier Transform). Este procedimiento es de complejidad en tiempo
. Mas utilizando el paralelismo inherente a la computación cuántica, se le calculará aquí en un tiempo .
Observamos, por un lado, que
, y por otro lado, de la ecuación (6), que para los primeros valores de se tiene:
-
-
De manera general, a cada índice
lo identificaremos con la palabra
que lo representa en base 2. Así, el vector básico
es el producto tensorial de los vectores básicos
. Tendremos entonces, en
, que para cada
:
La forma de los factores en este producto tensorial sugiere considerar los operadores
con representación, respecto a la base canónica, dada mediante la matriz unitaria
. De hecho, como en (8) la potencia en la exponenciación va cambiando, podemos considerar más bien un correspondiente operador ``controlado'':
. Así, por ejemplo, si entonces en tanto que si entonces coincide con la identidad.
Observamos además que para
se tiene
.
Ahora, a cada
representémoslo en base-2 mediante la palabra
. Se tiene que para cada
,
. Por tanto,
y en consecuencia,
.
Como ha de variar entre 0 y vemos que se ha de disponer de compuertas de la forma
,
,
.
Observamos también que si , con entonces todos los dígitos, en su representación binaria, con índices entre y son 0, y por tanto las correspondientes compuertas controladas actuarán como la identidad. Definamos pues para cada
,
|
(9) |
donde
. Tenemos pues:
.
Fijo
para
los términos
van dando los de la derecha de la ec. (8) y éstos van apareciendo de izquierda a derecha según se les muestra ahí. Sin embargo, para cada
observamos que en la definición (9) se está utilizando una notación algebraica, es decir, los operadores
se aplican en orden inverso: de derecha a izquierda. De hecho, haciendo un poco más explícita la definición (9) se tiene:
es decir, para cada
se han de aplicar consecutivamente las compuertas
, con
, la cual selecciona a los dígitos en la representación binaria de yendo del más significativo hacia el menos significativo.
Así pues, será necesario utilizar los operadores reverso para intercambiar el orden de los bits de cada índice
.
Ahora bien, cada bit se representa por el vector básico
. Así que cada operador controlado
, cuyo dominio es puede identificarse con el operador
donde
|
(10) |
El algoritmo para calcular la transformada de Fourier es entonces el siguiente:
- Entrada.
- ,
.
- Salida.
-
.
- Procedimiento
- TDF
- Sea
.
- Para cada
, o equivalentemente, para cada
, hágase en paralelo:
- Para cada
hágase en paralelo:
- Sea
el reverso de la cadena formada por los bits menos significativos (véase la ec. (5)).
- Sea
.
- Para hasta hágase {
(véase la ec. (10)) }
- Sea
(véase la ec. (8)).
- Dése como resultado
.
El cálculo de la transformada inversa discreta de Fourier, TIDF
se hace de manera similar cambiando la matriz por su hermitiana que sólo involucra el cambio de signo en la potencia de su elemento .
Posterior: Algoritmo de Shor
Arriba: Un poco de computación
Anterior: Algoritmo de Deutsch-Jozsa
Guillermo Morales-Luna gmorales at cs.cinvestav.mx
2003-12-11