サイモンのアルゴリズム
サイモンのアルゴリズムは、サイモン問題として知られる問題に対する量子クエリアルゴリズムです。 これは、ドイチュ・ジョ ザ問題やバーンスタイン・ヴァジラニ問題に似た性質を持つ約束問題ですが、詳細は異なります。
サイモンのアルゴリズムは、量子アルゴリズムが古典(確率的なものを含む)アルゴリズムに対して指数的な優位性を持つことを示すものとして重要です。また、このアルゴリズムで用いられた技法は、ピーター・ショアによる整数因数分解の効率的な量子アルゴリズムの発見に着想を与えました。
サイモン問題
サイモン問題への入力関数は次の形をとります。
ここで と は正の整数です。 簡単のため の場合に限定することもできますが、この仮定から得られるものはほとんどありません。サイモンのアルゴリズムとその解析は、いずれの場合でも基本的に同じです。
約束の内容をすぐに詳しく説明しますが、まずはっきりさせておきたいのは、この約束が に非常に特殊な構造を要求しているという点です。つまり、ほとんどの関数はこの約束を満たしません。 また、この問題は実用的な重要性を意図したものではないことも認識しておくべきでしょう。 むしろ、量子コンピュータにとっては易しく、古典コンピュータにとっては難しいように、人工的に設計された問題です。
主に 2 つのケースがあります。第 1 のケースは がすべてゼロの文字列 であり、第 2 のケースは がすべてゼロの文字列ではない場合です。
-
ケース 1: がすべてゼロの文字列であれば、約束の必要十分条件を単純化して と表せます。 これは が全単射関数であることと同値です。
-
ケース 2: がすべてゼロの文字列でない場合、この文字列に対して約束が満たされることは、 が2対1であることを意味します。つまり、 のすべての可能な出力文字列に対して、 がその文字列を出力するような入力文字列がちょうど 2 つ存在します。さらに、それらの 2 つの入力文字列はある文字列 を用いて と の形をとらなければなりません。
約束が満たされる場合、条件を満たす文字列 はただ 1 つしか存在し得ないことを認識することが重要です。つまり、約束を満たす関数に対しては常に一意の正しい答えが存在します。
次に、文字列 に対して約束を満たす 形式の関数の例を示します。
入力文字列は 種類あり、出力文字列は 種類で、それぞれ 2 回ずつ現れま す。つまりこれは 2 対 1 の関数です。 さらに、同じ出力文字列を生成する 2 つの異なる入力文字列の任意の組み合わせについて、それらのビット単位の XOR が に等しいことが確認できます。これは一方が他方と の XOR に等しいことと同値です。
実際の出力文字列について重要なのは、異なる入力文字列の選択に対して同じかどうかという点だけであることに注目してください。 例えば上の例では、 の出力として の 4 つの文字列が現れます。これらの 4 つの文字列をすべて異なる別の文字列に置き換えても、正しい解 は変わりません。
アルゴリズムの説明
サイモンのアルゴリズムを表す量子回路図を以下に示します。
上部の 個の量子ビットがアダマールゲートによって操作され、下部の 個の量子ビットはクエリゲートに直接入力されます。 このレッスンでこれまで説明したアルゴリズムと非常によく似ていますが、今回 は位相キックバックがありません。下部の 個の量子ビットはすべて の状態でクエリゲートに入力されます。
この回路を使ってサイモン問題を解くには、実際には回路を複数回独立して実行し、その後に古典的な後処理ステップを行う必要があります。後処理については、回路の動作を解析した後に説明します。
解析
サイモンのアルゴリズムの解析は、ドイチュ・ジョザアルゴリズムと同様の手順で始まります。 上部の 個の量子ビットに対して最初のアダマールゲートの層が実行されると、状態は次のようになります。
が実行されると、関数 の出力が下部の 個の量子ビットのすべてゼロの状態に XOR として書き込まれ、状態は次のようになります。
2 番目のアダマールゲートの層が実行されると、以前と同じアダマールゲートの層の作用の式を使って次の状態が得られます。