Algoritmo de Deutsch


A través de este algoritmo podremos entender por qúe la computación cuántica puede ofrecer mejoras en el tiempo de ejecución de carácter exponencial frente a la computación clásica.

Su nombre se debe a David Deutsch, profesor de la Universidad de Oxford.

¿Y como vamos a conseguir eso objetivo?

Empecemos imaginando que tenemos una función básica, f , que tiene como dominio Dom f = \{0,1\} y de igual manera tiene como imagen Im f = \{0,1\} . Es esta una función muy básica: puede dar siempre el mismo valor, ya sea 0 ó 1, a cualquier valor de entrada, o por el contrario puede ofrecer una valor diferente segun sea el valor de x. Llamaremos constantes al primer tipo de función, y balanceadas al segundo.

El problema al que nos enfrentamos se reduce a averiguar, dada una función f, de que tipo es.

Si disponemos de un ordenador clásico: ¿cuantas llamadas a la función hemos de hacer?. Es clara la respuesta : 2 veces.

Duetsch nos mostró que con un ordenador, o circuito, cuántico basta con hacer una sola llamada.

Veámoslo….

Partimos con un circuito cuántico tal cual mostramos en la figura 1.

Figura 1: esquema del circuito cuántico necesario para el Algoritmo de Deutsch

Tenemos aquí un circuito con dos qubits , el primero de los cuales llamaremos qubit de entrada, inicializado a |0\rangle y qubit de referencia al segundo, inicializado a |1\rangle , y dos qubits de salida, siendo uno de ellos el que nos indica el resultado del algortimo. A los dos primeros se les aplica una puerta de Hadamard, que ya hemos estudiado en una entrada anterior y que básicamente aplica una superposición al qubit correspondiente. El circuito en sí, que denominamos U_{f} aplica al segundo quibit una suma exclusica, XOR, entre el qubit de control y el resultado de aplicar la función f al qubit de entrada.

Entremos en el detalle, calculando cada unos de los 4 estados que hemos llamado \psi_{0} ,\psi_{1}, \psi_{2}  \ y\ \psi_{3} .

El primero es inmediato, pues se refiere a los qubits inicializados. Luego \psi_{0} = |01\rangle. Recordemos que utilizamos la convención de indicar a la izquierda el qubit con la posición superior.

Tras aplicar la puerta Hadamard a los dos qubits nos encontramos con :

|\psi_{1}\rangle = H^{\otimes 2} |01\rangle = \left (\frac {|0\rangle + |1\rangle}{\sqrt{2}} \right ) \left (\frac {|0\rangle - |1\rangle}{\sqrt{2}} \right ) vemos como la puerta de Hadamard provoca el paralelismo, al convertir un quibit de valor 0 ó 1 en una superposición.

Pasamos a calcular \psi_{2}, para ello vamos a calcular de manera genérica U_{f} |x\rangle \left (\frac {|0\rangle - |1\rangle}{\sqrt{2}} \right ) , que equivale a dejar el primer termino tal cual y aplicar la suma exclusiva al segundo término U_{f} |x \rangle \left (\frac {|0\rangle - |1\rangle}{\sqrt{2}} \right ) = |x \rangle \left (\frac {|0\oplus{f(x)}\rangle - |1\oplus{f(x)}\rangle}{\sqrt{2}} \right ) y para continuar vamos a considerar dos escenarios separados :

si

  • si f(x)=0 \rightarrow |x\rangle \left (\frac {|0\oplus{f(x)}\rangle - |1\oplus{f(x)}\rangle}{\sqrt{2}} \right )  = |x\rangle \left (\frac {|0\rangle - |1\rangle}{\sqrt{2}} \right )
  • si f(x)=1 \rightarrow |x\rangle \left (\frac {|0\oplus{f(x)}\rangle - |1\oplus{f(x)}\rangle}{\sqrt{2}} \right ) = |x\rangle \left (\frac {|1\rangle - |0\rangle}{\sqrt{2}} \right )

Luego podemos simplificar agrupando los dos términos tal que (-1)^{f(x)} |x\rangle \left (\frac {|0\rangle - |1\rangle}{\sqrt{2}} \right )

Estos calculos previos nos permiten avanzar con el cálculo de \psi_{2} :

\psi_{2}= \frac {\left ((-1)^{f(0)}|0\rangle + (-1)^{f(1)}|1\rangle \right )}{\sqrt{2}} \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right ), que de igual manera que en el paso previo vamos a dividir en varios escenarios, tal que :

|\psi_{2} \rangle = \left\{ \begin{aligned} &  +\left ( \frac {\left (|0\rangle + |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right )  \quad si f(0)=f(1)=0 \\ &   - \left ( \frac {\left (|0\rangle + |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right )  \quad si f(0)=f(1)=1 \\ & + \left ( \frac {\left (|0\rangle - |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right ) \quad si f(0)=0 \ y \ f(1)=1 \\ & - \left (\frac {\left (|0\rangle - |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right ) \quad si f(0)=1 \ y \  f(1)=0 \end{aligned} \right.

que se puede simplificar tal que :

|\psi_{2} \rangle = \left\{ \begin{aligned} &  \pm \left ( \frac {\left (|0\rangle + |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right )  \quad si f(0)=f(1) \\ & \pm \left ( \frac {\left (|0\rangle - |1\rangle \right )}{\sqrt{2}} \right ) \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right ) \quad si f(0) \neq f(1) \end{aligned} \right.

Finalmente aplicamos la puerta de Hadamard de salida al primer qubit , y tendremos :

|\psi_{3} \rangle = \left\{ \begin{aligned} &  \pm |0\rangle \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right )  \quad si f(0)=f(1) \\ & \pm |1\rangle \left ( \frac { |0\rangle - |1\rangle }{\sqrt{2}} \right ) \quad si f(0) \neq f(1) \end{aligned} \right.

…que a su vez podemos simplificar :

\psi_{3} =  \pm | f(0) \oplus f(1) \rangle \left ( \frac {|0\rangle - |1\rangle}{\sqrt{2}} \right )

¿Y que nos indica esa expresión?: que podemos medir el primer qubit de ese estado cuántico resultante, si es cero sabremos que la función es constante, y balanceada si el valor es 1.

Con un solo ciclo de ejecución de llamada a la función, con el estado de dos qubits |01 \rangle, podremos averiguarde que tipo es, ofreciendo por tanto una gran ventaja en complejidad de computación sobre un ordenador de computación clásica que necesitará dos llamadas.

Este algoritmo se puede extender a funciones de manera Dom f = \{0,1\}^{n} que veremos en una siguiente entrada en el blog.

He preparado este trabajo leyendo el capítulo 1.4.3 del libro Quantum Computation and Quantum Informacion de Michael A. Nielsen & Isaac L. Chuang y el capítulo 7.2 del Introduction to Classical and Quantum Computing de Thomas G. Wong ,

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.