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