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 True
per uno dei suoi possibili input e False
per 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⟩|1⟩0011
|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 .aTrue
bFalse
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 .12n√nU−12n√
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|bj⟩↦∑j(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 .