Groverのアルゴリズム
勉強中の量子アルゴリズムについてまとめます。間違いがありましたら、コメントください。
Groverのアルゴリズムはnビットで表される個のビット列から、1個のビット列を探し出す量子アルゴリズムです。
アルゴリズムはおおまかには以下です。とします。
- 量子ビットをn個用意して、個の状態の重ね合わせ状態を作る。各状態が各ビット列に対応する。ここで、各状態の確率振幅が等しくになるようにする。
- 重ね合わせ状態のうち、探索対象の状態の確率振幅にだけ-1を掛ける
- 確率振幅の平均値を求め、各状態の確率振幅をのように変化させる。
2と3を繰り返すことで、探索対象の状態の確率振幅を増幅させていきます。
アルゴリズムの詳細は以下の動画が分かりやすかったです。
今回の記事では、上記手順の2と3を何回繰り返せばよいかを求めます。
まず、n個の量子ビットの状態を次のようにセッティングします。
ここでは探索対象の状態です。 また、です。
2と3を1回行うと探索対象でない状態の確率振幅と、探索対象の状態の確率振幅はそれぞれ以下になります。
ここで平均値を使いました。
2と3をk回行った後の確率振幅を求めるためには、以下の連立漸化式を解く必要があります。
行列で書くと次のようになります。
行列
を回掛けたを求めるためにの固有ベクトルを使います。
固有ベクトル, を並べた行列
を使って、
となるので、
となります。
よって
ここで
とおくと
したがって
最後の式で、
と置きました。
求めるは以下を満たします。
すなわち、
について解くと
となりました。
※2019/6/21追記
なので、
となります。