Функція f - просто довільна булева функція бітового рядка: f:{0,1}n→{0,1} . Для застосунків для розбиття криптографії, таких як [1] , [2] або [3] , це насправді не "пошук бази даних", який потребував би якимось чином зберігати всю базу даних як квантовий контур, а скоріше така функція, як
x↦{1,0,if SHA-256(x)=y;otherwise,
для фіксованого y , який не має структури, ми можемо використовувати для класичного пошуку, на відміну від, скажімо, функції
x↦{1,0,if 2x≡y(mod22048−1942289),otherwise,
яка має структуру, яку можна експлуатувати для швидшого перетворення її навіть на класичному комп'ютері.
На питання про конкретну вартість взагалі не можна відповісти, оскільки f може бути будь-яким ланцюгом - це лише питання виведення квантової схеми з класичної схеми . Але зазвичай, як у наведеному вище прикладі, функція f дуже дешево оцінити на класичному комп'ютері, тому вона не повинна створювати особливого тягаря для квантового комп'ютера, для якого все інше про алгоритм Гровера знаходиться у вашому бюджеті.
Єдиною загальною вартістю поверх f є додаткові умовні НЕ ворота C:|a⟩|b⟩→|a⟩|a⊕b⟩
де ⊕ є XOR, і додатковий допоміжний кубіт для нього. Зокрема, якщо у нас є схема F:|x⟩|a⟩|junk⟩↦|x⟩|a⊕f(x)⟩|junk′⟩
побудований з C і ланцюга для f , тоді, якщо ми застосуємо його до |x⟩ разом з допоміжним кубіт спочатку в стані |−⟩=H|1⟩=(1/2–√)(|0⟩−|1⟩)деHє воротами Адамара, то отримаємо
F|x⟩|−⟩|junk⟩=12–√(F|x⟩|0⟩|junk⟩−F|x⟩|1⟩|junk⟩)=12–√(|x⟩|f(x)⟩|junk′⟩−|x⟩|1⊕f(x)⟩|junk′⟩).
Якщо f(x)=0 то 1⊕f(x)=1 , то, спростивши, отримаємо F|x⟩|−⟩|junk⟩=|x⟩|−⟩|junk′⟩,
тоді як якщо f(x)=1 то 1⊕f(x)=0 , то F|x⟩|−⟩|junk⟩=−|x⟩|−⟩|junk′⟩,
а значить загаломF|x⟩|−⟩|junk⟩=(−1)f(x)|x⟩|−⟩|junk′⟩.