関数は、ビット文字列の任意のブール関数です。[1]、[2]、または[3]などの暗号を破るアプリケーションの場合、これは実際には「データベースルックアップ」ではなく、何らかの方法でデータベース全体を量子回路として保存する必要がありますが、ff:{0,1}n→{0,1}
x↦{1,0,if SHA-256(x)=y;otherwise,
固定場合、たとえば関数とは異なり、古典的な検索に利用できる構造はありませんy
x↦{1,0,if 2x≡y(mod22048−1942289),otherwise,
これは、古典的なコンピューター上でさえ、より速くそれを逆にするために悪用されることができる構造を持っています。
特定のコストの問題は、が任意の回路になる可能性があるため、一般的に答えることができません。これは、古典的な回路から量子回路を作成するだけの問題です。しかし、通常、上記の例のように、関数は古典的なコンピューターで評価するのに非常に安価です。したがって、Groverのアルゴリズムに関する他のすべてが予算内にある量子コンピューターに特に面倒な負担をかけるべきではありません。ff
上の唯一の一般的なコストは、追加の条件付きNOTゲートここで、はxorであり、追加の補助キュービットです。特に、回路がある場合はおよびの回路から構築され、それを最初に状態の補助キュービットとともにに適用した場合ここで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′⟩).
場合次いで、私たちは得る単純化によって、場合に対し、次いで、にしたがって一般的にf(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′⟩.