グローバーのアルゴリズムの説明
このセクションでは、グローバーのアルゴリズムについて説明します。 まず位相クエリゲートとその構築方法について説明し、続いてグローバーのアルゴリズム自体の説明を行います。 最後に、このアルゴリズムが探索問題にどのように自然に応用されるかについて簡単に説明します。
位相クエリゲート
グローバーのアルゴリズムは、位相クエリゲートと呼ばれる演算を使用します。 関数 に対して以前に説明した通常の方法で定義される通常のクエリゲート とは対照的に、関数 に対する位相クエリゲートは次のように定義されます。
これはすべての文字列 に対して成り立ちます。
演算 は、次の図が示すように、1 つのクエリゲート を使って実装できます。
この実装は位相キックバック現象を利用しており、 状態に初期化されたワークスペース量子ビットが 1 つ必要です。 この量子ビットは実装完了後も 状態のままであり、(例えば後続の ゲートを実装するために)再利用するか、単に破棄することができます。
演算 に加えて、 ビット OR 関数に対する位相クエリゲートも使用します。これは各文字列 に対して次のように定義されます。
明示的に述べると、 ビット OR 関数に対する位相クエリゲートは次のように動作します。
明確にしておきますと、これは が標準基底状態に対して動作する方法です。任意の状態に対する挙動は、この式から線形性によって決定されます。
演算 は、まず OR 関数のブール回路から始め、次に量子アルゴリズムの基礎レッスンで説明した手順を用いて 演算(すなわち、 ビット OR 関数の標準クエリゲート)を構築し、最後に上述の位相キックバック現象を用いて 演算を構築することで、量子回路として実装できます。 演算 は関数 に依存しないため、クエリゲートを持たない量子回路で実装できることに注目してください。
アルゴリズムの説明
2 つの演算 と が揃ったので、グローバーのアルゴリズムを説明 できます。
このアルゴリズムは数 を参照します。これはアルゴリズムが実行する反復の回数(したがって関数 へのクエリの回数)です。 この数 はここで説明するグローバーのアルゴリズムでは指定されておらず、どのように選択するかについては後でレッスン内で説明します。
ステップ 2 で反復される演算 は、このレッスンの残 りの部分を通じてグローバー演算と呼びます。 の場合のグローバー演算の量子回路表現を以下に示します。
この図では、 演算は よりも大きく描かれています。これは、 がより計算コストの高い演算であることを非公式に視覚的に示唆するためです。 特に、クエリモデルで作業する場合、 は 1 回のクエリを必要とするのに対し、 はクエリを必要としません。 代わりに関数 のブール回路を持ち、それを の量子回路に変換する場合、得られる量子回路は の回路よりも大きく複雑になることが合理的に予想されます。
、 の場合のアルゴリズム全体の量子回路図を以下に示します。 の値が大きい場合は、測定の直前にグローバー演算のインスタンスを追加するだけで対応できます。
探索への応用
グローバーのアルゴリズムは、次のように探索問題に応用できます。
- ステップ 2 の数 を選択します(これについてはレッスンの後半で説明します)。
- 選択した を用いて、関数 に対してグローバーのアルゴリズムを実行し、文字列 を得ます。
- 文字列 で関数 にクエリを実行し、有効な解であるかどうかを確認します。
- であれば、解が見つかったことになるので、停止して を出力できます。
- それ以外の場合、 であれば、場合によっては異なる の選択で手順を再実行するか、諦めて「解なし」と出力することを決めることができます。
グローバーのアルゴリズム の仕組みを分析することで、 と設定することで(解が存在する場合)高い確率で探索問題の解が得られることがわかります。