グローバーのアルゴリズムを解析して、その仕組みを理解しましょう。
まず、記号的解析と呼べるものから始めます。ここではグローバー操作 G がある状態にどのように作用するかを計算し、その後、この記号的解析をアルゴリズムの動作を視覚化するのに役立つ幾何学的な図と結び付けます。
解と非解
まず、2 つの文字列の集合を定義します。
A0A1={x∈Σn:f(x)=0}={x∈Σn:f(x)=1}
集合 A1 は探索問題のすべての解を含み、A0 は解でない文字列(便宜上非解と呼ぶことがあります)を含みます。
これら 2 つの集合は A0∩A1=∅ および A0∪A1=Σn を満たします。すなわち、これは Σn の二分割です。
次に、解の集合と非解の集合それぞれの上の一様重ね合わせを表す 2 つの単位ベクトルを定義します。
∣A0⟩∣A1⟩=∣A0∣1x∈A0∑∣x⟩=∣A1∣1x∈A1∑∣x⟩
正確に言えば、これらのベクトルはそれぞれ対応する集合が空でない場合にのみ定義されますが、以降では A0 も A1 も空でない場合に焦点を当てます。
A0=∅ および A1=∅ の場合は別途容易に処理できるため、後ほど取り上げます。
なお、ここで使用している記法は一般的なものです。有限で空でない集合 S があれば、∣S⟩ と書いて S の要素上で一様な量子状態ベクトルを表すことができます。
また、∣u⟩ をすべての n ビット文字列上の一様量子状態として定義します。
∣u⟩=N1x∈Σn∑∣x⟩.
次の等式が成り立つことに注意してください。
∣u⟩=N∣A0∣∣A0⟩+N∣A1∣∣A1⟩.
また、∣u⟩=H⊗n∣0n⟩ が成り立つため、∣u⟩ はグローバーのアルゴリズムのステップ 1 における初期化後のレジスタ Q の状態を表します。
これは、ステップ 2 で G の反復が始まる直前において、Q の状態が ∣A0⟩ と ∣A1⟩ によって張られる 2 次元ベクトル空間に含まれており、さらにこれらのベクトルの係数が実数であることを意味します。
これから分かるように、ステップ 2 の操作 G を何回反復した後でも、Q の状態は常にこれらの性質を持ちます。すなわち、状態は ∣A0⟩ と ∣A1⟩ の実線形結合です。
グローバー操作についての観察
次に、グローバー操作
G=H⊗nZORH⊗nZf,
に注目し、その興味深い性質から始めましょう。
関数 f を f と NOT 関数の合成、すなわち f の出力ビットを反転させた関数に置き換えたとします。
この新しい関数を g と呼び、いくつかの記法で表すことができます。
g(x)=¬f(x)=1⊕f(x)=1−f(x)={10f(x)=0f(x)=1
すべての文字列 x∈Σn に対して
(−1)g(x)=(−1)1⊕f(x)=−(−1)f(x)
が成り立つことに注意してください。したがって
Zg=−Zf.
つまり、関数 f を関数 g に置き換えてもグローバーのアルゴリズムは何も変わりません。なぜなら、2 つの場合においてアルゴリズムから得られる状態は必然的に全体位相の違いを除いて同等だからです。
これは問題ありません!
直感的に言えば、アルゴリズムはどの文字列が解でどの文字列が非解かを気にする必要はなく、正しく動作するた めに解と非解を区別できれば十分です。
グローバー操作の作用
では、量子状態ベクトル ∣A0⟩ と ∣A1⟩ に対する G の作用を考えましょう。
まず、操作 Zf が ∣A0⟩ と ∣A1⟩ に非常に単純な作用をすることを観察します。
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩
次に、操作 H⊗nZORH⊗n を考えます。
操作 ZOR は次のように定義されます。
ZOR∣x⟩=⎩⎨⎧∣x⟩−∣x⟩x=0nx=0n,
ここでも x∈Σn のすべての文字列について成り立ちます。この操作を表す便利な別の書き方は次の通りです。
ZOR=2∣0n⟩⟨0n∣−I.
この式が ZOR の定義と一致することを確認するには、標準基底状態への作用を評価すれば十分です。
したがって、操作 H⊗nZORH⊗n は次のように書けます。
H⊗nZORH⊗n=2H⊗n∣0n⟩⟨0n∣H⊗n−I=2∣u⟩⟨u∣−I,
ここで、∣u⟩ はすべての n ビット文字列上の一様重ね合わせを表す上記の記法と同じです。
これで ∣A0⟩ と ∣A1⟩ に対する G の作用を計算する準備が整いました。
まず、G の ∣A0⟩ への作用を計算します。