Nella teoria della complessità computazionale e nella computazione quantistica, il problema di Simon è un problema computazionale che può essere risolto in maniera esponenzialmente più veloce su un computer quantistico rispetto a un computer classico (o tradizionale). Il problema di Simon incorpora l'uso di una scatola nera (black box). I problemi con la scatola nera danno agli algoritmi quantistici un vantaggio rispetto agli algoritmi classici.
Il problema in sé è di poco interesse pratico perché ci sono poche situazioni realistiche in cui ci sia bisogno di risolvere il problema di Simon. Tuttavia, il problema è comunque importante perché si può dimostrare che un algoritmo quantistico può risolvere questo problema in modo esponenzialmente più veloce rispetto a un qualsiasi algoritmo classico conosciuto. Questo è il primo esempio di problema computazionale che può essere risolto in un tempo polinomiale su un computer quantistico.
Il problema fu ideato da Daniel Simon nel 1994. Simon mostrò un algoritmo quantistico, spesso detto algoritmo di Simon, che risolve il problema richiedendo esponenzialmente meno tempo computazionale (o più precisamente, chiamate) rispetto al miglior algoritmo classico. Nell'algoritmo di Simon è necessario effettuare un numero lineare di chiamate, mentre l'algoritmo classico ne necessita un numero esponenziale. Questo problema dà una separazione dell'oracolo tra le classi di complessità BPP e BQP, a differenza della separazione data dall'algoritmo di Deutsch-Jozsa, che separa P e EQP. La separazione è esponenziale (relativa a un oracolo) tra la complessità classica e quantistica.
L'algoritmo di Simon fu inoltre l'ispirazione per l'algoritmo di Shor. Entrambi i problemi sono casi particolari del problema del sottogruppo nascosto abeliano, per il quale sono conosciuti algoritmi quantistici efficienti.
Per esempio, se , allora la funzione seguente è un esempio di una funzione che soddisfa la proprietà già menzionata:
000
101
001
010
010
000
011
110
100
000
101
110
110
101
111
010
In questo caso si ha la soluzione . Può essere facilmente verificato che ogni output di compare due volte, e che il prodotto XOR bitwise tra le due stringhe di input corrispondenti a un qualsiasi output è pari a .
Per esempio, le stringhe di input e sono entrambi mappati (da ) allo stesso output , ovvero e . Se si applica XOR a 010 e 100 si ottiene 110, ovvero La stringa può anche essere verificata usando stringhe di input 001 e 111 che sono entrambi mappati (da f) alla stessa stringa di input 010. Anche se si applica XOR a 001 e 111, si ottiene 110, ovvero . Questo dà la stessa soluzione risolta prima.
In questo esempio la funzione è di fatto due-a-uno dove .
Dato che , si può riscrivere il coefficiente come segue:
Intuitivamente, questo è un problema molto difficile da risolvere in modo "classico". L'intuizione dietro alla difficoltà è ragionevolmente semplice: se si vuole risolvere il problema classicamente, serve trovare due diversi input e per cui . Non c'è necessariamente una struttura nella funzione che potrebbero aiutare a trovare due input del genere: più nello specifico, è possibile scoprire qualcosa di (o cosa fa) solo quando, per due diversi input si ottiene lo stesso output. In ogni caso, bisognerebbe prendere diversi input prima che sia probabile trovare una coppia che viene mappata da allo stesso output, come per il paradosso del compleanno. Siccome, classicamente per trovare s con una certezza del 100% servirebbe controllare fino a input, il problema di Simon cerca di trovare s usando molte meno chiamate del metodo classico.
L'idea dietro all'algoritmo di Simon è "sondare" (o "campionare") un circuito quantistico (si veda la figura sotto) "abbastanza volte" per trovare stringhe a n-bit linearmente indipendenti, cioè
Allora, questo sistema lineare contiene equazioni lineari in incognite (cioè i bit di ), e lo scopo è risolvere per ottenere , e è fissato per una data funzione . Non c'è sempre una (unica) soluzione.
Il circuito quantistico (in figura) è l'implementazione (e visualizzazione) della parte quantistica dell'algoritmo di Simon.
Per prima cosa si prepara uno stato quantistico di tutti zero (facilmente fattibile). Lo stato rappresenta dove è il numero di qubit. Metà di questo stato viene quindi trasformato con una porta di Hadamard. Il risultato è quindi mandato nell'oracolo (o black box, "scatola nera"), che sa come calcolare . L'operatore agisce sui due registri come . Dopo di ciò, parte dell'output prodotta dall'oracolo è trasformata usando un'altra trasformata di Hadamard. Infine, viene fatta una misura sul risultante stato quantistico. Durante questa misura si recuperano le stringhe a n bit, , menzionate nella precedente sezione.
L'algoritmo di Simon può essere pensato come un algoritmo iterativo, che fa uso di un circuito quantistico, seguito da un algoritmo (possibilmente) classico per trovare la soluzione di un sistema lineare di equazioni.
L'algoritmo di Simon inizia con l'input , dove è lo stato quantistico con zeri.
(Il simbolo è il simbolo tipico usato per rappresentare il prodotto tensoriale. Per non ingombrare la notazione, il simbolo viene talvolta omesso: per esempio nella frase precedente, è equivalente a . In questa voce, è spesso usato per evitare ambiguità o confusione.)
Per prima cosa, l'input viene trasformato con una trasformata di Hadamard. Specificamente, la trasformata di Hadamard (il prodotto tensoriale può essere applicato anche a matrici) viene applicata ai primi qubit, cioè allo stato "parziale" , così lo stato dopo questa operazione risulta essere
dove denota una stringa a n bit (cioè la somma è su tutte le stringhe a n bit). Il termine può essere raccolto fuori dalla sommatoria perché non dipende da , e .
Si applica poi nuovamente la trasformata di agli stati dei primi qubit dello stato , e si ha
dove può essere o o , a seconda di , dove , per . Quindi, ad esempio, se e , allora , che è pari, quindi in questo caso, ; è sempre un numero non negativo.
Si analizzi ora il caso in cui , dove . In questo caso, è una funzione due-a-uno, cioè ci sono due input che vengono mappati da allo stesso output.
L'analisi effettuata nel prima è ancora valida: la probabilità di misurare una qualsiasi stringa può essere ancora rappresentata da
Tuttavia, in questo secondo caso, è necessario capire quale sia il valore di .
Sia , l'insieme immagine di . Sia (un certo output della funzione), allora per ogni , c'è una e una sola , tale che ; inoltre si ha che , che è equivalente a .
Nel caso (particolare) in cui , i risultati della misura sono con probabilità
nel caso in cui (), la probabilità di ottenere una stringa è data da
Perciò, in ambo i casi i risultati della misura danno che soddisfa , e la distribuzione è uniforme su tutte le stringhe che soddisfano questa condizione.
Si hanno informazioni a sufficienza per determinare ? Sì, a patto che il processo sia ripetuto molte volte. Nello specifico, se il processo sopra viene ripetuto volte, si ottengono stringhe , tali che
Questo è un sistema di equazioni lineari in incognite (cioè i bit di ), e lo scopo è risolverlo per ottenere . Si noti che ognuna delle che si ottengono dalle misura è, naturalmente, l'esito di una misura, quindi è conosciuta.
Si otterrà una unica soluzione non nulla se sono linearmente indipendenti. La probabilità che siano linearmente indipendente è almeno
Se sono linearmente indipendenti, si può risolvere il sistema e trovare una candidata per la soluzione e verificare che . Se , allora e il problema è risolto. Se , deve essere . Se così non fosse, l'unica soluzione non nulla delle equazioni lineari sarebbe stata ). Ad ogni modo, con l'indipendenza lineare delle equazioni, si può risolvere il problema.
L'algoritmo di Simon necessita di chiamate all'oracolo, mentre un algoritmo classico ne necessita almeno . Si sa anche che l'algoritmo di Simon è ottimale, nel senso che ogni altro algoritmo quantistico che risolve questo problema necessiterà di chiamate.[1][2]