Saltearse al contenido

Algoritmo de Bernstein-Vazirani

El algoritmo de Bernstein-Vazirani es un algoritmo basado en el de Deutsch-Jozsa en el cual se resuelve un problema diferente, llamado problema de Bernstein-Vazirani ó Fourier sampling problem (problema de muestreo de Fourier). Dicho problema presenta una base de un problema más grande, presentado por los mismos autores, llamado recursive Fourier sampling problem (problema de muestreo de Fourier recursivo).

La entrada del problema es una función que se define de forma similar al algoritmo de Deutsch-Jozsa:

f:{0,1}n{0,1}\begin{gather} f: \{0,1\}^n \rightarrow \{0,1\} \end{gather}

Difiere en que en este problema la función tiene como precondición que existe una cadena binaria s=sn1s0s=s_{n-1}\ldots s_0 tal que f(x)=sxf(x)=s\cdot x para todo x{0,1}nx\in\{0,1\}^n.

Como salida se debe obtener la cadena ss.

Utiliza el circuito de Deutsch-Jozsa. Varía en su procesamiento desde la etapa ψ3\psi_3 donde se mide el resultado.

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

Figura (1): Circuito de Deutsch-Jozsa que resuelve el problema de Bernstein-Vazirani con separadores ante la aplicación de cada puerta.

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=&\ket{-}U_f\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}

Un desarrollo elaborado de los pasos se puede observar dentro de la explicación paso a paso del algoritmo de Deutsch-Jozsa. Hasta este punto no existen variaciones con el algoritmo previamente mencionado. Luego se reemplaza f(x)f(x) con la precondición dada:

ψ3=z{0,1}n(12nx{0,1}n(1)f(x)+xz)z=z{0,1}n(12nx{0,1}n(1)sx+xz)z=z{0,1}n(12nx{0,1}n(1)(sz)x)z\begin{align} \psi_3&=\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}\\ &=\sum_{z\in\{0,1\}^n} \left(\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{s\cdot x+x\cdot z}\right) \ket{z}\\ &=\sum_{z\in\{0,1\}^n} \left(\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{(s\oplus z)\cdot x}\right) \ket{z}\\ \end{align}

Ahora, se mide la amplitud del estado ψ3\psi_3, donde z\ket{z} es s\ket{s}:

12nx{0,1}n(1)(ss)x2=12nx{0,1}n(1)(0)x2=12nx{0,1}n(1)02=12nx{0,1}n12=12nx{0,1}n12=12n2n2=1\begin{align} \left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{(s\oplus s)\cdot x}\right|^2&=\left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{(0) \cdot x}\right|^2\\ &=\left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} (-1)^{0}\right|^2\\ &=\left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} 1\right|^2\\ &=\left|\frac{1}{2^n}\sum_{x\in\{0,1\}^n} 1\right|^2\\ &=\left|\frac{1}{2^n}2^n\right|^2\\ &=1\\ \end{align}

Así, el estado final del algoritmo (luego de la medición) es s\ket{s}, ya que el resto de estados tendrán amplitud 0.

Sea s=1010s=1010 la cadena a codificar, se modifica el oráculo con una función que codifica este valor oculto. Se utilizan puertas CNOT para codificar la cadena oculta.

\(\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.

$$\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. En este ejemplo, el oráculo está implementado con dos puertas CNOTCNOT. La primera tiene al cubit menos significativo como control y la segunda al tercer cubit menos significativo. En ambos casos, el cubit objetivo es el del oráculo (el más significativo).

$$\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 s=101\ket{s} = \ket{101} es del 100%100\%.

Bibliografía:
Recomendada
Alternativa
Opcional