Funkcja f jest po prostu dowolną funkcją boolowską ciągu bitowego: f:{0,1}n→{0,1} . W przypadku aplikacji przełamujących kryptografię, takich jak[1],[2]lub[3], nie jest to tak naprawdę „wyszukiwanie bazy danych”, które wymagałoby w jakiś sposób przechowywania całej bazy danych jako obwodu kwantowego, ale raczej funkcji takiej jak
x↦{1,0,if SHA-256(x)=y;otherwise,
dla ustalonego y , które nie ma żadnej struktury, którą możemy wykorzystać do klasycznego wyszukiwania, w przeciwieństwie do, powiedzmy, funkcji
x↦{1,0,if 2x≡y(mod22048−1942289),otherwise,
który ma strukturę, którą można wykorzystać do szybszego odwrócenia go nawet na klasycznym komputerze.
Na pytanie o konkretny koszt nie można ogólnie odpowiedzieć, ponieważ f może być dowolnym obwodem - to tylko kwestia wykonania obwodu kwantowego z obwodu klasycznego . Ale zwykle, jak w powyższym przykładzie, funkcja f jest bardzo tania do oceny na klasycznym komputerze, więc nie powinna stanowić szczególnie uciążliwego obciążenia na komputerze kwantowym, dla którego wszystko inne w algorytmie Grovera mieści się w twoim budżecie.
Jedynym ogólnym kosztem nad f jest dodatkowa warunkowa bramka NIE C:|a⟩|b⟩→|a⟩|a⊕b⟩
gdzie ⊕ jest xor, a dodatkowy qubit pomocniczy dla niego. W szczególności, jeśli mamy obwód F:|x⟩|a⟩|junk⟩↦|x⟩|a⊕f(x)⟩|junk′⟩
zbudowany z C i obwodu dla f1 ⟩ = ( 1 / √, to jeśli zastosujemy to do |x⟩ wraz z qubit pomocniczy początkowo w stanie |−⟩=H|1⟩=(1/2–√)(|0⟩−|1⟩) gdzieH jest brama Hadamard, wtedy otrzymujemy
fa| x ⟩ | - ⟩ | śmieci⟩= 12)-√( F.| x ⟩ | 0 ⟩ | śmieci⟩-F| x ⟩ | 1 ⟩ | śmieci⟩ )= 12)-√( |X⟩|f( x ) ⟩ | dżonka′⟩ - | x ⟩ | 1 ⊕ f( x ) ⟩ | dżonka′⟩ ) .
Jeśli fa( x ) = 0 to 1 ⊕ f( x ) = 1 , więc poprzez uproszczenie otrzymujemy fa| x ⟩ | - ⟩ | śmieci⟩= | x ⟩ | - ⟩ | dżonka′⟩ ,
natomiast jeśli fa( x ) = 1 to 1 ⊕ f( x ) = 0 , więc fa| x ⟩ | - ⟩ | śmieci⟩=- | x ⟩ | - ⟩ | dżonka′⟩ ,
a zatem ogólniefa| x ⟩ | - ⟩ | śmieci⟩=(-1 )fa( x )| x ⟩ | - ⟩ | dżonka′⟩ .