クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

量子アルゴリズムの得意と限界

このレッスンのあとで: 量子アルゴリズムが速くする問題と、速くしない問題を説明できる。

60分のレッスンコマンド1件量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

量子アルゴリズムが速くする問題は限られる

量子アルゴリズムは、重ね合わせと干渉を使って、特定の問題を解く手順です。速くなるのは一部の問題だけで、ふつうのプログラムがすべて速くなるわけではありません。

このレッスンでは、探索を速くする仕組みと、速くならないもの、そしてシミュレータの限界を学びます。

このレッスンのゴール

メモ

量子アルゴリズムが速くする問題と、速くしない問題を説明できる。

キーワード

ことばいみ
量子アルゴリズム量子ビットの性質を使って問題を解く手順
振幅増幅正解の振幅を大きくし、他を小さくする方法
素因数分解大きな整数を、素数のかけ算に分けること
ノイズ量子ビットの状態を乱す、外からの揺れ
誤り訂正多くの量子ビットで、1つの確かな量子ビットを守ること

学生が入力するセルは、このプレビューでは空白です。

振幅増幅は正解の振幅を大きくする

4つの項目から、1つの正解を探すとします。まず、4つすべてに同じ振幅 0.5 を与えます。確率は、どれも0.25です。

次に、正解の振幅の符号を逆にします。そして、すべての振幅を平均で折り返します。1回の手順で、正解の振幅が1になります。これを振幅増幅と呼びます。

例: 4つの項目で正解は3番

段階0番1番2番3番
始め0.50.50.50.5
正解の符号を逆にする0.50.50.5-0.5
平均(0.25)で折り返す0001
確率0001

学生が入力するセルは、このプレビューでは空白です。

増幅を手で1ステップ

コード: python
# 4つの項目で、番号3に印を付けて、1ステップ増幅します。
state = [0.5, 0.5, 0.5, 0.5]
marked = 3
state[marked] = -state[marked]
mean = sum(state) / len(state)
for n in range(len(state)):
    state[n] = 2 * mean - state[n]
print(state)
# marked を 1 に変えて、もう一度実行してください。
# 大きくなる項目は、どれに動きますか。

ラボは4つの項目で1ステップ試す

ラボの amplify.py は、4つの項目の3番に印を付け、1ステップの増幅を行います。印を付ける所は、プログラムに教えています。

表示される言葉は英語です。chance of each は、それぞれの確率という意味です。after one amplification step は、1ステップの後です。

1ステップの増幅を試す

コマンド
docker exec jupyter python3 steps/amplify.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

探索は項目の数の平方根ほどに減る

N個の項目から探すとき、ふつうの方法は最悪でN回調べます。振幅増幅は、Nの平方根に比例する回数で済みます。

速くなりますが、魔法ではありません。100万個でも、約800ステップが必要です。

例: 項目の数と回数の目安

項目の数ふつうの探索(最悪)振幅増幅(約)
44回1回
100100回8回
10,00010,000回79回
1,000,0001,000,000回785回

学生が入力するセルは、このプレビューでは空白です。

素因数分解は暗号に関わる

大きな整数の素因数分解を、今知られているふつうの方法より、桁違いに速くやる量子アルゴリズムがあります。今の暗号の一部は、素因数分解が難しいことに頼っています。

ただし、必要なのは、大きく誤りの少ない機械です。今の機械は、まだそこに届いていません。

シミュレータは速さを見せられない

ラボのシミュレータは、すべての振幅を記憶して計算します。量子ビットが1つ増えると、振幅の数が2倍になり、作業も2倍になります。

だから、ふつうのパソコンでは、量子コンピュータの速さの利点は見せられません。見せられるのは、規則です。

例: 量子ビットの数と振幅の数

量子ビット振幅の数記憶の目安
101,024約16キロバイト
201,048,576約17メガバイト
301,073,741,824約17ギガバイト

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

量子コンピュータは、どんなプログラムも速くすると考えがちです。速くなるのは、探索や素因数分解のような、一部の問題だけです。表計算や画面の描画には、速くなる理由がありません。

ノイズが計算をこわす

本物の量子ビットは、とても繊細です。熱や電波のノイズで、振幅が少しずつ乱れ、干渉がうまくいかなくなります。

この乱れを直すのが誤り訂正です。1つの確かな量子ビットを守るために、たくさんの量子ビットを使います。

さらに挑戦: 増幅しすぎる

4つの項目で、増幅を2回続けると、どうなるでしょう。amplify.py の手順を、紙で2回目まで追います。

正解の確率は、1回目より上がるでしょうか。下がるなら、なぜ回数を数える必要があるかを、一文で書きましょう。

このラボとソースについて: 量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。