Функция 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 очень дешева для оценки на классическом компьютере, поэтому она не должна создавать особенно обременительную нагрузку на квантовый компьютер, для которого все остальное в алгоритме Гровера находится в пределах вашего бюджета.
fC:|a⟩|b⟩→|a⟩|a⊕b⟩
⊕F:|x⟩|a⟩|junk⟩↦|x⟩|a⊕f(x)⟩|junk′⟩
Cf|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′⟩).
If f(x)=0 then 1⊕f(x)=1, so by simplifying we obtain F|x⟩|−⟩|junk⟩=|x⟩|−⟩|junk′⟩,
whereas if f(x)=1 then 1⊕f(x)=0, so F|x⟩|−⟩|junk⟩=−|x⟩|−⟩|junk′⟩,
and thus in general F|x⟩|−⟩|junk⟩=(−1)f(x)|x⟩|−⟩|junk′⟩.