グローバーのアルゴリズムを解析して、その仕組みを理解しましょう。
まず、記号的解析と呼べるものから始めます。ここではグローバー操作 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
次の等式が成り立つことに注意してください。
(−1)g(x)=(−1)1⊕f(x)=−(−1)f(x)
すべての文字列x∈Σnについて成り立つので、したがって
Zg=−Zf.
これは、関数fを関数gに置き換えたとしても、Grover のアルゴリズムの動作は変わらないことを意味します——なぜなら、両方の場合においてアルゴリズムから得られる状態は必然的に大域位相を除いて等しいからです。
これは問題ではありません!
直感的に言えば、アルゴリズムはどの文字列が解でどの文字列が解でないかを気にしません——正しく動作するためには、解と非解を区別できさえすればよいのです。
グローバー操作の作用
それでは、量子状態ベクトル ∣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,
上でnビット文字列すべてにわたる一様重ね合わせに用いたのと同じ記法∣u⟩を使っています。
これで、∣A0⟩と∣A1⟩に対するGの作用を計算するために必要なものがそろいました。
まず、∣A0⟩に対するGの作用を計算しましょう。
G∣A0⟩=(2∣u⟩⟨u∣−I)Zf∣A0⟩=(2∣u⟩⟨u∣−I)∣A0⟩=2N∣A0∣∣u⟩−∣A0⟩=2N∣A0∣(N∣A0∣∣A0⟩+N∣A1∣∣A1⟩)−∣A0⟩=(N2∣A0∣−1)∣A0⟩+N2∣A0∣⋅∣A1∣∣A1⟩=N∣A0∣−∣A1∣∣A0⟩+N2∣A0∣⋅∣A1∣∣A1⟩
次に、∣A1⟩に対するGの作用を計算しましょう。
G∣A1⟩=(2∣u⟩⟨u∣−I)Zf∣A1⟩=−(2∣u⟩⟨u∣−I)∣A1⟩=−2N∣A1∣∣u⟩+∣A1⟩=−2N∣A1∣(N∣A0∣∣A0⟩+N∣A1∣∣A1⟩)+∣A1⟩=−N2∣A1∣⋅∣A0∣∣A0⟩+(1−N2∣A1∣)∣A1⟩=−N2∣A1∣⋅∣A0∣∣A0⟩+N∣A0∣−∣A1∣∣A1⟩
どちらの場合も、次の式を使っています。
∣u⟩=N∣A0∣∣A0⟩+N∣A1∣∣A1⟩
次の式とあわせて
⟨u∣A0⟩=N∣A0∣and⟨u∣A1⟩=N∣A1∣
まとめると、次が成り立ちます。
まとめると、次のようになります。
G∣A0⟩G∣A1⟩=N∣A0∣−∣A1∣∣A0⟩+N2∣A0∣⋅∣A1∣∣A1⟩=−N2∣A1∣⋅∣A0∣∣A0⟩+N∣A0∣−∣A1∣∣A1⟩.
すでに述べたように、ステップ2の直前におけるQの状態は、∣A0⟩と∣A1⟩が張る2次元空間に含まれており、Gがこの空間内の任意のベクトルを同じ空間内の別のベクトルへ写像することも確認しました。
これは、解析のためには、この部分空間だけに注目すればよいことを意味します。
この2次元空間内で何が起きているかをよりよく理解するために、この空間におけるGの作用を行列として表現してみましょう。
M=N∣A0∣−∣A1∣N2∣A0∣⋅∣A1∣−N2∣A1∣⋅∣A0∣N∣A0∣−∣A1∣,
1列目と2列目(行)がそれぞれ∣A0⟩と∣A1⟩に対応しています。
このシリーズではこれまで、行列の行と列をシステムの古典状態と結びつけてきましたが、行列はここで見るように、異なる基底に対する線形写像の作用を記述するためにも使うことができます。
一見してまったく明らかではありませんが、行列Mは、より単純に見える行列を2乗することで得られます。
N∣A0∣N∣A1∣−N∣A1∣N∣A0∣2=N∣A0∣−∣A1∣N2∣A0∣⋅∣A1∣−N2∣A1∣⋅∣A0∣N∣A0∣−∣A1∣=M
行列
N∣A0∣N∣A1∣−N∣A1∣N∣A0∣
は回転行列であり、これは次のように表すこともできます。
N∣A0∣N∣A1∣−N∣A1∣N∣A0∣=(cos(θ)sin(θ)−sin(θ)cos(θ))
for
θ=sin−1(N∣A1∣).
この角度θは、この後の解析において非常に重要な役割を果たすことになるので、初めて登場するこの時点でその重要性を強調しておく価値があります。
この行列の表現から、次のことがわかります。
M=(cos(θ)sin(θ)−sin(θ)cos(θ))2=(cos(2θ)sin(2θ)−sin(2θ)cos(2θ)).
これは、角度θだけ2回回転することが、角度2θだけ回転することと等価であるためです。
これを見るもう一つの方法は、次の別の表現を利用することです。
θ=cos−1(N∣A0∣),
三角関数の倍角公式とあわせて
cos(2θ)sin(2θ)=cos2(θ)−sin2(θ)=2sin(θ)cos(θ).
まとめると、ステップ2の開始時点でのレジスタQの状態は
∣u⟩=N∣A0∣∣A0⟩+N∣A1∣∣A1⟩=cos(θ)∣A0⟩+sin(θ)∣A1⟩,
であり、この状態に G を適用する効果は、∣A0⟩ と ∣A1⟩ によって張られる空間内でその状態を角度 2θ だけ回転させることです。
たとえば、次が成り立ちます。
G∣u⟩G2∣u⟩G3∣u⟩=cos(3θ)∣A0⟩+sin(3θ)∣A1⟩=cos(5θ)∣A0⟩+sin(5θ)∣A1⟩=cos(7θ)∣A0⟩+sin(7θ)∣A1⟩
一般には
Gt∣u⟩=cos((2t+1)θ)∣A0⟩+sin((2t+1)θ)∣A1⟩.
幾何学的な図
ここで、先ほどの解析を幾何学的な図と結び付けましょう。
操作 G は 2 つの反射、すなわち Zf と H⊗nZORH⊗n の積です。
そして 2 つの反射を合成した正味の効果は回転を行うことです。
まず Zf から始めます。
先ほど観察したように、次が成り立ちます。
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩.
∣A0⟩ と ∣A1⟩ によって張られる 2 次元ベクトル空間内において、これは ∣A0⟩ に平行な直線 L1 についての反射です。
次の図は、∣A0⟩ と ∣A1⟩ の実線形結合と仮定した仮想的な単位ベクトル ∣ψ⟩ に対するこの反射の作用を示しています。

次に操作 H⊗nZORH⊗n を考えます。これは既に次のように書けることを見ました。
H⊗nZORH⊗n=2∣u⟩⟨u∣−I.
これもまた反射であり、今度はベクトル ∣u⟩ に平行な直線 L2 についての反射です。
次の図は単位ベクトル ∣ψ⟩ に対するこの反射の作用を示しています。

これら 2 つの反射を合成すると回転が得られます。回転角は反射の軸の間の角度の 2 倍です。これを次の図が示しています。

これにより、グローバー操作の効果が ∣A0⟩ と ∣A1⟩ の線形結合を角度 2θ だけ回転させることである理由が幾何学的な観点から説明されます。