情報数理科学Ⅶ/広域システム科学特殊 ...kawamura/t/ad/H280627.pdf ·...
Transcript of 情報数理科学Ⅶ/広域システム科学特殊 ...kawamura/t/ad/H280627.pdf ·...
乱択
𝑧 − 𝑥 𝑥 + 𝑦 𝑦𝑦 + 𝑧𝑧 − 𝑥𝑥𝑦𝑧+ 𝑥𝑦 𝑧 + 𝑥 𝑦 − 𝑧− 𝑥 − 𝑧 𝑥𝑥 + 𝑥𝑦 − 𝑦𝑧 𝑥 + 𝑦 − 𝑧+ 𝑥𝑦𝑦𝑧 + 𝑥 + 𝑦 𝑦 𝑧 − 𝑥 + 𝑦 𝑥 + 𝑦 − 𝑧− 𝑥 − 𝑧 𝑥𝑦 + 𝑥𝑧 + 𝑦𝑧 𝑥 + 𝑦 − 𝑧+ 𝑥 − 𝑦 𝑥 + 𝑧 (𝑦 + 𝑧)(𝑦 − 𝑧) + 𝑦𝑦𝑧𝑧
与えられた(多変数の)多項式が零か判定
文字式のまま全部展開して計算
適当に数値を代入して計算し
0 になるか調べる
大変(多項式時間でない)
ラク(高速・単純)
高確率で正解
例
乱数を利用した算法
𝑥, 𝑦, 𝑧 = (1,2,3) とか
乱択算法が乱数を使うことで
効率的・単純に処理を実現できることがある
例えば…
正解が割とたくさんあり 一つだけ見つければよい
乱数で(何度か)選ぶことにより探す
選択肢を乱数で(何度か)選ぶことで時間の期待値を抑える
処理に選択肢が幾つかあり どれを選んでも結果は正しいが
一部の悪い選択肢を引くと処理時間がかかる
データ全体の様子を知りたいが すべてを調べる時間がない
一部のみを標本として調べることで或る程度の品質の解を得る
問題与えられた 𝑛 個の数のうち
大きい方から𝑛
2番目以内のものを一つ見つけたい
全体を見て最大値を O(𝑛) 時間で求めることはできる
もっと速く?
誤る確率 2−10
算法与えられた数から出鱈目に 10 回選び
そのうち最も大きいものを出力
乱択を使わない場合 必ず Ω(𝑛) 個の数を見る必要がある
問題
MAX3SAT
与えられた 3CNF 式の
最も多くの節を充足する割当を見つけよ
定理(前々回)
3SAT は NP 困難
近似なら…?
系
MAX3SAT は NP 困難
変数か
その否定
変数か
その否定∨
という式(節)を幾つか並べたもの
)変数か
その否定∨(
𝑥2 ∨ 𝑥3 ∨ 𝑥4入力例
𝑥2 ∨ 𝑥5 ∨ 𝑥6
𝑥1 ∨ 𝑥3 ∨ 𝑥4
※前々回の 3SAT は「節をすべて充足する割当があるか判定」するという問題だった
⋮𝑚 個の節
問題
MAX3SAT
与えられた 3CNF 式の
最も多くの節を充足する割当を見つけよ
近似なら…?
変数か
その否定
変数か
その否定∨
という式(節)を幾つか並べたもの
)変数か
その否定∨(
𝑥2 ∨ 𝑥3 ∨ 𝑥4
𝑥2 ∨ 𝑥5 ∨ 𝑥6
𝑥1 ∨ 𝑥3 ∨ 𝑥4
⋮𝑚 個の節
なるべく
充足される節の個数の期待値は7
8𝑚
各変数に真偽を乱択で割当てる(確率 ½ で真、 ½ で偽)だけで
各節は確率7
8で充足される
? ? ?
? ? ?
? ? ? 確率 ½ で真、 ½ で偽
なので特に……
補題
任意の 3CNF 式 Φ(節の個数を 𝑚 とする)に対し
或る割当が存在して Φ の節のうち7
8𝑚 個以上を充足する
(確率論法による存在の証明)
「全員の平均点が60点なら 誰か60点以上取った人が必ずいる」
出鱈目な割当で充足される節の個数の期待値7
8𝑚
補題
この算法が7
8𝑚 個以上の節を満す割当を出力する確率 ≥
1
8𝑚
では 実際に7
8𝑚 個以上の節を満す割当を見つけるには?
算法 出鱈目な割当を一つ答える
補題
この算法の繰返し回数の期待値は O(𝑚)
算法出鱈目な割当を一つ答える
これを7
8𝑚 個の節が満されるまで繰返す
「10本に一つ当りが出る籤を 当るまで引き続けると平均10回くらい」
問1 示して下さい
問2 示して下さい
算法
変数 𝑥1 に真と偽を割当てたとき(𝑥2, 𝑥3, … は乱択したとき)に
それぞれ充足される節数の期待値を求め 多い方に決める
乱数を使わずに……(脱乱択)
𝑥2 ∨ 𝑥3 ∨ 𝑥4
𝑥2 ∨ 𝑥5 ∨ 𝑥6
𝑥3 ∨ 𝑥1 ∨ 𝑥4
⋮
𝑥1 ∨ 𝑥2 ∨ 𝑥5𝑥2 ∨ 𝑥6 ∨ 𝑥1
? ? ?
? ? ?
? ? ?
? ? ?
? ? ?
確率 7/8 で充足
確率 7/8 で充足
確率 7/8 で充足
確率 7/8 で充足
⋮確率 7/8 で充足
平均 87.5 個の節を充足
+
更に 𝑥2 に真と偽を割当てたとき(𝑥3, 𝑥4, … は乱択したとき)に
それぞれ充足される節数の期待値を求め 多い方に決める
以下同様に 𝑥3, 𝑥4, … を順次決めてゆく
真
偽
偽
𝑥1 = 真
𝑥1 = 偽3/4
1
1
1
3/4
3/4100 個
86.5
88.5
偽
真
真
算法
𝑝 が零なら確実に「零である」と判定
非零なら次の補題により確率 >1
2で「零でない」と判定
数 𝑟1, … , 𝑟𝑚 ∈ 1,… , 2𝑑 を一様独立に乱択し
𝑝 𝑟1, … , 𝑟𝑚 ≠ 0 ならば「零でない」と判定
𝑑 は 𝑝 の全次数
問題 与えられた整数係数多項式 𝑝 𝑋1, … , 𝑋𝑚 が
零であるか判定せよ
乱数を使わずに多項式時間で解けるかは未解決
補題
全次数 𝑑 の非零多項式 𝑝 について
Pr 𝑝 𝑟1, 𝑟2, … , 𝑟𝑚 ≠ 0 ≥ 1 −𝑑
𝐵但し確率は 𝑟1, 𝑟2, … , 𝑟𝑚 ∈ 1,… , 𝐵 を無作為に取ったもの
証明
𝑚 に関する帰納法 𝑚 > 0 とする 𝑋1 の最高次数を 𝑖 として
𝑝 𝑋1, 𝑋2, … , 𝑋𝑚 = 𝑋1𝑖 ⋅ 𝑞 𝑋2, … , 𝑋𝑚 + 𝑋1の低次の項
と書く 帰納法の仮定より Pr 𝑞 𝑟2, … , 𝑟𝑚 ≠ 0 ≥ 1 −𝑑−𝑖
𝐵
もし ならば 𝑝 𝑋1, 𝑟2, … , 𝑟𝑚 は
𝑋1 に関する 𝑖 次の非零な多項式で その根は高々 𝑖 個 故に
Pr ≥ Pr ⋅ 1 −𝑖
𝐵≥ 1 −
𝑑 − 𝑖
𝐵1 −
𝑖
𝐵≥ 1 −
𝑑
𝐵
入力
出力
長さ 𝑛 の数列 𝑎 = 𝑎1, … , 𝑎𝑛𝑎 を小さい順に並べ替えた列
問題 整列
クイック整列法算法
O(𝑛 log 𝑛) 時間
(分割統治法と乱択)
quicksort(𝑎: 長さ 𝑛 の数列) {
if (𝑛 = 1)
return 𝑎𝑖 ∈ 1,… , 𝑛 を選ぶ(𝑎𝑖 を基準値として使うことにする)
それ以外の要素のうち 𝑎𝑖 未満のものからなる列を 𝑏 とする
残りの要素からなる列を 𝑐 とする
return (quicksort(𝑏) と 𝑎𝑖 と quicksort(𝑐) を繫いだもの)
}
併合整列法算法 (分割統治法)
確率1
𝑛で一様に乱択
補題
クイック整列法の処理時間の期待値は 𝑇 𝑛 = O(𝑛 log 𝑛)
𝑇 0 = 𝑇 1 = 0
𝑇 𝑛 ≤ 2𝑛 log 𝑛 であることが次のように帰納的に示される
𝑇 𝑛 = 𝑛 +1
𝑛
𝑖=1
𝑛
𝑇 𝑖 − 1 + 𝑇 𝑛 − 𝑖
算法中の大小比較の回数の期待値 𝑇(𝑛) は
𝑇 𝑛 = 𝑛 +1
𝑛
𝑖=1
𝑛
𝑇 𝑖 − 1 + 𝑇 𝑛 − 𝑖 = 𝑛 +2
𝑛
𝑘=2
𝑛−1
𝑇 𝑘
≤ 𝑛 +2
𝑛
𝑘=2
𝑛−1
2𝑘 log 𝑘 ≤ 𝑛 +2
𝑛න𝑥=2
𝑛
2𝑥 log 𝑥 d𝑥
= 𝑛 +2
𝑛𝑥2 log 𝑥 −
𝑥2
22
𝑛
≤ 2𝑛 log𝑛
乱択算法では
計算結果が入力だけでなく
乱数にも依存するわけなので……
乱数の選び方によって
● 出力が正しかったり正しくなかったりする
● 計算時間が長かったり短かったりする
しかし高い確率で正しい(或いは最適解に近い)
しかし高い確率で短い
(かかる時間の期待値が小さい)なら役に立つ
(平均的に高品質の出力が得られる)なら役に立つ
出力入力 𝑥乱数 𝑟
算法
処理時間
出力入力 𝑥乱数 𝑟
算法
よくわからない
(計算量理論の未解決問題)
処理時間
そもそも
乱数って作れるの?
3141592653589793238462643383279擬似乱数
本当は決定的に作られた「擬似乱数」
真の乱数を使ったときとは結果が大きく違ってしまう場合がある?
試験
• 最終回7月11日(月)のこの時間
• 範囲は前回分まで
• 算法と計算量
• 貪慾法
• 分割統治法
• 動的計画法
• 流と切断
• 困難性とその回避
• 40点満点 課題の点数(を換算したもの)と合せて評価
• 75分(←これは変えるかも)