Algoritmo di Simon
L'algoritmo di Simon è un algoritmo di query quantistico per un problema noto come problema di Simon. Si tratta di un problema con promessa, dal sapore simile ai problemi di Deutsch-Jozsa e Bernstein-Vazirani, ma con caratteristiche diverse.
L'algoritmo di Simon è significativo perché fornisce un vantaggio esponenziale del quantum rispetto agli algoritmi classici (inclusi quelli probabilistici), e la tecnica che utilizza ha ispirato Peter Shor nella scoperta di un efficiente algoritmo quantistico per la fattorizzazione di interi.
Problema di Simon
La funzione di input per il problema di Simon ha la forma
per interi positivi e Potremmo limitarci al caso per semplicità, ma c'è poco da guadagnare facendo questa assunzione — l'algoritmo di Simon e la sua analisi sono sostanzialmente gli stessi in entrambi i casi.
Analizzeremo la promessa tra poco per capire meglio cosa afferma, ma prima è importante chiarire che essa richiede che abbia una struttura molto speciale — quindi la maggior parte delle funzioni non la soddisferà. È anche opportuno riconoscere che questo problema non è pensato per avere importanza pratica. Piuttosto, è un problema in qualche modo artificiale, costruito appositamente per essere facile per i computer quantistici e difficile per quelli classici.
Esistono due casi principali: il primo caso è che sia la stringa tutta-zero e il secondo caso è che non sia la stringa tutta-zero.
-
Caso 1: Se è la stringa tutta-zero, possiamo semplificare l'affermazione di "se e solo se" nella promessa in modo che reciti Questo è equivalente a dire che è una funzione iniettiva.
-
Caso 2: Se non è la stringa tutta-zero, allora il soddisfacimento della promessa per questa stringa implica che sia due-a-uno, cioè per ogni possibile stringa di output di esistono esattamente due stringhe di input che portano a produrre quella stringa. Inoltre, queste due stringhe di input devono avere la forma e per qualche stringa
È importante riconoscere che può esserci una sola stringa che funziona se la promessa è soddisfatta, quindi c'è sempre una risposta corretta univoca per le funzioni che soddisfano la promessa.
Ecco un esempio di funzione nella forma che soddisfa la promessa per la stringa
Ci sono stringhe di input diverse e stringhe di output diverse, ognuna delle quali appare due volte — quindi questa è una funzione due-a-uno. Inoltre, per qualsiasi coppia di stringhe di input diverse che producono la stessa stringa di output, vediamo che lo XOR bit a bit di queste due stringhe di input è uguale a il che equivale a dire che ognuna di esse è uguale all'altra messa in XOR con
Nota che l'unica cosa che conta delle stringhe di output effettive è se sono uguali o diverse per diverse scelte di stringhe di input. Ad esempio, nell'esempio precedente, ci sono quattro stringhe e che appaiono come output di Potremmo sostituire queste quattro stringhe con stringhe diverse, purché siano tutte distinte, e la soluzione corretta non cambierebbe.
Descrizione dell'algoritmo
Ecco un diagramma di circuito quantistico che rappresenta l'algoritmo di Simon.
Per essere precisi, ci sono qubit in alto su cui agiscono i gate di Hadamard e qubit in basso che entrano direttamente nel gate di query. Somiglia molto agli algoritmi già discussi nella lezione, ma questa volta non c'è phase kickback; gli qubit in basso entrano tutti nel gate di query nello stato
Per risolvere il problema di Simon usando questo circuito saranno necessarie diverse esecuzioni indipendenti seguite da un passaggio di post-elaborazione classica, che verrà descritto in seguito dopo aver analizzato il comportamento del circuito.
Analisi
L'analisi dell'algoritmo di Simon inizia in modo simile all'algoritmo di Deutsch-Jozsa. Dopo che il primo strato di gate di Hadamard viene applicato agli qubit in alto, lo stato diventa
Quando viene applicato l'output della funzione viene messo in XOR sullo stato tutta-zero degli qubit in basso, quindi lo stato diventa
Quando viene applicato il secondo strato di gate di Hadamard, si ottiene il seguente stato usando la stessa formula per l'azione di uno strato di gate di Hadamard vista in precedenza.
A questo punto, l'analisi diverge da quelle degli algoritmi precedenti di questa lezione.
Siamo interessati alla probabilità che le misurazioni producano ogni possibile stringa Attraverso le regole per l'analisi delle misurazioni descritte nella lezione Sistemi multipli del corso Nozioni di base dell'informazione quantistica, troviamo che la probabilità di ottenere la stringa è uguale a
Per capire meglio queste probabilità, abbiamo bisogno di un po' più di notazione e terminologia. Prima di tutto, il range della funzione è l'insieme contenente tutte le sue stringhe di output.
Poi, per ogni stringa possiamo esprimere l'insieme di tutte le stringhe di input che fanno valutare la funzione a questa stringa di output come
L'insieme è noto come la preimmagine di sotto Possiamo definire la preimmagine sotto di qualsiasi insieme al posto di in modo analogo — è l'insieme di tutti gli elementi che mappa in quell'insieme. (Questa notazione non va confusa con l'inversa della funzione che potrebbe non esistere. Il fatto che l'argomento sul lato sinistro sia l'insieme piuttosto che l'elemento è il segnale che ci permette di evitare questa confusione.)
Usando questa notazione, possiamo spezzare la somma nella nostra espressione per le probabilità precedenti per ottenere
Ogni stringa è rappresentata esattamente una volta dalle due sommatorie — stiamo fondamentalmente mettendo queste stringhe in secchi separati a seconda della stringa di output che producono quando valutiamo la funzione e poi sommando separatamente su tutti i secchi.
Ora possiamo calcolare il quadrato della norma euclidea per ottenere
Per semplificare ulteriormente queste probabilità, diamo un'occhiata al valore
per una scelta arbitraria di
Se allora è una funzione iniettiva e c'è sempre un solo elemento per ogni Il valore dell'espressione è in questo caso.
Se invece allora ci sono esattamente due stringhe nell'insieme Per essere precisi, se scegliamo come una qualsiasi di queste due stringhe, allora l'altra stringa deve essere per la promessa nel problema di Simon. Usando questa osservazione possiamo semplificare come segue.
Quindi, risulta che il valore è indipendente dalla scelta specifica di in entrambi i casi.
Possiamo ora concludere l'analisi esaminando separatamente gli stessi due casi di prima.
-
Caso 1: In questo caso la funzione è iniettiva, quindi ci sono stringhe e otteniamo
In altre parole, le misurazioni producono una stringa scelta uniformemente a caso.
-
Caso 2: In questo caso è due-a-uno, quindi ci sono elementi in Usando la formula precedente concludiamo che la probabilità di misurare ogni è
In altre parole, si ottiene una stringa scelta uniformemente a caso dall'insieme che contiene stringhe. (Poiché esattamente la metà delle stringhe binarie di lunghezza ha prodotto scalare binario con e l'altra metà ha prodotto scalare binario con come già osservato nell'analisi dell'algoritmo di Deutsch-Jozsa per il problema di Bernstein-Vazirani.)
Post-elaborazione classica
Ora sappiamo quali sono le probabilità per i possibili esiti delle misurazioni quando eseguiamo il circuito quantistico per l'algoritmo di Simon. È sufficiente questa informazione per determinare ?
La risposta è sì, a condizione che si sia disposti a ripetere il processo più volte e ad accettare che potrebbe fallire con qualche probabilità, che possiamo rendere molto piccola eseguendo il circuito abbastanza volte. L'idea essenziale è che ogni esecuzione del circuito ci fornisce prove statistiche riguardo a e possiamo usare tali prove per trovare con probabilità molto alta se eseguiamo il circuito un numero sufficiente di volte.
Supponiamo di eseguire il circuito indipendentemente volte, per Non c'è nulla di speciale in questo particolare numero di iterazioni — potremmo scegliere più grande (o più piccolo) a seconda della probabilità di fallimento che siamo disposti a tollerare, come vedremo. Scegliere garantirà una probabilità superiore al % di recuperare
Eseguendo il circuito volte, otteniamo le stringhe Per essere chiari, gli apici qui sono parte dei nomi di queste stringhe, non esponenti o indici dei loro bit, quindi abbiamo
Ora formiamo una matrice con righe e colonne prendendo i bit di queste stringhe come elementi a valori binari.
A questo punto non sappiamo ancora cosa sia — il nostro obiettivo è trovare questa stringa. Ma immagina per un momento di conoscere la stringa e formiamo un vettore colonna dai bit della stringa come segue.
Se eseguiamo la moltiplicazione matrice-vettore modulo — cioè eseguiamo la moltiplicazione normalmente e poi prendiamo il resto delle voci del risultato dopo la divisione per — otteniamo il vettore tutto-zero.
Cioè, trattata come vettore colonna come appena descritto, la stringa sarà sempre un elemento del nucleo (null space) della matrice purché si faccia l'aritmetica modulo Questo vale sia nel caso che nel caso Per essere più precisi, il vettore tutto-zero è sempre nel nucleo di e nel caso si aggiunge il vettore le cui voci sono i bit di
La domanda rimanente è se ci saranno altri vettori nel nucleo di oltre a quelli corrispondenti a e La risposta è che ciò diventa sempre meno probabile man mano che aumenta — e se scegliamo il nucleo di non conterrà altri vettori oltre a quelli corrispondenti a e con probabilità superiore al %. Più in generale, se sostituiamo con per una scelta arbitraria di un intero positivo la probabilità che i vettori corrispondenti a e siano gli unici nel nucleo di è almeno
Usando l'algebra lineare, è possibile calcolare efficientemente una descrizione del nucleo di modulo Nello specifico, ciò può essere fatto usando l'eliminazione di Gauss, che funziona allo stesso modo quando l'aritmetica viene fatta modulo come con i numeri reali o complessi. Finché i vettori corrispondenti a e sono gli unici nel nucleo di il che avviene con alta probabilità, possiamo dedurre dai risultati di questo calcolo.
Difficoltà classica
Quante query ha bisogno un algoritmo di query classico per risolvere il problema di Simon? La risposta è: molte, in generale.
Esistono diverse affermazioni precise che possono essere fatte sulla difficoltà classica di questo problema, ed ecco solo una di esse. Se abbiamo un qualsiasi algoritmo di query probabilistico, e quell'algoritmo fa meno di query, che è un numero di query esponenziale in allora quell'algoritmo fallirà nel risolvere il problema di Simon con probabilità almeno
A volte dimostrare risultati di impossibilità come questo può essere molto impegnativo, ma questo non è troppo difficile da dimostrare attraverso un'analisi probabilistica elementare. Qui, tuttavia, esamineremo solo brevemente l'intuizione di base che ci sta dietro.
Stiamo cercando di trovare la stringa nascosta ma finché non interroghiamo la funzione su due stringhe che hanno lo stesso valore di output, otterremo informazioni molto limitate su In modo intuitivo, tutto ciò che impareremo è che la stringa nascosta non è lo XOR esclusivo di nessuna coppia di stringhe distinte che abbiamo interrogato. E se interroghiamo meno di stringhe, ci saranno ancora molte scelte per che non abbiamo escluso perché non ci sono abbastanza coppie di stringhe per farlo. Questa non è una dimostrazione formale, è solo l'idea di base.
Quindi, in sintesi, l'algoritmo di Simon ci fornisce un notevole vantaggio del quantum rispetto agli algoritmi classici nell'ambito del modello di query. In particolare, l'algoritmo di Simon risolve il problema di Simon con un numero di query lineare nel numero di bit di input della nostra funzione, mentre qualsiasi algoritmo classico, anche se probabilistico, ha bisogno di fare un numero di query esponenziale in per risolvere il problema di Simon con una ragionevole probabilità di successo.