SciELO - Scientific Electronic Library Online

 
vol.64 número2Cómo las radiaciones alteran los objetosLímites de las dimensiones extras considerando las leyes termodinámicas de la radiación de cuerpo negro índice de autoresíndice de materiabúsqueda de artículos
Home Pagelista alfabética de revistas  

Servicios Personalizados

Revista

Articulo

Indicadores

Links relacionados

  • No hay artículos similaresSimilares en SciELO

Compartir


Revista mexicana de física E

versión impresa ISSN 1870-3542

Rev. mex. fís. E vol.64 no.2 México jul./dic. 2018

 

Education

Algoritmo cuántico de Deutsch y Jozsa en GAMA

M. Paredes Lópeza 

A. Meneses Viverosb 

G. Morales-Lunab 

aDepartamento de Matemáticas, Cinvestav, Av. Instituto Politécnico Nacional 2508, CDMX

bDepartamento de Computación, Cinvestav, Av. Instituto Politécnico Nacional 2508, CDMX


Resumen

Una propiedad importante de la computación cuántica es su paralelismo implícito, que permite procesar un número exponencial de transformaciones básicas mediante un número lineal de qubits en un sistema cuántico. El algoritmo de Deutsch y Jozsa ilustra la reducción, proporcionada por el cómputo cuántico, en la complejidad del procesamiento. Presentamos aquí la implementación y la ejecución del algoritmo cuántico de Deutsch y Jozsa en GAMA, herramienta que hemos desarrollado para la simulación y monitorización de algoritmos cuánticos. La simulación permite explorar los detalles de sus componentes mediante el módulo de depuración de GAMA que permite mostrar las diferentes configuraciones que cada componente puede asumir.

Palabras clave: Computación cuántica; paralelismo; qubits; complejidad computacional; simulación cuántica

Abstract

An important feature of quantum computing is its inherent paralellism, allowing to process an exponential number of basic transforms with just a linear number of qubits. The Deutsch-Jozsa algorithm exemplifies the computational complexity reduction. This work reports the implementation and execution of the Deutsch-Josza quantum algoritm in GAMA, a programming language for quantum computing simulation developed by ourselves. Through this simulation, it is possible to explore all the components involved by tracing all the different configurations that each component may take.

Keywords: Quantum computing; parallelism; qubits; computational complexity; quantum simulation

PACS: 03.67.Ac; 03.67.Lx

1. Introducción

La computación cuántica aprovecha fenómenos de la mecánica cuántica para realizar computaciones, tales como la superposición, el entrelazamiento o el paralelismo implícito. El cómputo cuántico permite desarrollar algoritmos para acelerar procesos, o transmisiones de información o, incluso, encontrar nuevas propiedades de física cuántica 1.

Un algoritmo es una sucesión finita de pasos para resolver una tarea, y uno cuántico consiste en aplicar una serie finita de transformaciones (o compuertas cuánticas) a un estado inicial para producir un estado final. En la actualidad se han desarrollado diversos algoritmos cuánticos en diferentes áreas tales como criptografía, búsqueda, optimización, resolución de sistemas lineales y simulación de sistemas cuánticos, entre otros 2. El algoritmo de Deutsch y Jozsa es uno de los primeros algoritmos cuánticos que surgieron 3. Y aunque se ha implementado y simulado usando diferentes técnicas 4,5,6,7,8,9, y ha demostrado obtener resultados en un solo paso de tipo cuántico en comparación con el algoritmo secuencial clásico que requiere un número exponencial, sus aplicaciones han sido limitadas. Sin embargo, recientemente, este algoritmo ha sido utilizado para resolver distintos problemas, entre ellos, en lenguajes formales para determinar diferentes partes en una estructura de datos de tipo arreglo y aplicar funciones específicas a cada una de las partes 10. También la utilización del algoritmo de Deutsch y Jozsa ha sido propuesto dentro del contexto del análisis de datos masivos 11.

Dada la importancia del algoritmo de Deutsch y Jozsa en el entendimiento de algoritmos cuánticos, presentamos su implementación en el lenguaje de programación cuántica GAMA (lenguaje de propósito específico diseñado para la simulación de algoritmos cuánticos 12). En particular, tal implementación está orientada a la enseñanza de algoritmos cuánticos. Durante su desarollo encontramos que la parte medular de este algoritmo consiste en la construcción de la compuerta cuántica U f , introducida en la Sec. 2.5, con la cual es posible la evaluación de una sola función para múltiples valores de entrada.

Este artículo tiene la composición siguiente: en la Sec. 2 introducimos brevemente los conceptos fundamentales de la computación cuántica, asi como la definición de un algoritmo cuántico, en las Secs. 3 y 4 describimos el algoritmo cuántico de Deutsch y Jozsa y su implementación, en la Sec. 5 presentamos los resultados y una breve discusión de los resultados, y, finalmente, en la Sec. 6 presentamos las conclusiones del trabajo.

2. Fundamentos de algoritmos cuánticos

En la computación cuántica se trabaja con sistemas cuánticos finitos y se trata con espacios vectoriales complejos de dimensión finita.

2.1. Bits cuánticos

En el modelo de computación clásica la unidad básica de información es el bit, el cual asume uno de dos posibles valores, ya sea 0 o 1. Análogamente, el modelo de computación cuántica tiene como unidad básica el qubit, que puede asumir una superposición de dos valores, o estados, distintos, digamos |0 o |1, los cuales representan los dos valores de un bit clásico.

Los vectores 0=[1 0]T y 1=[0 1]T forman la base canónica en C2. Los covectores, o funcionales linealesx|=|xH (el superíndice H denota transposición conjugada), con x{0,1}, forman la base del espacio dual (C2)*, que al ser de Hilbert, es isomorfo a C2 mismo.

Esta notación tiene la ventaja de poder especificar las transformaciones cuánticas (ver Sec. 2.4) sobre estados cuánticos en términos de la base canónica. Por ejemplo, la transformación que intercambia los estados |0 y |1 está dada por la matriz X=|01|+|10|.

Un qubit es una superposición de bits clásicos, es decir, es una combinación lineal a|0+b|1, donde a y b son números complejos tales que |a| + |b| = 1. El espacio de Hilbert complejo de dimensión 2, con base ortonormal E=[|0,|1], contiene a los qubits como sus vectores unitarios.

El mecanismo de medición (ver Sec. 2.3) de qubits se hace con respecto a una base ortonormal, en este caso E, la probabilidad de que el valor medido sea |0 es |a| y la probabilidad de que el valor medido sea |1 es |b|.

Aunque un qubit puede variar de manera continua entre un conjunto de estados cuánticos, después de su medición es posible que asuma un único estado determinista, es decir, extrae un simple bit clásico. La medición de qubits es un proceso que solamente puede ser aplicada una vez, ya que un qubit al ser medido pierde su estado de superposición.

2.2. Registros cuánticos

Dado un entero k1, sea n =2 k . Un sistema cuántico de k-qubits varía en un espacio de estados de n dimensiones. Cualquier vector de la forma

ψ=i=0n-1μi|i (1)

donde μiC y i=0n-1|μi|2=1, es un vector unitario en Cn. De hecho, al representar cada índice en base 2, i = (i k-1 i 1 i 0)2 se podría escribir

ψ=ik-1,,i1,i0=01μik-1i1i0|ik-1i1i0 (2)

Tal vector unitario 𝜓 es un quregistro.

La relación entre k y n es lo que determina el poder real de la computación cuántica: un quregistro puede asumir, al aplicar un operador de medición, un número exponencial, en términos de k, de estados deterministas. Así, la concatenación de k qubits, produce vectores de dimension 2 k . Desde el punto de vista algebraico, los estados cuánticos se combinan mediante el producto tensorial (): el producto tensorial de k qubits es un k-quregistro.

Recordamos brevemente: sean V y W dos espacios complejos de Hilbert, de dimensión finita, con bases ortonormales respectivas vii=0n-1 y wjj=0m-1. El producto tensorialVW tiene como base viwji=0,,n-1j=0,,m-1. Por tanto, dim(VW)=dim(V)dim(W).

En la potencia tensorial C2kC2k, se suele escribir

|ik-1i1i0=|ik-1|i1|i0.

También se tiene que en la esfera unitaria del espacio C2k existen vectores que no son productos tensoriales de vectores de dimensión menor. Estos son llamados entrelazados.

El origen del poder del cómputo cuántico se deriva de la posibilidad de codificar procesos como la evolución de estados cuánticos.

2.3. Toma de mediciones

La medición de qubits constituye otra gran diferencia entre el modelo clásico y el modelo cuántico, puesto que se puede medir (leer) el valor que tiene un bit. Sin embargo, no se puede leer el valor de un qubit sin alterarlo, ya que éste se convierte en un estado determinista. Dado un qubit

ψ=μ0|0+μ1|1 (3)

donde μ0, μ1C, |μ0|2+|μ1|2=1, su medición proporcionará |0 con probabilidad |μ 0|2 o |1 con probabilidad |μ 1|2.

De manera similar, al tener un k-quregistro 𝜓 como en la ec. (1), para cada i = 0, …, 2 k -1, la probabilidad de que tras la medición el estado 𝜓 asuma el estado determinista |i2=|ik-1i1i0 es |μi|2=|μik-1i1i0|2 (véase la Ec. (2)).

Esto propicia comportamientos particulares entre los quregistros entrelazados y los que no lo son. Por ejemplo, en un k-quregistro de la forma ψ=(a0|0+a1|1)ϕ, donde ϕ es un (k-1)-quregistro se tendría que, al tomar una medición en su primer qubit, éste transitaría a uno |ε, con ε{0,1}, con probabilidad |aε|2. Luego 𝜓 transitaría a |εϕ, es decir, la medición del primer qubit no influye sobre las de los demás. En cambio, para un estado maximalmente entrelazado, digamos a0|00+a1|11, con |a0|2+|a1|2=1, al hacer una medición en su primer qubit, éste transitaría a uno |ε, con ε{0,1}, con probabilidad |aε|2, y el quregistro completo transitará a |εε, es decir ¡al determinar el primer qubit, los demás quedarán determinados también y, en este caso, con el mismo valor! Esta es la célebre “acción escalofriante” (spooky action) que originó la llamada paradoja ERP (por Einstein, Rosen y Podolsky), de los estados entrelazados.

2.4. Compuertas cuánticas

Así como una computadora clásica utiliza circuitos lógicos que permiten la manipulación de información mediante compuertas, en el cómputo cuántico existen mecanismos para manipular quregistros. El análogo a los circuitos lógicos son las compuertas cuánticas o bien qucompuertas. Las compuertas cuánticas y las composiciones de ellas transforman linealmente un estado inicial 𝜓1 en un estado final 𝜓2, conservando siempre sus normas y ángulos, es decir, son transformaciones unitarias13. Cuando se fija una base del espacio, cualquier transformación unitaria queda descrita por una matriz. Sea A la conjugada transpuesta de la matriz A. Una matriz A es unitaria si se cumple que AA = I. Las compuertas son transformaciones unitarias en espacios de Hilbert 13. Dado este hecho, una de las consecuencias más importantes de las compuertas cuánticas es que son reversibles, véase 1.

2.4.1. Transformaciones lineales sobre qubits

Para entender mejor el concepto de compuerta cuántica, veremos algunos ejemplos muy sencillos que operan sobre qubits. A continuación, mostramos las matrices de Pauli, las cuales pueden generar cualquier transformación lineal de dimension 2, a partir de una combinación lineal de ellas con coeficientes complejos. En la primera columna aparece cada matriz y en la segunda la transformación lineal correspondiente, especificada por su acción en la base canónica:

I=1001I:|0|0|1|1

X=0110X:|0|1|1|0

Z=100-1Z:|0|0|1-|1

Estas transformaciones tienen un nombre convencional. I es la transformación identidad, X es la negación y Z es un corrimiento de fase. Cualquiera de éstas cumple la propiedad de ser transformaciones unitarias.

Otra compuerta muy común es Cnot (Controlled-NOT gate), la cual “niega al segundo qubit siempre que el primero esté afirmado”. Actuando en la base de los 2-quregistros es

Cnot:|0x|0|x|1x|1X|x,

y tiene como matriz

Cnot=1000010000010010=I00X

donde X es la compuerta de negación. El primer qubit es de control y el segundo de salida (se dice también “target”). Cnot es unitaria y no puede ser descompuesta como el producto tensorial de dos transformaciones de qubits.

Otra transformación importante que opera sobre un qubit es la de Hadamard:

H:|012(|0+|1)|112(|0-|1)

la cual tiene importantes aplicaciones. Cuando ésta es aplicada a |0, H crea una superposición del estado (1/2)(|0+|1). Aplicada a n bits genera una superposición de 2n posibles estados:

(HHH)|000=12nx=02n-1|x.

Hn=(HHH) es llamada de Walsh, o de Walsh-Hadamard, y es práctica común denotarla como Wn . De manera recursiva:

W1=H   ,  Wn+1=HWn.

A diferencia de la computación clásica, en la que se puede realizar la copia de información sin ningún problema, en la computación cuántica la accesabilidad a la información tiene una limitante importante. La mecánica cuántica no permite la copia exacta de estados cuánticos.

Teorema de no-clonación. No es posible hacer una copia o clonación de un estado cuántico14.

Como un mero bosquejo, supongamos que U fuera una transformación unitaria que clone estados, es decir U(|a0)=|aa cualquiera que sea |a. Si se considera un par de estados cuánticos ortogonales, digamos |a y |b, para el estado |c=(1/2)(|a+|b) resulta, por un lado

U(|c0)=U12(|a0+|b0)=12(U(|a0)+U(|b0))=12(|aa+|bb)

y por otro lado, siendo U de clonación

U(|c0)=|cc=12(|a+|b)12(|a+|b)=12(|aa+|bb)+12(|ab+|ba)

lo que implica (1/2)(|ab+|ba)=0, lo cual no es posible.

También es claro que clonar es imposible mediante la sola toma de mediciones, pues esta última destruye estados.

2.5. Algoritmos cuánticos

Un algoritmo cuántico consiste de la ejecución de una serie de compuertas cuánticas sobre entidades, que pueden ser qubits o quregistros, seguida de una toma de medición.

Para simular un algoritmo cuántico, luego de una inicialización de la máquina de estados y de sus qubits y quregistros, se aplican las transformaciones unitarias indicadas. Dado que la toma de mediciones es probabilista, se ha de disponer de un generador de números aleatorios. Dependiendo de la toma de mediciones se decide si acaso se concluye el proceso, o bien, se lo reinicia.

El poder de la computación cuántica lo ocasiona su paralelismo inherente y el entrelazamiento.

Es posible, por ejemplo, dada una función f, la evaluación simultánea de valores f(x) para muchos valores de x en la simple aplicación de una compuerta cuántica Uf .

En efecto, una forma cuántica de llevar a cabo esto es considerando una computadora de 2-quregistors que iniciando en el estado |x,y, aplica Uf para llegar al estado |x,yf(x), donde es la adición módulo 2; el primer registro x denota al registro de datos de entrada, el segundo registro y es de salida. Nótese que si y = 0 la operación deja el valor de f (x). Si el registro de entrada es inicializado en la superposición |h=(|0+|1)/2, la cual es creada aplicando la compuerta de Hadamard al estado |0, al aplicar Uf resulta

Uf|h0=|0,f(0)+|1,f(1)2.

Este estado contiene información de ambos valores f(0) y f(1), pero no da uno determinado, y, al tomar una medición, se arribará a cualquiera de los estados deterministas |0,f(0), |1,f(1) con igual probabilidad.

3. Algoritmo cuántico de Deutsch y Jozsa

La idea de los algoritmos cuánticos es almacenar información en una superposición de estados cuánticos, manipularlos mediante transformaciones unitarias y extraer información útil del estado resultante.

Veamos el algoritmo de Deutsch y Jozsa, el cual fue de los primeros algoritmos de tipo cuántico 15. Éste puede resolver más rápido, usando efectos cuánticos 3, un problema que una computadora clásica lo haría en un número exponencial de exponencialmente.

Una función booleana f:Z2nZ2 es constante si es idénticamente 0 o 1, y es equilibrada si el número de veces que asume el valor 0 es el mismo que el que asume el valor 1, es decir

card{xZ2n|f(x)=0}=2n-1=card{xZ2n|f(x)=1}.

Se ve fácilmente que hay 2n2n-1=O(n2n-1) funciones booleanas equilibradas, lo cual es un crecimiento doblemente exponencial. Por ejemplo, los primeros valores son los siguientes:

n12345(2n2n-1)267012870601080390

Tabla I. Funciones constantes o equilibradas de dos entradas. 

Sea Dn el conjunto de todas las funciones booleanas constantes o equilibradas. En el cuadro 3 se muestra el conjunto D2 de las 8 = 2 + 6 funciones constantes (f0 y f7) o equilibradas (f1- f6).

El propósito del algoritmo de Deutsch y Jozsa es decidir, para una función dada f:Z2nZ2 que esté en D n , fDn, si acaso es constante o equilibrada “utilizando un solo paso de cómputo”.

Clásicamente, habría que evaluar los valores f(x) de f para todas las entradas x. En el peor caso se tendría que recorrer las 2 n posibilidades. Veamos el procedimiento del algoritmo cuántico, donde con una sola evaluación de f se determina si es constante o equilibrada.

Se considera el operador unitario U f definido en el espacio de los (n+1)-quregistros, es decir, actúa en el espacio complejo de dimension 2 n+1 . En cada entrada |xy=|x|y, donde |x es un n-quregistro e |y es un qubit, produce el (n+1)-quregistro

|Ψ=Uf|xy=|x|yf(x).

Uf aparece bosquejado en la Fig. 1.

Figura 1. Ilustración de la compuerta cuántica Uf utilizada en el algoritmo de Deutsch y Jozsa. 

Así pues

Uf:|xy=|x|y|x|yf(x) (4)

Inicialmente se considera el estado de entrada

|0|0nveces|1=|00nveces1=|0n1. (5)

Luego, a cada qubit se le aplica la compuerta de Hadamard:

HHn+1veces|0n1=12n/2xZ2n|xH|1. (6)

Observamos que para cada xZ2n, Uf actúa como sigue

Uf : x0xfx  ,  |x1|x(1f(x))

y también, puesto que H|1=12(|0-|1),

Uf|xH|1=12|x0-|x1 si f(x)=0|x1-|x0 si f(x)=1=12(-1)f(x)(|x0-|x1).

De (6) se ha de tener

UfH(n+1)|0n1=12(n+1)/2xZ2n(-1)f(x)(|x0-|x1).

Al aplicar H(n+1) a cada (n + 1)-quregistro |xb, b{0,1}:

H(n+1)|xb=12(n+1)/2(i=0n-1(|0+(-1)xi|1))(|0+(-1)b|1)=12(n+1)/2(zZ2n(-1)x|z|z)(|0+(-1)b|1)

donde x|z es el producto interno en Z2n. Así,

H(n+1)(|x0-|x1)=22(n+1)/2zZ2n(-1)x|z|z|1

de donde se podrá expresar

H(n+1)UfH(n+1)|0n1=zZ2ncz|z1

siendo, para cada zZ2n,

cz=12nxZ2n(-1)f(x)+x|z.

La probabilidad de que al tomar una medición, respecto a la base canónica, quede el estado determinista |0n1 es entonces |c 0|2 y éste tiene como valor 1 si f es constante y valor 0 si f es equilibrada. Por tanto, al tomar una medición a H(n+1)UfH(n+1)|0n1, si se obtiene |0n1, se decide con toda certeza que f es constante, en otro caso, f es equilibrada. Es decir, con la medición de los primeros n-qubits se puede saber si f se trata de una función equilibrada o constante 15,16,17.

4. Implementación del algoritmo de Deutsch y Jozsa

Dada la definición del algoritmo de Deutsch y Jozsa en la Sec. 3, a continuación introducimos el procedimiento para llevar a cabo su implementación en el simulador de algoritmos cuánticos.

La Fig. 2 muestra esquemáticamente la serie de transformaciones de tipo cuántica (ψ1, ψ2 y |ψ3 que se le aplican al estado inicial |ψ0 para resolver el problema de Deutsch y Jozsa. Particularmente, estas tres transformaciones son las que generan los estados intermedios ψ1,ψ2 y |ψ3 y que constituyen el algoritmo cuántico de Deutsch y Jozsa.

Figura 2. Algoritmo de Deutsch y Jozsa para un quregistro de control |0n y un estado |1

A continuación describimos la serie de transformaciones necesarias en el algoritmo cuántico de Deutsch y Jozsa para posteriormente introducir el pseudocódigo del algoritmo en la Sec. 5.

El estado inicial, |ψ0, es generado a partir del producto tensorial entre un quregistro de control |0n (usado para almacenar los argumentos de la función) y un qubit de función |1 (utilizado para evaluar la función) 6,

|ψ0=|0n|1.

La primera transformación, |ψ1, consiste en aplicar la compuerta cuántica de Hadamard al estado inicial, |ψ0,

|ψ1=Hn+1|ψ0=Hn|0nH|1=xZ2n12n|x|0-|12, (7)

Donde x, es la representación binaria de un número entero entre [0, 2 n-1 ], utilizando n qubits.

La segunda transformación consiste en aplicar la compuerta Uf a |ψ1. El operador Uf se encarga de realizar el mapeo de un quregistro de la siguiente manera:

Uf:|xa=|x|a|x|af(x)

donde denota la suma entera módulo 2, es decir:

00=0,01=1,10=1,11=0.

El operador Uf tiene el efecto de introducir la fase (-1) fx al estado |x. Así al aplicar Uf al estado |ψ1, de la Ec. (7) tenemos

|ψ2=12nxZ2n(-1)f(x)|x|0-|12, (8)

Finalmente, la tercera transformación consiste en aplicar el operador de Hadamard a |ψ2, de lo que obtenemos

|ψ3=12nx,zZ2n(-1)f(x)+x|z|z|1, (9)

El estado resultante es |ψ3. Para conocer si la función es equilibrada o constante, es necesario interpretar la medición del estado |ψ3. Si el resultado de la medición es el estado determinista |0n1 entonces sabemos que se trata de una función constante, en cualquier otro caso la función es equilibrada.

4.1. El operador Uf

Como se aprecia en la Ec. (8), toda la información de la función a evaluar f se incluye en el quregistro |ψ2 al aplicar el operador Uf . En esta sección veremos la manera de expresar a Uf en forma matricial, con el propósito de tener una representación que se pueda utilizar en la simulación.

Retomemos brevemente el comportamiento del algoritmo. Notemos que el qubit de función debe ser |1, debido a que al aplicarle una compuerta de Hadamard a tal qubit aparece un signo negativo, como se aprecia en la Ec. (7). Este signo se distribuye hacia la mitad de los elementos del quregistro |ψ0 durante la primera transformación. Este signo negativo es el que dispersa hacia los estados |x de la Ec.(8) al aplicarle el operador U f al estado |ψ1 y que en la operación de medición ayuda a determinar si la función f(x) es constante o equilibrada.

Cuando el operador Uf se aplica al estado

|xH|1=|x12|0-|1,

se tiene

Uf|xH|1=Uf|x12|0-|1=12|x0-|x1sif(x)=0|x1-|x0sif(x)=1=(-1)f(x)|xH|1.

Y podemos ver que el signo negativo, para cada estado |x, depende del valor de f(x).

Para expresar matricialmente el operador Uf , es necesario definirlo en términos de submatrices Uf(x) . Podemos escribir a la matriz Uf(x) de tamaño 2 × 2 como:

Uf(x)=1f(x)f(x)f(x)1f(x). (10)

La forma general al operador Uf como una matriz 2n+1 × 2n+1 es definida como

Uf=Uf(0)000Uf(1)000Uf(2n-1). (11)

Entonces otra forma de escribir la Ec. (8) es: Uf (2n - 1)

|ψ3=Uf(0)000Uf(1)000Uf(2n-1)Hn|0nH|1. (12)

Para el caso de n = 2, la matriz Uf se escribe como

Uf=1f00f00000000f001f00000000001f01f01000000f011f01000000001f10f10000000f101f10000000001f11f11000000f111f11, (13)

donde

f00=f(0,0) (14)

f01=f(0,1) (15)

f10=f(1,0) (16)

f11=f(1,1). (17)

Se puede ver en las matrices (11) y (13) que si la función f es constante, entonces se tiene a la matriz unitaria 2n+1 × 2n+1 o a una matriz con submatrices Uf(x) antidiagonales en su diagonal principal. Por lo que al aplicar esta matriz a |ψ1 se obtendrá a ±|ψ1, y al aplicar la compuerta de Hadamard, del último paso del algoritmo de Deutsch y Jozsa se tiene ±|0n|1. Entonces al realizar la medición sobre los primeros n-qbuits obtenemos que la amplitud del estado |0n es uno.

Si la función es equilibrada, entonces Uf se expresa como una combinación de matrices Uf(x) diagonales y antidiagonales. De esta forma, el estado resultante |ψ3=|zH|1 contiene al elemento |z, el cual es cualquier estado distinto de |0n. Así, la medición final dará como resultado que la amplitud de |0n es 0.

4.2. Método experimental

Como plataforma experimental utilizamos GAMA, el cual es un lenguaje de programación para simular la ejecución de algoritmos cuánticos en una computadora clásica 12. Este lenguaje es de tipo imperativo, estructurado y de propósito específico. GAMA cuenta con un módulo de depuración que permite llevar la secuencia de los diferentes cambios de los estados de las variables en las diferentes entidades de un algoritmo cuántico, incluyendo qubits, quregisters, qugates, asi como las operaciones entre ellas: mediciones, producto interior (·) y productor exterior ( ).

5. Resultados y discusión

5.1. Pseudocódigo

Ahora explicaremos el pseudocódigo del algoritmo cuando n = 2 con el fin de ilustrarlo, implementarlo y probarlo en nuestro simulador de algoritmos cuánticos. El estado inicial |ψ0 se expresa como: |ψ0=|00|1 y el estado final |ψ3 se obtiene, como hemos mencionado, después de la aplicación de una serie de transformaciones de la compuerta de Hadamard y U f a dicho estado inicial como |ψ3=H3UfH3|ψ0 donde H3=HHH y Uf está definido como en la Ec.(13).

El algoritmo 1 muestra el pseudocódigo de los pasos necesarios para resolver este ejemplo. Primero, se lleva a cabo la inicialización del operador Uf con la función Initialize() descrita en el algoritmo 2. Como hemos mencionado el operador Uf está conformado de evaluaciones de la función f(x1, x2). Para demostrar el funcionamiento del algoritmo, seleccionamos una de las funciones presentadas anteriormente en el Cuadro 3. En este caso, la función equilibrada f3 del Cuadro 3 fue implementada y su pseudocódigo se muestra en el algoritmo 3. Los siguientes pasos corresponden a las transformaciones hechas al estado inicial 𝜓0. La primera equivale a aplicarle la compuerta H3. La segunda consiste en la aplicación del operador Uf y finalmente la tercera en aplicarle la compuerta H3 nuevamente.

Algoritmo 1. Algoritmo cuántico de Deutsch y Jozsa para la función f(x 1, x 2). 

(aquí, z%2 denota “z módulo 2”, es decir el residuo de z al ser dividido entre 2.)

Algoritmo 2. Función Initialize()

Algoritmo 3. Función f(x 1; x 2). 

Finalmente, el estado 𝜓 es el estado resultante, al cual se le realizará una toma de medición, haciéndolo por cualquier qubit que corresponda al quregistro de control, que en este caso tomamos el qubit 0 para medirlo.

5.2. Simulación en GAMA

Presentamos el código GAMA para llevar a cabo la simulación del algoritmo. Por ahora, estamos interesados únicamente en obtener el resultado de la simulación y no en el de estados intermedios durante una depuración. De tal manera que el estado resultante de cada una de las variables involucradas se puede observar en la pestaña inferior Configurations, en donde el quregistro psi contiene la información de si acaso la función se trata de una constante o bien de una equilibrada. En la Sec. 5.3 veremos la interpretación al resultado del algoritmo dado un tal quregistro.

5.3. Resultados

Como resultado de la simulación anterior, para el caso n=2 y la función equilibrada f3 del Cuadro 3, obtuvimos que la medición del quregistro 𝜓3 generó el quregistro 𝜓 = (1.0 + 0.0i)|111>. Considerando que el valor del quregistro 𝜓0 de entrada es |001, diremos por un lado que si el quregistro resultante arroja el mismo valor del quregistro inicial se trata de una función constante y por otro lado, si se trata de cualquier otro estado sabemos que es una función equilibrada. Bajo esta premisa observamos que el quregistro ψ=|111 indica que la función f(x1, x2) es equilibrada.

En este trabajo hemos realizado la simulación del algoritmo cuántico de Deutsch y Jozsa en el lenguaje GAMA. Para ello, hemos establecido un mecanismo para construir la compuerta cuántica Uf en forma matricial, que ayuda a obtener la simulación de su comportamiento. Se puede apreciar que el qubit de función |1 de entrada se utiliza para inducción la secuencia de signos negativos, necesarios para que el algoritmo funcione, y para que el registro de control alcance la dimensión apropiada para operarse con la compuerta cuántica Uf . Por otro lado, y tal vez más delicado, es el hecho de que la compuerta Uf debe inicializarse para cada una de las funciones que el algoritmo de Deutsch y Jozsa tenga de entrada, y si la inicialización no es tomada en cuenta en la complejidad el algoritmo cuántico resulta ser más eficiente que el clásico. Sin embargo, si este mecanismo de inicialización se toma como parte de la ejecución del algoritmo, la complejidad podría ser igual o mayor a la del algortimo clásico ya que GAMA lleva a cabo una simulación de cómputo cuántico dentro de una computadora clásica.

Además, también implementamos el algoritmo de Deutsch y Jozsa para los siguientes valores n = 3, 4, 5. El objetivo de este experimento es conocer su comportamiento y sus implicaciones. Al incrementar el número de qubits, la dimensión de la compuerta Uf aumenta de acuerdo a los detalles mostrados en el Cuadro 5.3. En general, la dimensión de la compuerta Uf para resolver un problema de n qubits es 2n-1 × 2n-1 . Para cualquier tamaño de quregistro, el algoritmo de Deutsch y Jozsa aplica una vez la compuerta Hadamard al registro inicial, una vez la compuerta Uf y finalmente una compuerta Hadamard. Aplicar una compuerta cuántica a un quregistro equivale a la multiplicación de una matriz por un vector. Lo que implica que la complejidad del algoritmo en una computadora clásica es 3 veces O(m2), donde m es la dimensión de la matriz y del vector. En el algoritmo cuántico, la dimensión de las compuertas es de m = 2n-1 , y su complejidad después de simularlo en una computadora clásica es de O((2n-1 )2). Esto ocasiona que la inicialización de la compuerta cuántica Uf consuma mayor tiempo debido a que el número de funciones a evaluar crece también. Sin embargo, no solo el tiempo de procesamiento tiene un impacto sino también la capacidad de almacenamiento de la máquina puede llegar a ser crucial si se trata de una simulación con un número de qubits muy alto.

Table II. Tamaño de las compuertas cuánticas en el algoritmo de Deutsch y Jozsa. 

La Fig. 3 muestra la gráfica de tiempos de las corridas del algoritmo de Deustch-Jozsa, utilizando una computadora de 32-bits para funciones de dos a cinco qubits de entrada, de lo que podemos apreciar un crecimiento exponencial. Como mencionamos anteriormente esto se debe al tiempo que consume la inicialización de la compuerta Uf . Una de las limitantes del simulador es que el número máximo de qubits que se pueden utilizar en un algoritmo está limitado al número de matrices que se puedan crear dentro del tamaño de la memoria de la computadora.

Figura 3. Gráfica de tiempos del algoritmo Deutsch y Jozsa con respecto al número de qubits. 

6. Conclusiones

En este trabajo hemos realizado la simulación del algoritmo cuántico de Deutsch y Jozsa en el lenguaje GAMA con el fin de explorar sus diferentes componentes. Para ello, hemos establecido un mecanismo para construir la compuerta cuántica Uf en forma matricial, que ayuda a obtener la simulación de su comportamiento. Se puede apreciar que el qubit de función |1 se utiliza para inducción de la secuencia de signos negativos, necesarios para que el algoritmo funcione, y para que el registro de control alcance la dimensión apropiada para operarse con la compuerta cuántica Uf . Por otro lado, la compuerta Uf debe inicializarse para cada una de las funciones que el algoritmo de Deutsch y Jozsa tenga de entrada, y si la inicialización no es tomada en cuenta en la complejidad el algoritmo cuántico resulta ser más eficiente que el clásico. Sin embargo, si este mecanismo de inicialización se toma como parte de la ejecución del algoritmo, la complejidad podría ser igual o mayor a la del algortimo clásico.

Agradecimientos

Los autores agradecen al apoyo financiero proporcionado por el Consejo Nacional de Ciencia y Tecnología (CONACyT), así como también a ABACUS, laboratorio de Matemáticas Aplicadas y Supercómputo de alto rendimiento. Evidentemente, nuestra institución de adscripción, el Centro de Investigación y de Estudios Avanzados del Instituto Politécnico Nacional, es de especial reconocimiento.

Referencias

1. R. Feynman, R. Leighton, M. Sands, and E. Hafner, The Feynman Lectures on Physics; Vol. I (AAPT, 1965). [ Links ]

2. A. Montanaro, Quantum algorithms: an overview, (2015). arXiv preprint arXiv:1511.04206. [ Links ]

3. D. Deutsch and R. Jozsa, Proc Roy Soc Lond A 439 (1992) 553-558. [ Links ]

4. P. Bianucci, A. Muller, C. Shih, Q. Wang, Q. Xue, and C. Piermarocchi, Physical Review B 69 (2004) 161303. [ Links ]

5. I. L. Chuang, L. M. Vandersypen, X. Zhou, D. W. Leung, and S. Lloyd, Experimental realization of a quantum algorithm, (1998) arXiv preprint quant-ph/9801037. [ Links ]

6. D. Collins, K. W. Kim, and W. C. Holton, Phys. Rev. A 58 (1998) R1633-R1636. [ Links ]

7. N. Linden, H. Barjat, and R. Freeman, Chemical Physics Letters, 296 (1998) 61-67. [ Links ]

8. M. Scholz, T. Aichele, S. Ramelow, and O. Benson, Physical review letters, 96 (2006) 180501. [ Links ]

9. J. Zhao, X. Tan, D. Lan, H. Wu, G. Xue, H. Yu, and Y. Yu, physica status solidi (b), 254 (2017). [ Links ]

10. A. Maitra, S. Maitra, and A. K. Pal, Data Analytics in Quantum Paradigm: An Introduction, (Springer International Publishing, Cham, 2017). pp. 313-330. [ Links ]

11. M. Batty, A. Casaccino, A. J. Duncan, S. Rees, and S. Severini, An Application of the Deutsch-Jozsa Algorithm to Formal Languages and the Word Problem in Groups. In Y. Kawano and M. Mosca, editors, Theory of Quantum Computation, Communication, and Cryptography, (Springer Berlin Heidelberg, 2008). pp. 57-69. [ Links ]

12. M. Paredes, Simulación de Cómputo Cuántico, tesis de maestría. (Departamento de Computación, Cinvestav , 2007). [ Links ]

13. S. J. Lomonaco, A Rosetta Stone for Quantum Mechanics with an Introduction to Quantum Computation, (Proceedings in Symposia in Applied Mathematics, 2000). [ Links ]

14. W. K. Wootters and W. H. Zurek, Nature, 299 (1982) 802-803. [ Links ]

15. D. Bouwmeester, A. K. Ekert, and A. Zeilinger, The Physics of Quantum Information: Quantum Cryptography, Quantum Teleportation, Quantum Computation. (Springer Publishing Company, Incorporated, 1st edition, 2010). [ Links ]

16. M. A. Nielsen and I. L. Chuang, Quantum Computation and Quantum Information: 10th Anniversary Edition. Cambridge University Press, New York, NY, USA, 10th edition, (2011). [ Links ]

17. B. Thaller, Visual Quantum Mechanics: Selected Topics with Computer Generated Animations of Quantum Mechanical Phenomena with Cdrom, Springer-Verlag New York, Inc., Secaucus, NJ, USA, 1st edition, (2000). Rev. Mex. [ Links ]

Recibido: 13 de Septiembre de 2017; Aprobado: 01 de Marzo de 2018

Creative Commons License Este es un artículo publicado en acceso abierto bajo una licencia Creative Commons