C'è una spiegazione per i non addetti ai lavori perché l'algoritmo di Grover funziona?


27

Questo post di Scott Aaronson è una spiegazione molto utile e semplice dell'algoritmo di Shor .

Mi chiedo se ci sia una tale spiegazione per il secondo algoritmo quantistico più famoso: l'algoritmo di Grover per cercare un database non ordinato di dimensione in tempo .O(n)O(n)

In particolare, vorrei vedere alcune intuizioni comprensibili per il risultato inizialmente sorprendente del tempo di esecuzione!

Risposte:


20

C'è una buona spiegazione di Craig Gidney qui (ha anche altri fantastici contenuti, incluso un simulatore di circuiti, sul suo blog ).

In sostanza, l'algoritmo di Grover si applica quando si dispone di una funzione che ritorna Trueper uno dei suoi possibili input e Falseper tutti gli altri. Il compito dell'algoritmo è trovare quello che ritorna True.

Per fare ciò esprimiamo gli input come stringhe di bit e li codifichiamo usando gli stati e di una stringa di qubit. Quindi la stringa di bit verrebbe codificata nello stato a quattro qubit , per esempio.|0|10011|0011

Dobbiamo anche essere in grado di implementare la funzione utilizzando porte quantistiche. Nello specifico, dobbiamo trovare una sequenza di porte che implementerà una unitaria tale cheU

U|a=|a,U|b=|b

dove è la stringa di bit per cui la funzione ritornerebbe e è una qualsiasi per cui tornerebbe .aTruebFalse

Se iniziamo con una sovrapposizione di tutte le possibili stringhe di bit, che è abbastanza facile da fare semplicemente Hadamarding tutto, tutti gli input iniziano con la stessa ampiezza di (dove è la lunghezza delle stringhe di bit su cui stiamo cercando, e quindi il numero di qubit che stiamo usando). Ma se poi applichiamo l'oracolo , l'ampiezza dello stato che stiamo cercando cambierà in .12nnU12n

Questa non è una differenza facilmente osservabile, quindi dobbiamo amplificarla. Per fare questo usiamo il Grover Diffusione Operator , . L'effetto di questo operatore è essenzialmente quello di vedere come ogni ampiezza è diversa dall'ampiezza media e quindi invertire questa differenza. Quindi, se una certa ampiezza era una certa quantità maggiore dell'ampiezza media, diventerà quella stessa quantità inferiore alla media e viceversa.D

In particolare, se si dispone di una sovrapposizione di stringhe di bit , l'operatore di diffusione ha l'effettobj

D:jαj|bjj(2μαj)|bj

dove è l'ampiezza media. Quindi qualsiasi ampiezza viene trasformata in . Per vedere perché ha questo effetto e come implementarlo, vedi queste note di lezione .μ=jαjμ+δμδ

La maggior parte delle ampiezze sarà leggermente più grande della media (a causa dell'effetto del singolo ), quindi diventeranno un po 'meno della media attraverso questa operazione. Non è un grande cambiamento.12n

Lo stato che stiamo cercando sarà influenzato più fortemente. La sua ampiezza è molto inferiore alla media e quindi diventerà molto maggiore la media dopo l'applicazione dell'operatore di diffusione. L'effetto finale dell'operatore di diffusione è quindi quello di causare un effetto di interferenza sugli stati che sfoglia un'ampiezza di da tutte le risposte sbagliate e la aggiunge a quella giusta. Ripetendo questo processo, possiamo rapidamente arrivare al punto in cui la nostra soluzione si distingue così tanto dalla folla che possiamo identificarla.12n

Ovviamente, tutto ciò dimostra che tutto il lavoro è svolto dall'operatore di diffusione. La ricerca è solo un'applicazione a cui possiamo collegarci.

Vedere le risposte ad altre domande per i dettagli su come vengono implementate le funzioni e l' operatore di diffusione .


4

Trovo che un approccio grafico sia abbastanza buono per fornire alcune informazioni senza diventare troppo tecnico. Abbiamo bisogno di alcuni input:

  • possiamo produrre uno stato con sovrapposizione diversa da zero con lo stato 'contrassegnato' : .|ψ|xx|ψ0
  • possiamo implementare un'operazioneU1=(I2|ψψ|)
  • possiamo implementare un'operazione.U2=I2|xx|

Quest'ultima operazione è quella che può contrassegnare il nostro oggetto contrassegnato con una fase -1. Possiamo anche definire uno stato in modo che sia ortonormale a tale che formi una base ortonormale per l'arco di . Entrambe le operazioni che abbiamo definito preservano questo spazio: inizi con un certo stato nell'intervallo di e restituiscono uno stato all'interno dell'intervallo. Inoltre, entrambi sono unitari, quindi la lunghezza del vettore di input viene preservata.|ψ|x{|x,|ψ}{|x,|ψ}{|x,|ψ}

Un vettore di lunghezza fissa all'interno di uno spazio bidimensionale può essere visualizzato come la circonferenza di un cerchio. Quindi, creiamo un cerchio con due direzioni ortogonali corrispondenti a e . |ψ|xinserisci qui la descrizione dell'immagine

Il nostro stato iniziale avrà una piccola sovrapposizione con e una grande sovrapposizione con . Se fosse il contrario, la ricerca sarebbe semplice: prepareremmo , misureremmo e testeremmo l'output usando la marcatura unitaria, ripetendo fino a quando non avessimo ottenuto l'elemento marcato. Non ci vorrebbe molto. Chiamiamo l'angolo tra e l'angolo . |ψ|x|ψ|ψ|ψ|ψθinserisci qui la descrizione dell'immagine

Ora prendiamoci un momento per pensare a cosa fanno le nostre due azioni unitarie. Entrambi hanno un autovalore -1 e tutti gli altri autovalori +1. Nel nostro sottospazio bidimensionale, questo si riduce a un autovalore +1 e un autovalore -1. Tale operazione è un riflesso nell'asse definito dall'autovettore +1. Quindi, è un riflesso nell'asse , mentre è un riflesso nell'asse . U1|ψU2|ψinserisci qui la descrizione dell'immagine

Ora, prendi un vettore arbitrario in questo spazio e applica seguito da . L'effetto netto è che il vettore viene ruotato di un angolo verso l' asse . U2U12θ|xinserisci qui la descrizione dell'immagine

Quindi, se inizi da , puoi ripeterlo abbastanza volte e arrivare in un angolo di . Pertanto, quando misuriamo quello stato, otteniamo il valore con alta probabilità.|ψθ|xx

Ora abbiamo bisogno di un po 'di cura per trovare l'accelerazione. Supponiamo che la probabilità di trovare in sia . Quindi, classicamente, avremmo bisogno di tentativi per trovarlo. Nel nostro scenario quantistico, abbiamo (poiché è piccolo) e vogliamo un numero di corse tale che . Quindi, . Puoi vedere l'accelerazione della radice quadrata proprio lì.|x|ψp1O(1/p)θrsin((2r+1)θ)1r πp=sinθθθrsin((2r+1)θ)1rπ2θπ2p


3

La semplice spiegazione di come (e quindi perché) l'algoritmo di Grover funziona è che un gate quantico può solo rimescolare (o altrimenti distribuire) ampiezze di probabilità. Utilizzando uno stato iniziale con ampiezze di probabilità uguali per tutti gli stati della base computazionale, si inizia con un'ampiezza di . Questo può essere "aggiunto" allo stato desiderato (soluzione) in ogni iterazione, in modo tale che dopo iterazioni si arriva ad un'ampiezza di probabilità di significa che lo stato desiderato è stato distillato.1/N 1N1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.