Saltearse al contenido

Algoritmo de Deutsch-Jozsa

El algoritmo de Deutsch-Jozsa es uno de los algoritmos más conocidos en la rama cuántica. Es uno de los primeros algoritmos cuánticos que surgieron, y baja notablemente la cota temporal respecto de la mejor alternativa clásica conocida. Este mismo motivó a la creación de los algoritmos más famosos como el de Shor o el de Grover, entre muchos más.

El algoritmo permite determinar si una función \(f\) es constante o balanceada. Una función es constante cuando \(f\) ante cualquier entrada retorna siempre la misma salida, es decir siempre retorna \(0\) o siempre retorna \(1\). Por otra parte la función es balanceada cuando retorna mitad de veces una salida y mitad de veces otra, es decir retorna \(n/2\) veces \(0\) y \(1\) respectivamente.

El algoritmo clásico, implica recorrer, en el peor de los casos, al menos mitad de las salidas posibles (2n1+12^{n-1}+1). El algoritmo cuántico realiza esta operación en una sola pasada.

Se plantea en un principio una versión reducida del problema, llamado problema de Deutsch, donde la función que se evalúa es binaria:

f:{0,1}{0,1}f: \{0,1\} \rightarrow \{0,1\}

Esto permite simplificar el algoritmo en su unidad más básica, permitiendo que se comprenda el problema que el algoritmo resuelve. Posteriormente se explicará la versión completa del algoritmo de Deutsch-Jozsa para una función de mayor complejidad.

El siguiente circuito resuelve el problema de Deutsch para una función binaria:

Algoritmo Deutsch en un circuito con separadores ante la aplicación de cada puerta.

Figura (1): Algoritmo de Deutsch en un circuito con separadores ante la aplicación de cada puerta.

En este circuito cuántico se utilizan las puertas Pauli X, Hadamard y un oráculo \(U_f\) que es un oráculo de fase. Notar que el oráculo de fase se encuentra asociado a \(f\), que es la función que se quiere determinar si es constante o balanceada.

A continuación se analiza paso a paso el estado de los cubits según los separadores provistos en el grafico, donde \(\psi_i\) es el estado en el paso \(i\), empezando con \(i=0\) y finalizando con \(i=4\):

ψ0=00ψ1=10ψ2=+ψ3=12((1)f(0)0+(1)f(1)1)ψ4={H+=0si f(0)=f(1)H=1si f(0)f(1)\begin{align} \psi_0=&\ket{00}\\ \psi_1=&\ket{10}\\ \psi_2=&\ket{-+}\\ \psi_3=&\frac{1}{\sqrt{2}}((-1)^{f(0)}\ket{0}+(-1)^{f(1)}\ket{1})\\ \psi_4=& \begin{cases} H\ket{+}=\ket{0} & \text{si \(f(0)=f(1)\)}\\ H\ket{-}=\ket{1} & \text{si \(f(0) \neq f(1)\)} \end{cases} \end{align}

La idea básica del algoritmo es poder reemplazar UfU_f con un circuito. Si este circuito representa una función constante, la salida del primer cubit será 0\ket{0}. En caso de que el circuito represente una función balanceada, retornará 1\ket{1}.

En estos ejemplos se definirán circuitos que representan tanto funciones constantes como balanceadas. Estos circuitos reemplazarán el oráculo definido previamente que abstraía la función a analizar.

Un circuito que no posee puertas cuánticas permite representar una función constante ff, cuya definición se corresponde con f(x)=0f(x)=0 para cualquier valor recibido como entrada (en este caso, 00 o 11).

Circuito con dos cubits, siendo el primero la entrada de la función y el segundo su correspondiente salida. Denota una función constante donde f(x)=0.

Figura (2): Circuito con dos cubits, siendo el primero la entrada de la función y el segundo su correspondiente salida. Denota una función constante donde f(x)=0f(x)=0.

Notar que si x=0x=0 (primer cubit en el circuito de la izquierda), el resultado de la función f(x)f(x) (segundo cubit) es 00, y de la misma manera si x=1x=1 (circuito de la derecha) la salida de f(x)f(x) sigue siendo 00, es decir que f(0)=f(1)=0f(0)=f(1)=0.

Si se introduce esta función/circuito dentro del algoritmo de Deutsch, la salida debe ser 0\ket{0}. Gráficamente se observaría de la siguiente manera:

Algoritmo Deutsch en un gráfico con separadores ante la aplicación de cada puerta, utilizando la función constante en vez del oráculo.

Figura (3): Algoritmo Deutsch en un gráfico con separadores ante la aplicación de cada puerta, utilizando la función constante en vez del oráculo.

Desarrollando paso a paso el estado de los cubits según los separadores provistos:

ψ0=00ψ1=10ψ2=+ψ3=0=0\begin{align} \psi_0=&\ket{00}\\ \psi_1=&\ket{10}\\ \psi_2=&\ket{-+}\\ \psi_3=&\ket{-0}\\ =&\ket{0}\\ \end{align}

Se elimina el \ket{-} ya que no es utilizado en la medición. Con este resultado se llega rápidamente a que, utilizando una función constante, se deriva correctamente al resultado 0\ket{0}.

\(\psi_0\)

El estado inicial del algoritmo 00\ket{00}

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_1\)

Aplicación de XX sobre el cubit del oráculo.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_2\)

Aplicación de puertas Hadamard sobre ambos cubits. Recordar que en este ejemplo el oráculo para f(x)=0f(x)=0 es un circuito sin puertas cuánticas.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_3\)

Se aplica Hadamard sobre el cubit menos significativo para obtener la respuesta final.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$

Ignorando el estado del cubit del oráculo (el cubit más significativo), la probabilidad de obtener 0\ket{0} es del 100%100\%.

La función descrita previamente es constante y retorna 0 ante cualquier entrada. Otro ejemplo de función constante es aquella que siempre retorna 1 como salida, la cual puede implementarse aplicando una puerta Pauli-X a la salida.

Puede implementarse un circuito que represente una función balanceada mediante la aplicación de una puerta CNOTCNOT.

Circuito con dos cubits, siendo el primero la entrada de la función y el segundo su correspondiente salida. Denota una función balanceada

Figura (4): Circuito con dos cubits, siendo el primero la entrada de la función y el segundo su correspondiente salida. Denota una función balanceada.

Notar que si x=0x=0 (primer cubit en el circuito de la izquierda), el resultado de la función f(x)f(x) (segundo cubit) es 00, y si x=1x=1 (circuito de la derecha) la salida de f(x)f(x) es 11, es decir que f(0)f(1)f(0)\neq f(1).

Si se introduce esta función/circuito dentro del algoritmo de Deutsch, la salida, a diferencia del previo, debe ser 1\ket{1}. Gráficamente se observaria de la siguiente manera:

Algoritmo Deutsch en un gráfico con separadores ante la aplicación de cada puerta, utilizando la función balanceada en vez del oráculo.

Figura (5): Algoritmo Deutsch en un gráfico con separadores ante la aplicación de cada puerta, utilizando la función balanceada en vez del oráculo.

Desarrollando paso a paso los estados de los cubits en cada separador se obtiene:

ψ0=00ψ1=10ψ2=+ψ3=CNOT+=ψ4=1=1\begin{align} \psi_0=&\ket{00}\\ \psi_1=&\ket{10}\\ \psi_2=&\ket{-+}\\ \psi_3=&CNOT\ket{-+}\\ =&\ket{--}\\ \psi_4=&\ket{-1}\\ =&\ket{1} \end{align}

Una derivación del paso ψ3\psi_3 se puede encontrar en el artículo CNOT. Nuevamente se omite el cubit en estado \ket{-} porque no se utiliza en la medición.

Esto determina que, para una función balanceada, se deriva al resultado correcto. La medición resulta en 1\ket{1}.

\(\psi_0\)

El estado inicial del algoritmo 00\ket{00}

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_1\)

Aplicación de XX sobre el cubit del oráculo.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_2\)

Aplicación de puertas Hadamard sobre ambos cubits. Recordar que en este ejemplo el oráculo para función balanceada es un circuito con la puerta CNOTCNOT, con el cubit menos significativo como control y el más significativo como objetivo.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_3\)

Retroceso de fase mediante la aplicación del oráculo.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$
\(\psi_4\)

Se aplica Hadamard sobre el cubit menos significativo para obtener la respuesta final.

$$\ket{00}$$
$$\ket{01}$$
$$\ket{10}$$
$$\ket{11}$$

Ignorando el estado del cubit del oráculo (el cubit más significativo), la probabilidad de obtener 1\ket{1} es del 100%100\%.

La función descrita previamente es balanceada, retornando el mismo valor que la entrada (función identidad). Otro ejemplo de función balanceada es aquella que siempre retorna el opuesto de la entrada como salida (función de opuesto). Esta puede implementarse, por ejemplo, aplicando una puerta Pauli-X a la salida luego de haber aplicado CNOTCNOT.

El problema que resuelve el algoritmo de Deutsch-Jozsa es la generalización del algoritmo previo para funciones con nn entradas de tamaño nn.

f:{0,1}n{0,1}f: \{0,1\}^n \rightarrow \{0,1\}

El algoritmo de Deutsch-Jozsa se describe de forma genérica con el siguiente circuito:

Algoritmo Deutsch-Jozsa en un circuito con separadores ante la aplicación de cada puerta.

Figura (6): Algoritmo Deutsch-Jozsa en un circuito con separadores ante la aplicación de cada puerta.

Este mantiene una estructura similar al algoritmo de Deutsch planteado en la figura 1, pero con algunos cambios:

  • Se reemplaza el cubit más significativo de 0\ket{0} a \ket{-}. Esto es equivalente a aplicar una puerta Pauli-X y Hadamard, pero se evitó para mejorar la legibilidad.

  • Se generaliza el cubit de entrada a nn cubits que representan los valores de entrada. Esto está representado por el símbolo / n^n previo a ψ0\psi_0.

  • Se aplican las puertas Hadamard a los nn cubits de entrada, y el oráculo es aplicado a los nn cubits de entrada y al cubit que de salida de la función.

A continuación se analiza paso a paso el estado de los cubits según los separadores provistos en el gráfico, donde \(\psi_i\) es el estado en el paso \(i\), empezando con \(i=0\) y finalizando con \(i=3\):

ψ0=0nψ1=Hn0n=12nx{0,1}nxψ2=Uf12nx{0,1}nx=12nx{0,1}n(1)f(x)xψ3=Hn12nx{0,1}n(1)f(x)x=z{0,1}n(12nx{0,1}n(1)f(x)+xz)z\begin{align} \psi_0=&\ket{-}\ket{0}^{\otimes n}\\ \psi_1=&\ket{-}H^{\otimes n}\ket{0}^{\otimes n}\\ =&\ket{-}\frac{1}{\sqrt{2^n}}\sum_{x\in\{0,1\}^n} \ket{x}\\ \psi_2=&U_f\ket{-}\frac{1}{\sqrt{2^n}}\sum_{x\in\{0,1\}^n} \ket{x}\\ =&\frac{1}{\sqrt{2^n}}\sum_{x\in\{0,1\}^n} (-1)^{f(x)}\ket{x}\\ \psi_3=&H^{\otimes n}\frac{1}{\sqrt{2^n}}\sum_{x\in\{0,1\}^n} (-1)^{f(x)}\ket{x}\\ =&\sum_{z\in\{0,1\}^n} \left(\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{f(x)+x\cdot z}\right) \ket{z}\\ \end{align}

Finalmente si se mide la amplitud del estado ψ3\psi_3 donde z\ket{z} es 0n\ket{0}^{\otimes{n}}

12nx{0,1}n(1)f(x)+x0002=12nx{0,1}n(1)f(x)2\begin{gather} \left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{f(x)+x\cdot 00\ldots 0}\right|^2=\left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{f(x)}\right|^2\\ \end{gather}

Estas amplitudes convergen en diferentes resultados según si ff es constante o balanceada. Por un lado, si es constante:

12nx{0,1}n(1)f(x)2=1\begin{align} \left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{f(x)}\right|^2=1 \end{align}

Por otro lado, si es balanceada:

12nx{0,1}n(1)f(x)2=0\begin{align} \left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{f(x)}\right|^2=0 \end{align}

Ahora, a diferencia del algoritmo previo, se puede reemplazar UfU_f con un circuito que represente una función constante o una función balanceada con nn entradas. En caso de ser del primer tipo la probabilidad de medir 0n\ket{0}^{\otimes n} es 11, y en caso de ser del segundo tipo la probabilidad de medir 0n\ket{0}^{\otimes n} es 00.

Sea ff una función con 3 entradas y una salida, se debe codificar este oráculo en el circuito del algoritmo de Deutsch-Jozsa.

\(\psi_0\)

Estado inicial del algoritmo 000\ket{-000}

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\psi_1\)

Aplicación de puertas Hadamard sobre los tres cubits menos significativos. Recordar que en este ejemplo el oráculo para f(x)=0f(x)=0 es un circuito sin puertas cuánticas.

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\psi_2\)

Aplicación del oráculo. Recordar que en este ejemplo el oráculo para f(x)=0f(x)=0 es un circuito sin puertas cuánticas, por lo que no hay cambios en el estado.

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$
\(\psi_3\)

Se aplica Hadamard sobre los cubits que no son del oráculo (todos excepto el más significativo). Así se obtiene la respuesta final.

$$\ket{0000}$$
$$\ket{0001}$$
$$\ket{0010}$$
$$\ket{0011}$$
$$\ket{0100}$$
$$\ket{0101}$$
$$\ket{0110}$$
$$\ket{0111}$$
$$\ket{1000}$$
$$\ket{1001}$$
$$\ket{1010}$$
$$\ket{1011}$$
$$\ket{1100}$$
$$\ket{1101}$$
$$\ket{1110}$$
$$\ket{1111}$$

Ignorando el estado del cubit del oráculo (el cubit más significativo), la probabilidad de obtener 000\ket{000} es del 100%100\%.

Bibliografía:
Recomendada
Alternativa
Opcional