Path: blob/main/translations/es/ch-algorithms/bernstein-vazirani.ipynb
3855 views
Algoritmo Bernstein-Vazirani
En esta sección, primero presentamos el problema de Bernstein-Vazirani, su solución clásica y el algoritmo cuántico para resolverlo. Luego, implementamos el algoritmo cuántico usando Qiskit y lo ejecutamos tanto en un simulador como en un dispositivo.
1. El Algoritmo de Bernstein-Vazirani
El algoritmo de Bernstein-Vazirani, presentado por primera vez en la Referencia [1], puede verse como una extensión del algoritmo de Deutsch-Jozsa que cubrimos en la última sección. Se mostró que puede haber ventajas en el uso de una computadora cuántica como herramienta computacional para problemas más complejos que el problema de Deutsch-Jozsa.
1.1 El Problema de Bernstein-Vazirani
Nuevamente se nos da una función de caja negra , que toma como entrada una cadena de bits () y devuelve o , es decir:
En lugar de que la función sea balanceada o constante como en el problema de Deutsch-Jozsa, ahora se garantiza que la función devolverá el producto bit a bit de la entrada con alguna cadena, . En otras palabras, dada una entrada , . Estamos esperando encontrar . Como circuito reversible clásico, el oráculo de Bernstein-Vazirani se ve así:

1.2 La Solución Clásica
Clásicamente, el oráculo devuelve: dada una entrada . Por lo tanto, la cadena de bits oculta puede revelarse consultando el oráculo con la secuencia de entradas:
Entrada(x) :-: 100...0 010...0 001...0 000...1
Donde cada consulta revela un bit diferente de (el bit ). Por ejemplo, con x = 1000...0 uno puede obtener el bit menos significativo de , con x = 0100...0 podemos encontrar el siguiente bit menos significativo, y así sucesivamente. Esto significa que necesitaríamos mandar llamar a la función , veces.
1.3 La Solución Cuántica
Usando una computadora cuántica, podemos resolver este problema con 100% de confianza después de una sola llamada a la función . El algoritmo cuántico de Bernstein-Vazirani para encontrar la cadena de bits oculta es muy simple:
Inicializar los qubits de entrada en el estado y el qubit de salida en .
Aplicar compuertas Hadamard al registro de entrada
Consultar el oráculo
Aplicar compuertas Hadamard al registro de entrada
Medir

Para explicar el algoritmo, veamos más de cerca lo que sucede cuando aplicamos una compuerta H a cada qubit. Si tenemos un estado de qubits, , y aplicamos las compuertas H, veremos la transformación:
Recordamos que Hadamard realiza las siguientes transformaciones en un qubit:
Usando la notación de suma, podríamos reescribirlo así:
Para dos qubits, aplicar un Hadamard a cada uno realiza las siguientes transformaciones:
Podemos expresar esto usando la siguiente suma:
Es de esperar que ahora veas cómo llegamos a la ecuación anterior.
En particular, cuando empezamos con un registro cuántico y le aplicamos compuertas Hadamard, tenemos la superposición cuántica familiar:
En este caso, el término de fase desaparece, ya que , y por lo tanto .
El oráculo clásico devuelve para cualquier entrada tal que , y de lo contrario devuelve . Si usamos el mismo truco de retroceso de fase del algoritmo Deutsch-Jozsa y actuamos sobre un qubit en el estado , obtenemos la siguiente transformación:
El algoritmo para revelar la cadena de bits oculta sigue naturalmente consultando el oráculo cuántico con la superposición cuántica obtenida de la transformación de Hadamard de . A saber,
Debido a que el inverso de las compuertas Hadamard es nuevamente las compuertas Hadamard , podemos obtener con
2. Ejemplo
Veamos un ejemplo específico para qubits y una cadena secreta . Ten en cuenta que estamos siguiendo la formulación en la Referencia [2] que genera un circuito para el oráculo cuántico de Bernstein-Vazirani usando solo un registro.
- El registro de dos qubits se inicializa en cero:
Utiliza el widget bv_widget a continuación. Presiona los botones para aplicar los diferentes pasos e intenta seguir el algoritmo. Puedes cambiar la cantidad de qubits de entrada y el valor de la cadena secreta a través de los dos primeros argumentos posicionales.
Primero establecemos la cantidad de qubits utilizados en el experimento y la cadena de bits ocultos que debe encontrar el algoritmo. La cadena de bits ocultos determina el circuito para el oráculo cuántico.
Luego usamos Qiskit para programar el algoritmo de Bernstein-Vazirani.
Podemos ver que el resultado de la medición es la cadena oculta 011.
Como podemos ver, la mayoría de los resultados son 011. Los otros resultados se deben a errores en el cálculo cuántico.
La implementación anterior de Bernstein-Vazirani es para una cadena de bits secreta . Modifica la implementación para una cadena secreta . ¿Los resultados son los que esperas? Explica.
La implementación anterior de Bernstein-Vazirani es para una cadena de bits secreta . Modifica la implementación para una cadena secreta . ¿Los resultados son los que esperas? Explica.
5. Referencias
Ethan Bernstein and Umesh Vazirani (1997) "Quantum Complexity Theory" SIAM Journal on Computing, Vol. 26, No. 5: 1411-1473, doi:10.1137/S0097539796300921.
Jiangfeng Du, Mingjun Shi, Jihui Wu, Xianyi Zhou, Yangmei Fan, BangJiao Ye, Rongdian Han (2001) "Implementation of a quantum algorithm to solve the Bernstein-Vazirani parity problem without entanglement on an ensemble quantum computer", Phys. Rev. A 64, 042306, 10.1103/PhysRevA.64.042306, arXiv:quant-ph/0012114.