Algoritmo di Bernstein-Vazirani

Circuito quantistico dell'algoritmo

L'algoritmo di Bernstein–Vazirani, che risolve il problema di Bernstein–Vazirani è un algoritmo quantistico inventato da Ethan Bernstein e Umesh Vazirani nel 1992.[1] Si tratta di un caso particolare dell'algoritmo di Deutsch-Jozsa dove invece di distinguere due diverse classi di funzioni, cerca di conoscere una stringa codificata in una funzione.[2] L'algoritmo di Bernstein–Vazirani fu ideato per dimostrare una separazione degli oracoli tra le classi di complessità BQP e BPP.

Enunciato del problema

Dato un oracolo che implementa una funzione f : { 0 , 1 } n { 0 , 1 } {\displaystyle f\colon \{0,1\}^{n}\rightarrow \{0,1\}} in cui f ( x ) {\displaystyle f(x)} è il prodotto scalare modulo 2 tra x {\displaystyle x} e una stringa segreta s { 0 , 1 } n {\displaystyle s\in \{0,1\}^{n}} , 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}+x_{2}s_{2}+\cdots +x_{n}s_{n}} , trovare s {\displaystyle s} .

Algoritmo

Classicamente, il metodo più efficiente per trovare la stringa segreta è valutare la funzione n {\displaystyle n} volte con i valori di input x = 2 i {\displaystyle x=2^{i}} per ogni 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}}}

In contrasto alla soluzione classica che necessita di almeno n {\displaystyle n} chiamate alla funzione per trovare s {\displaystyle s} , usando la computazione quantistica, solo una chiamata è necessaria. L'algoritmo quantistico è il seguente:[2]

Si comincia dallo stato a n {\displaystyle n} qubit | 0 n {\displaystyle |0\rangle ^{\otimes n}} , su cui si applica la porta di Hadamard per ottenere

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

Dopo, si applica l'oracolo U f {\displaystyle U_{f}} che trasforma lo stato | x ( 1 ) f ( x ) | x {\displaystyle |x\rangle \to (-1)^{f(x)}|x\rangle } . Questo effetto si ottiene dalla trasformazione | b | x | b f ( x ) | x {\displaystyle |b\rangle |x\rangle \to |b\oplus f(x)\rangle |x\rangle } ( {\displaystyle \oplus } denota la somma mod 2.) dove lo stato su cui si copia la funzione è

| b = | 0 | 1 2 {\displaystyle |b\rangle ={\frac {|0\rangle -|1\rangle }{\sqrt {2}}}} .

Questo trasforma la sovrapposizione in

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 .}

Si applica un'altra trasformata di Hadamard a ogni qubit. Essa, per i qubit dove s i = 1 {\displaystyle s_{i}=1} , trasforma lo stato da | {\displaystyle |-\rangle } a | 1 {\displaystyle |1\rangle } e per i qubit dove s i = 0 {\displaystyle s_{i}=0} , trasforma lo stato da | + {\displaystyle |+\rangle } a | 0 {\displaystyle |0\rangle } . Per ottenere s {\displaystyle s} , viene fatta una misura nella base standard ( { | 0 , | 1 } {\displaystyle \{|0\rangle ,|1\rangle \}} ) sui qubit.

Graficamente, l'algoritmo può essere rappresentato dal seguente diagramma, dove H n {\displaystyle H^{\otimes n}} denota la porta di Hadamard su n {\displaystyle n} qubit:

| 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 }

Il motivo per cui l'ultimo stato è | s {\displaystyle |s\rangle } è perché, per una particolare y {\displaystyle y} ,

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  se  s y = 0 , 0  altrimenti . {\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{ se }}s\oplus y={\vec {0}},\,0{\text{ altrimenti}}.}

Siccome s y = 0 {\displaystyle s\oplus y={\vec {0}}} è vera solo per s = y {\displaystyle s=y} , ciò significa che l'unica ampiezza non nulla è su | s {\displaystyle |s\rangle } . Quindi, misurando l'output del circuito nella base standard, si ottiene con certezza la stringa segreta s {\displaystyle s} .

Note

  1. ^ Ethan Bernstein e Umesh Vazirani, Quantum Complexity Theory, in SIAM Journal on Computing, vol. 26, n. 5, 1997, pp. 1411–1473, DOI:10.1137/S0097539796300921.
  2. ^ a b c S D Fallek, C D Herold, B J McMahon, K M Maller, K R Brown, e J M Amini, Transport implementation of the Bernstein–Vazirani algorithm with ion qubits, in New Journal of Physics, vol. 18, 2016, DOI:10.1088/1367-2630/aab341.
  Portale Informatica
  Portale Quantistica