Algorithme de Bernstein-Vazirani

Page d’aide sur l’homonymie

Pour les articles homonymes, voir Bernstein et Vazirani.

L'algorithme de Bernstein–Vazirani, qui résout le problème de Bernstein–Vazirani est un algorithme quantique inventé par Ethan Bernstein et Umesh Vazirani en 1992[1].

C'est une version restreinte de l'algorithme de Deutsch-Jozsa dans laquelle, au lieu de distinguer deux classes de fonctions, on essaie de retrouver une chaîne secrète encodée dans une fonction[2]. Il a été conçu pour prouver la distinction entre les classes de complexité BQP et BPP[1].

Enoncé du problème

Soit un oracle qui implémente une fonction f : { 0 , 1 } n { 0 , 1 } {\displaystyle f\colon \{0,1\}^{n}\rightarrow \{0,1\}} dans laquelle f ( x ) {\displaystyle f(x)} est un produit scalaire entre x {\displaystyle x} et une chaîne secrète s { 0 , 1 } n {\displaystyle s\in \{0,1\}^{n}} modulo 2, f ( x ) = x s = x 1 s 1 x 2 s 2 x n s n {\displaystyle f(x)=x\cdot s=x_{1}s_{1}\oplus x_{2}s_{2}\oplus \cdots \oplus x_{n}s_{n}} . Quelle est la valeur de s {\displaystyle s}  ?

Algorithme

En informatique "classique", la méthode la plus efficace pour retrouver la chaîne secrète consiste à évaluer la fonction n {\displaystyle n} fois avec comme valeurs d'entrée x = 2 i {\displaystyle x=2^{i}} pour tout i { 0 , 1 , . . . , n 1 } {\displaystyle i\in \{0,1,...,n-1\}} [2] :

f ( 1000 0 n ) = s 1 f ( 0100 0 n ) = s 2 f ( 0010 0 n ) = s 3 f ( 0000 1 n ) = s n {\displaystyle {\begin{aligned}f(1000\cdots 0_{n})&=s_{1}\\f(0100\cdots 0_{n})&=s_{2}\\f(0010\cdots 0_{n})&=s_{3}\\&\,\,\,\vdots \\f(0000\cdots 1_{n})&=s_{n}\\\end{aligned}}}

Avec un calculateur quantique, une seule requête sera suffisante[2] :

Appliquer une transformée de Hadamard aux n {\displaystyle n} qubits | 0 n {\displaystyle |0\rangle ^{\otimes n}} pour obtenir :

1 2 n x = 0 2 n 1 | x . {\displaystyle {\frac {1}{\sqrt {2^{n}}}}\sum _{x=0}^{2^{n}-1}|x\rangle .}

Ensuite, appliquer l'oracle U f {\displaystyle U_{f}} qui transforme | x ( 1 ) f ( x ) | x {\displaystyle |x\rangle \to (-1)^{f(x)}|x\rangle } . Cela peut être simulé au moyen de l'oracle standard qui transforme | b | x | b f ( x ) | x {\displaystyle |b\rangle |x\rangle \to |b\oplus f(x)\rangle |x\rangle } en appliquant l'oracle à | 0 | 1 2 | x {\displaystyle {\frac {|0\rangle -|1\rangle }{\sqrt {2}}}|x\rangle } ( {\displaystyle \oplus } représente une addition modulo 2).

Cela transforme la superposition en :

1 2 n x = 0 2 n 1 ( 1 ) f ( x ) | x . {\displaystyle {\frac {1}{\sqrt {2^{n}}}}\sum _{x=0}^{2^{n}-1}(-1)^{f(x)}|x\rangle .}

Une nouvelle transformée de Hadamard est appliquée à chaque qubit, de telle sorte que :

  • pour les qubits où s i = 1 {\displaystyle s_{i}=1} , l'état est converti de | {\displaystyle |-\rangle } à | 1 {\displaystyle |1\rangle }
  • pour les qubits où s i = 0 {\displaystyle s_{i}=0} , l'état est converti de | + {\displaystyle |+\rangle } à | 0 {\displaystyle |0\rangle }

Pour obtenir s {\displaystyle s} , une mesure selon la base standard ( { | 0 , | 1 } {\displaystyle \{|0\rangle ,|1\rangle \}} ) est effectuée sur les qubits.

L'algorithme peut donc être représenté ainsi, où H n {\displaystyle H^{\otimes n}} représente la transformée de Hadamard sur n {\displaystyle n} qubits :

| 0 n H n 1 2 n x { 0 , 1 } n | x U f 1 2 n x { 0 , 1 } n ( 1 ) f ( x ) | x H n 1 2 n x , y { 0 , 1 } n ( 1 ) f ( x ) + x y | y = | s {\displaystyle |0\rangle ^{n}\xrightarrow {H^{\otimes n}} {\frac {1}{\sqrt {2^{n}}}}\sum _{x\in \{0,1\}^{n}}|x\rangle \xrightarrow {U_{f}} {\frac {1}{\sqrt {2^{n}}}}\sum _{x\in \{0,1\}^{n}}(-1)^{f(x)}|x\rangle \xrightarrow {H^{\otimes n}} {\frac {1}{2^{n}}}\sum _{x,y\in \{0,1\}^{n}}(-1)^{f(x)+x\cdot y}|y\rangle =|s\rangle }

La raison pour laquelle l'état final est | s {\displaystyle |s\rangle } est que, pour un y {\displaystyle y} donné :

1 2 n x { 0 , 1 } n ( 1 ) f ( x ) + x y = 1 2 n x { 0 , 1 } n ( 1 ) x s + x y = 1 2 n x { 0 , 1 } n ( 1 ) x ( s y ) = 1  si  s y = 0 , 0  sinon . {\displaystyle {\frac {1}{2^{n}}}\sum _{x\in \{0,1\}^{n}}(-1)^{f(x)+x\cdot y}={\frac {1}{2^{n}}}\sum _{x\in \{0,1\}^{n}}(-1)^{x\cdot s+x\cdot y}={\frac {1}{2^{n}}}\sum _{x\in \{0,1\}^{n}}(-1)^{x\cdot (s\oplus y)}=1{\text{ si }}s\oplus y={\vec {0}},\,0{\text{ sinon}}.}

Puisque s y = 0 {\displaystyle s\oplus y={\vec {0}}} est vrai seulement quand s = y {\displaystyle s=y} , cela signifie que la seule amplitude non nulle correspond à | s {\displaystyle |s\rangle } .

Références

(en) Cet article est partiellement ou en totalité issu de la page de Wikipédia en anglais intitulée « Bernstein–Vazirani algorithm » (voir la liste des auteurs).

  1. a et b Ethan Bernstein and Umesh Vazirani, « Quantum Complexity Theory », SIAM Journal on Computing, vol. 26, no 5,‎ , p. 1411–1473 (DOI 10.1137/S0097539796300921)
  2. a b et c S D Fallek, C D Herold, B J McMahon, K M Maller, K R Brown, and J M Amini, « Transport implementation of the Bernstein–Vazirani algorithm with ion qubits », New Journal of Physics, vol. 18,‎ (DOI 10.1088/1367-2630/aab341)
  • icône décorative Portail de l'informatique théorique