情報数理科学Ⅶ/広域システム科学特殊 ...kawamura/t/ad/H280627.pdf ·...

17
算法の設計と解析 乱択 http://www.graco.c.u-tokyo.ac.jp/~kawamura/t/ad/ 河村彰星 情報数理科学Ⅶ/広域システム科学特殊講義Ⅳ

Transcript of 情報数理科学Ⅶ/広域システム科学特殊 ...kawamura/t/ad/H280627.pdf ·...

算法の設計と解析乱択

http://www.graco.c.u-tokyo.ac.jp/~kawamura/t/ad/

河村彰星

情報数理科学Ⅶ/広域システム科学特殊講義Ⅳ

乱択

𝑧 − 𝑥 𝑥 + 𝑦 𝑦𝑦 + 𝑧𝑧 − 𝑥𝑥𝑦𝑧+ 𝑥𝑦 𝑧 + 𝑥 𝑦 − 𝑧− 𝑥 − 𝑧 𝑥𝑥 + 𝑥𝑦 − 𝑦𝑧 𝑥 + 𝑦 − 𝑧+ 𝑥𝑦𝑦𝑧 + 𝑥 + 𝑦 𝑦 𝑧 − 𝑥 + 𝑦 𝑥 + 𝑦 − 𝑧− 𝑥 − 𝑧 𝑥𝑦 + 𝑥𝑧 + 𝑦𝑧 𝑥 + 𝑦 − 𝑧+ 𝑥 − 𝑦 𝑥 + 𝑧 (𝑦 + 𝑧)(𝑦 − 𝑧) + 𝑦𝑦𝑧𝑧

与えられた(多変数の)多項式が零か判定

文字式のまま全部展開して計算

適当に数値を代入して計算し

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分(←これは変えるかも)

演習問題

・[KT]第十三章末問題

クラインバーグ、タルドシュ著(浅野、浅野、小野、平田訳)『アルゴリズムデザ

イン』共立出版(平成20年)

[KT]