Come viene implementato l'oracolo dell'algoritmo di ricerca di Grover?


27

L'algoritmo di ricerca di Grover fornisce una velocità quadratica dimostrabile per la ricerca di database non ordinata. L'algoritmo è solitamente espresso dal seguente circuito quantico:

Nella maggior parte delle rappresentazioni, una parte cruciale del protocollo è la "porta dell'oracolo" Uω , che "magicamente" esegue l'operazione |x(1)f(x)|x . Tuttavia, spesso non viene detto quanto sia difficile realizzare un simile cancello. In effetti, potrebbe sembrare che l'uso di un "oracolo" sia solo un modo per spazzare via le difficoltà sotto il tappeto.

Come facciamo a sapere se un'operazione così oracolare è effettivamente realizzabile? E in tal caso, qual è la sua complessità (ad esempio in termini di complessità della decomposizione dei gate)?


5
È qualcosa che mi chiedevo anche io. In questo esperimento, ad esempio, hanno collegato la soluzione all'oracolo, che ha un sapore un po 'come tradirmi ...
M. Stern

Un'altra grande risposta a questa domanda è fornita in questa risposta su CS Theory SE.
glS

Risposte:


20

La funzione f è semplicemente una funzione booleana arbitraria di una stringa di bit: f:{0,1}n{0,1} . Per le applicazioni che violano la crittografia, come [1] , [2] o [3] , questa non è in realtà una "ricerca di database", che richiederebbe in qualche modo la memorizzazione dell'intero database come un circuito quantistico, ma piuttosto una funzione come

x{1,if SHA-256(x)=y;0,otherwise,

per y fisso , che non ha struttura che possiamo sfruttare per una ricerca classica, a differenza, diciamo, della funzione

x{1,if 2xy(mod220481942289),0,otherwise,

che ha una struttura che può essere sfruttata per invertirla più velocemente anche su un computer classico.

Alla domanda sul costo particolare non si può rispondere in generale perché può essere qualsiasi circuito - è solo una questione di creare un circuito quantico da un circuito classico . Ma di solito, come nell'esempio sopra, la funzione è molto economica da valutare su un computer classico, quindi non dovrebbe comportare un onere particolarmente oneroso su un computer quantistico per il quale tutto il resto dell'algoritmo di Grover rientra nel budget.fff

L'unico costo generale in cima a è un gate NOT condizionale aggiuntivo dove è xor e un qubit aggiuntivo per esso. In particolare, se abbiamo un circuito costruito da e dal circuito per , quindi se lo applichiamo a insieme a un qubit ausiliario inizialmente nello stato dovef

C:|a|b|a|ab
F:|x|a|junk|x|af(x)|junk
Cf|x|=H|1=(1/2)(|0|1)H è un cancello Hadamard, poi arriviamo

F|x||junk=12(F|x|0|junkF|x|1|junk)=12(|x|f(x)|junk|x|1f(x)|junk).

Se allora , quindi semplificando otteniamo mentre se quindi , quindi e quindi in generalef(x)=01f(x)=1

F|x||junk=|x||junk,
f(x)=11f(x)=0
F|x||junk=|x||junk,
F|x||junk=(1)f(x)|x||junk.


5

Bene, il documento originale di Grover, "La meccanica quantistica aiuta nella ricerca di un ago in un pagliaio" afferma chiaramente, presume che C (S) possa essere valutato in un tempo costante. La ricerca di Grover non si preoccupa dell'implementazione, ma della riduzione polinomiale della cosiddetta complessità della query (quante volte si consulta l'oracolo, come un database classico)

In effetti, il concetto di oracolo nell'informatica è stato proposto da Alan Turing per descrivere costrutti per i quali una descrizione su un UTM potrebbe non essere realizzabile (Wikipedia). Si tratta in un certo senso magico.

Ma ovviamente, tornando alla tua domanda, come possiamo effettivamente creare il circuito per la ricerca di Grover (o qualsiasi algoritmo oracolare)? Dobbiamo conoscere la risposta in anticipo per cercare il risultato? Bene, in un certo senso è necessario. Questo è esattamente ciò su cui intelligenti miglioramenti della ricerca Grover cercano di lavorare, in modo tale che non abbiamo bisogno di conoscere la risposta esatta in anticipo, ma alcune proprietà di essa. Vorrei illustrare con un esempio.

Per il problema del riconoscimento dei pattern usando la ricerca di Grover, se ho 4 pattern su 2 qubit (00, 01, 10, 11) e voglio contrassegnare e amplificare 11, la diagonale del mio oracolo unitario dovrebbe essere simile (1,1,1 , -1) occuparsi dello spostamento di fase pi per la soluzione. Quindi, per questa semplice implementazione, per la costruzione dell'unità, è necessario conoscere in anticipo la risposta completa.

Un ingegnoso miglioramento del completamento del modello se fornito nel documento "Quantum pattern matching" di Mateas e Omar. In sostanza, costruisce tanti oracoli fissi quanti sono gli alfabeti nel set. Quindi per la nostra stringa binaria, ci sarà un oracolo che segna tutti gli 1 e un altro che segna tutti gli 0. Gli oracoli sono invocati condizionatamente in base a ciò che voglio cercare. Se voglio cercare 11, chiamo l'oracolo 1 su LSqubit e l'oracolo 1 di nuovo su MSqubit. Al primo oracolo, amplificherei gli stati (01, 11), cioè gli stati con LSQ come 1, e nella seconda chiamata amplificherebbe (10, 11). Quindi, come vedi, 11 è l'unico stato che viene amplificato due volte, terminando con una probabilità di misurazione più elevata. Sebbene il circuito quantico compilato cambierebbe in base a quale sia il mio modello di ricerca di input, una descrizione di alto livello dell'algoritmo quantistico rimane la stessa. Puoi considerare gli oracoli come chiamate di funzione basate su un caso di commutazione del set di alfabeto invocato per ciascun carattere nella stringa di ricerca.


Quindi, se dovessi sapere per costruire qual è il punto? In caso contrario, non sono chiaro come implementare per un sconosciuto ! Ho esaminato alcune implementazioni su IBM, ma si presume che conoscano ! U ω U ω ω ωωUωUωωω
user185597
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.