量子コンピュータが話題になっている昨今ですが、そのきっかけの一つとなったのは、素因数分解ができるという量子アルゴリズム「Shorのアルゴリズム」でしょう。
以前から、その仕組みを理解したいと思っていたのですが、よいきっかけがあったので少しずつ勉強してみようと思います。その勉強過程をここにまとめます。現時点での理解を書いているので、間違っているかもしれませんから信用はなさらないでください。
数論パート
Shorのアルゴリズムの問題設定としては、 という自然数の約数を求めたいという問題です。
まず、ランダムに をとってきます。これが の約数ならもうここでおしまいです。そうでない場合も、もし であれば、それが の約数なのでおしまいです。
そこで、 の場合を考えます。そんなときでも、 の の位数が分かれば、非自明な因数が得られます。その方法については、本当に初等整数論的に理解できます。
なる最小の のことを の位数といいます。 が と互いに素であれば、 が群を成すことから必ず位数を持ちます。これが計算でき、かつ、 が偶数である場合、 は整数になりますので が計算できます。このことを念頭に
なる因数分解を考えます。すると、 が で割り切れることになります。したがって、 か の少なくともどちらか一方に の非自明な約数があるわけですね。
なるほど、たしかに の位数 が見つかって、それが偶数であれば の非自明な約数が見つかるわけですね。 が奇数のときは、残念ながらこの方法では約数を見つけられませんので、 を棄却して再度やり直しです。偶数位数の元は必ず存在しますので、いつかはいい感じの が見つかります。
そこで、 の位数を探す旅に出るわけですね。ここまでは古典コンピュータで計算できる話なので、以降が本質的に量子アルゴリズムの領域となります。
量子パート
(ここの章がまだよくわかっていない)
の位数を計算するのは、古典コンピュータにおいては難しい問題です。一方、量子アルゴリズムにはうまい方法があるというのです。
一般に量子ゲートとは、ブラケット から へ変換するユニタリ演算子
です。量子状態は絶対値を規格化する必要があるので、その間の変換ということで自動的にユニタリになるそうです。
さて、
なるユニタリ変換を考えます。 で 倍する変換ですね。
その固有状態を ()とすると、
となり、固有値の位相の部分に が出てきます。
そこで、ユニタリ行列の固有値の位相を取り出してくるようなゲートを作ってあげれば良いということになります。その方法が量子位相推定アルゴリズム(QPE)です。先日の日曜数学会でKumaさんという方が、この内容について発表されていました。
ユニタリ行列があったときに、その位相を2進展開して のように表すわけです。段階的にゲートをかけることで、その各桁を小数第一位から順に取り出すことができるというもののようです。
QPEを使えば、位相 の小数近似が得られますよね。あとは、それを分数の形に戻してあげればよい。そんなときに使えるのが連分数展開です。
連分数展開を使って、小数の近似をする方法については、以前こちらで紹介しました。
www.youtube.com
連分数の係数が一定以上大きくなるところまで計算してあげれば良さそうですね。こうして得られる分数 の分母として が求まりますが、 が位数と一致すればOK。実際 になることを計算してみれば良いわけですね。
そんなわけで、もっとも本質的な部分は量子位相推定ということになりそうです。実際、Kumaさんによると、量子アルゴリズムの多くはこれに帰着されるとのことなので、QPEを勉強することは量子アルゴリズムの理解に有効そうです。
それでは今日はこの辺で。
参考文献
まだ一部しか読んでないですが、この本がおすすめとのことです。
量子コンピューティング ―基本アルゴリズムから量子機械学習まで―
- 作者:嶋田義皓
- 発売日: 2020/11/13
- メディア: Kindle版
数論パートはこちらのスライドを参考にしました。