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,0,if SHA-256(x)=y;otherwise,
per y fisso , che non ha struttura che possiamo sfruttare per una ricerca classica, a differenza, diciamo, della funzione
x↦{1,0,if 2x≡y(mod22048−1942289),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 dovefC:|a⟩|b⟩→|a⟩|a⊕b⟩
⊕F:|x⟩|a⟩|junk⟩↦|x⟩|a⊕f(x)⟩|junk′⟩
Cf|x⟩|−⟩=H|1⟩=(1/2–√)(|0⟩−|1⟩)H è un cancello Hadamard, poi arriviamo
F|x⟩|−⟩|junk⟩=12–√(F|x⟩|0⟩|junk⟩−F|x⟩|1⟩|junk⟩)=12–√(|x⟩|f(x)⟩|junk′⟩−|x⟩|1⊕f(x)⟩|junk′⟩).
Se allora , quindi semplificando otteniamo mentre se quindi , quindi e quindi in generalef(x)=01⊕f(x)=1F|x⟩|−⟩|junk⟩=|x⟩|−⟩|junk′⟩,
f(x)=11⊕f(x)=0F|x⟩|−⟩|junk⟩=−|x⟩|−⟩|junk′⟩,
F|x⟩|−⟩|junk⟩=(−1)f(x)|x⟩|−⟩|junk′⟩.