アルゴリズムの考え方:乱数の利用

乱数アルゴリズム

計算における乱数の利用は、従来、数値積分の分野で用いられてきた。
数値積分におけるモンテカルロ法:$\pi$の計算

最近、乱数を利用した確率的(乱択)アルゴリズムの理論が発展した
乱択アルゴリズムには2種類ある。ともに、乱数を利用して、正答を高確率で返すが、
1.モンテカルロ法は、常に答を返すが、間違うこともある。
2.ラスベガス法は、答えを返さないこともあるが、誤答を返すことはない。
ラスベガス法で、一定時間後に必ず答を返すようにすれば、モンテカルロ法になる。

乱数の生成法

真の乱数:決定的に動作するコンピュータでは生成できない!定義さえ難しい
疑似乱数生成法 線型合同法:定数$a,b,m$を使って、疑似乱数列$r_n$を次の式で作る$r_{n+1}=ar_n+b \mod m$
線型合同法の欠点
  1. 最大周期が$m$
  2. 下位ビットに規則性がある
  3. よって $m$ を十分大きくしなければならない
新しい疑似乱数生成法
Mersenne Twisterxorshift

パズル.周期 $m=4096, 65536$ のとき乱数分布はどうなるか。

数値積分:$k$桁目までを求めるモンテカルロ法

乱数を利用して、(多重)定積分を計算する手法を総称してモンテカルロ法という
例:単位円の面積、すなわち円周率を求める
πの計算
 第1象限中の単位正方形上に $n$ 個の点をランダムにばらまき、その点が単位円に含まれれば赤で、含まれなければ青で表示。点が単位円に含まれる確率は4分円の面積を近似するから、それを4倍して$\pi$の近似値とする。
±の後の値は標準誤差であり、$\sqrt{n}$に反比例するので、信頼できる精度を1桁あげたければ、点の数$n$を100倍にする必要があり、計算時間は当然$n$に比例する。
モンテカルロ法による積分では、コンピュータ(言語)が標準で提供する擬似乱数よりも、無理数の1倍, 2倍, 3倍, ・・・の小数部分を値とする準乱数のほうが精度がよい。

パズル.上のπの計算アプリで、以下の実験を行え。
  1. 点の数 n=1,000,000 のときのπの値および計算時間を疑似乱数の場合と準乱数の場合で比較せよ。
  2. 疑似乱数でn=2,000,000 4,000,000 のときの精度と計算時間を比較し、n=100,000,000 のときの精度と計算時間を予測せよ。

確率的素数判定法(モンテカルロ法)

フェルマーテスト:以下の非素数判定を繰り返しすり抜けることをもって、確率的素数判定を行う
フェルマーの小定理の対偶
$n$ と互いに素な整数 $a$ が ${\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}}$ を満たせば、$n$ は素数でない。

フェルマーテストのアルゴリズム
以下 1.~3. を適当な回数($r$ 回)繰りかえす
  1. $2$ 以上 $n$ 未満の自然数 $a$ をランダムに選ぶ。
  2. $a$ と $n$ の公約数が $1$ でなければ、「$n$は合成数」と出力して終了
  3. ${\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}}$ ならば、「$n$は合成数」と出力して終了
「$n$は確率的素数」と出力して終了

フェルマーテストは、ユークリッドの互除法(公約数の計算)やBinary法(べき乗計算)を用いて高速に計算できる。
フェルマーテストが「合成数」と出力したとき、$n$ は実際に合成数である。
「確率的素数」と出力したとき、$n$ は実際に素数であるとは限らないが、
十分回数繰りかえせば、高い確率で素数である。 しかし・・・
フェルマーテストは完全な素数判定法ではない

カーマイケル数絶対擬素数)は合成数である
にもかかわらず、自身と互いに素な任意の $a$ に対して ${\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}}$
なので、「確率的素数」と判定されてしまうことがある。

パズル.カーマイケル数 $46657$ が $r=10$ のフェルマーテストをすり抜け、「確率的素数」とされる確率を求めよ。
ヒント.カーマイケル数 $n$ が「合成数」と判定されないのは選んだ $a$ との公約数が 1 のときなので、$46657=13\times 37\times 97$ が $r=1$ のフェルマーテストをすり抜け、「確率的素数」とされる確率は $\displaystyle \frac{12\times 36\times 96-1}{46657-1}$ である。

フェルマーテストを改善した、ミラー-ラビン素数判定法がある。
また最近、決定的多項式時間で動作するAKS素数判定法も開発された。

ラスベガス法

高確率で正答を返し、間違うことはないが、
低確率で、答えが得られない

例.確率的クイックソート:データ数 $n$、$c$ は適当な定数
・分割基準値をランダムに選んで計算
・$cn\log n$ 時間後に終了していなければ強制的に終了

クイックソートは
 多くの入力に対する計算時間は$n\log n$に比例するが
 最悪の入力に対する計算時間は$n^2$に比例する。
確率的クイックソートは
 すべての入力に対して計算時間は$n\log n$に比例するが
 答えを返さないことがありうる

パズル.クイックソートのモンテルカルロアルゴリズムを述べよ。

終了ページ

終了ページ

終了ページ

終了ページ