Path: blob/main/translations/ja/ch-algorithms/shor.ipynb
3855 views
ショアのアルゴリズム
ショア(Shor)のアルゴリズムは、多項式時間で整数を因数分解することで有名です。最もよく知られている古典的なアルゴリズムは、2つの素数の積の因数分解に超多項式時間が必要です。よって、広く使われている暗号システムRSAは、十分大きな整数の場合、因数分解が不可能であることを前提としています。
この章では、ショアのアルゴリズムの量子部分に焦点を当てます。それは、実際には、周期発見 の問題を解きます。因数分解の問題は多項式時間の周期発見問題に変換できるため、ショアのアルゴリズムによる効率的な周期発見アルゴリズムを使用して整数を効率的に因数分解することができます。 の周期を効率的に計算できれば、効率的に因数分解できることを示すのに十分です。周期発見はそれ自体で価値のある問題なので、最初にこれを説明し、次にこれを使用して5章でどのように因数分解できるかについて説明します。
1. 問題: 周期発見
周期関数を見てみましょう:
注意: モジュロ(Modulo) & モジュラー演算 (ここをクリックして開く)
モジュロ演算(「mod」と省略)は、ある数値を別の数値で割ったときの剰余を見つけることを意味します。例えば:
なので、余りは です(つまり、)。 Pythonでは、モジュロ演算は% 記号で示されます。
この動作は、数値が特定の値(モジュラス)に達した後に数値が「折り返される」モジュラー演算で使用されます。モジュラー演算を使用して、次のように書くことができます:
ここで、 は、式の左側にのみ適用される上記の式とは異なり、(括弧内にあるため)式全体に適用されます。
ここで、 と は正の整数で、 は 未満であり、共通の因数はありません。周期または次数() は、次の式を満たす最小(ゼロ以外)の整数です:
以下のグラフに、この関数の例を示します。 ポイント間の線は周期性を確認するためのものであり、x印の間の中間値を表していないことに注意してください。
2. 解法
ショアの解決策は、以下のユニタリー演算子において量子位相推定を使用します:
これがどのように役立つかを確認するために、Uの固有状態がどのように見えるかを考えてみましょう。の状態から開始した場合、Uが連続して適用され、つまり、レジスターの状態に を乗算します。Uを 回適用すると、再び状態になることがわかります。たとえば、 および の場合:
したがって、このサイクルの重ね合わせ()は、の固有状態になります:
クリックして開く:$a = 3$ 、 $N=35$のときの例
この固有状態は、固有値1を持ちますが、これでは問題があまり面白くありません。より面白い固有状態は、これらの各計算基底の状態にそれぞれ対応した位相を持つものでしょう。具体的に、番目の状態の位相がに比例する場合を見てみましょう:
クリックして開く:$a = 3$ 、 $N=35$のときの例
(位相の分母に が現れていることがわかります。)
これはを含むため、特に興味深い固有値です。実際、は、個の計算基底の状態間の位相差が等しくなるようにセットされる必要があります。上記の状態はこの振る舞いをする唯一の固有状態ではありません。一般化するために、整数をこの位相差にかけると、欲しい固有値が出てきます:
クリックして開く:$a = 3$ 、 $N=35$のときの例
これで、であるの整数値ごとに固有の固有状態がでました。これらの固有状態をすべて合計すると、さまざまな位相で、 を除くすべての計算基底の状態がキャンセルされます:
クリックして開く:$a = 7$ 、 $N=15$のときの例
ここでは、 と の小さな例を見てみましょう。の場合に:
計算基底の状態 がこれらの固有状態の重ね合わせであるため、状態 を使用してに対してQPE(量子位相推定)を実行すると、位相が測定されます:
ここで、は と の間のランダムな整数です。最後に、の連分数アルゴリズム を使用して を見つけます。回路図は次のようになります(ここではビット配列がQiskitの量子ビット順を使っています。):
次に、Qiskitのシミュレーターでショアのアルゴリズムを紹介します。このデモでは、説明なしで の回路を与えますが、4章で、の回路を効率的に構築する方法について説明します。
3. Qiskit での実装
この例では、 と の周期発見問題を解きます。 を以下のようにセットしたときの回路を与えます:
ここでは説明はありませんが、 を作成するには、この回路を 回繰り返します。 次の章で、これらの回路を効率的に作成する一般的な方法について説明します。 関数c_amod15 は、a に関して制御Uゲートをpower 回繰り返します。
測定用ビットとして8量子ビットを使います:
また、逆QFTの回路も与えます(詳細については、量子フーリエ変換の章を参照してください):
これらの構成要素があれば、ショアのアルゴリズムの回路を簡単に構築することができます:
結果として何が測定されるか見てみましょう:
3つの量子ビットがあるため、これらの結果は次の測定された位相に相当します:
次に、連分数アルゴリズムを使用して、とを見つけることができます。 Pythonの組み込みのfractions(分数)モジュールを使用して、浮動小数点をFractionオブジェクトに変換できます。例えば:
これは、正確な結果(この場合は、0.6660000...)を返す分数をが得られるため、上のようなやっかいな結果になる可能性があります。.limit_denominator() メソッドを使って、分母が特定の値を下回る、浮動小数点に最も近い分数を取得します。
ずっといいですね!次数(r)はN未満でなければならないので、最大分母を15に設定します。
測定された固有値のうちの2つが正しい結果を与えたことがわかります:。そしてショアのアルゴリズムが失敗する可能性があることもわかります。これらの悪い結果は、、またはとが素数ではなく、の代わりにの因数が与えられるためです。これに対する最も簡単な解決策は、について満足のいく結果が得られるまで実験を繰り返すことです。
簡単な演習
上記の回路を の値に変更します。どのような結果が得られますか?またその理由は何ですか?
4. 剰余指数化
を繰り返すことによってゲートを作成する方法は、とともに指数関数的に増加し、多項式時間のアルゴリズムにはなりません。演算子を作成する方法が必要です:
これは、とともに多項式に成長します。 幸いなことに、以下の計算:
は効率的に可能です。古典コンピューターでは、 反復二乗 と呼ばれるアルゴリズムを使用して指数を計算できます。 この例では、の形式の指数のみを扱っているため、反復二乗アルゴリズムは非常に単純になります:
Pythonで効率的なアルゴリズムが可能であれば、量子コンピューターで同じアルゴリズムを使用できます。残念ながら、で多項式にスケーリングしても、モジュラー指数回路は単純ではなく、ショアのアルゴリズムのボトルネックになっています。初心者にやさしい実装は、参考文献[1]にあります。
5. 周期発見から因数分解へ
すべての因数分解の問題が難しいわけではありません;偶数をすぐに見つけて、その因数の1つが2であることが分かる場合もあります。実際、因数分解が難しい数値を選択するための特定の基準がありますが、基本的な考え方は、2つの大きな素数の積を選択することです。
一般的な因数分解アルゴリズムは、まず、その整数を因数分解するための近道があるかどうかを確認します(つまり、その数が偶数かどうか? の形をしていないか?を確認します)。その後、最悪のシナリオの場合にショアの周期発見を使います。アルゴリズムの量子部分に焦点を合わせることを目的としているため、Nが2つの素数の積である場合を考えます。
例: 15の因数分解
小さな量子ビット数での因数分解の例を示すために、15を因数分解します。これは、それほど大きくない素数3と5の積であることは誰もが知っています。
最初のステップは、 から の間の乱数 を選択することです:
次に、 の自明でない因数でないことをすばやく確認します:
素晴らしい。次に、a = 7およびN = 15に対してショアの位相発見アルゴリズムを実行します。測定する位相は になることに注意してください。ここで、
であり、 は0と の間のランダムな整数です。
この位相から、を簡単に推定することができます:
これでが出たので、これを使っての因数を見つけることができるかもしれません:
よって:
これは、 がを割るという意味です。 そして、 が偶数の場合でも、次のように書くことができます:
(が偶数でない場合、先に進むことはできず、別の値ので再試行する必要があります。) その場合、 または の最大公約数が の因数である確率が高くなります[2]。
以下のセルは、15の因数が少なくとも1つ見つかるまでアルゴリズムを繰り返します。セルを数回再実行して、セルの動作を確認する必要があります。
6. 参考文献
Stephane Beauregard, Circuit for Shor's algorithm using 2n+3 qubits, arXiv:quant-ph/0205095
M. Nielsen and I. Chuang, Quantum Computation and Quantum Information, Cambridge Series on Information and the Natural Sciences (Cambridge University Press, Cambridge, 2000). (Page 633)