明治大学 理工学部総合講義c 乱択と計算量kawamura/t/meiji/h280705.pdf ·...

24
乱択と計算量 平成28年7月5日 http://www.graco.c.u-tokyo.ac.jp/~kawamura/t/meiji/ 河村彰星 明治大学 理工学部総合講義C

Upload: trinhkien

Post on 21-Feb-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

乱択と計算量平成28年7月5日

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

河村彰星

明治大学 理工学部総合講義C

乱択

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

与えられた多項式が零か判定

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

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

0 になるか調べる

大変(多項式時間でない)

ラク(高速・単純)

高確率で正解

乱数を利用した算法

𝑥, 𝑦, 𝑧 = (1,2,3) とか

計算量について

As soon as an Analytic Engine exists, it will necessarily

guide the future course of the science. Whenever any result

is sought by its aid, the question will arise—By what course

of calculation can these results be arrived at by the machine

in the shortest time? — Charles Babbage (1864)

解析機関(Analytic Engine)

1 5 63 42 15177

偽 真 偽真 偽真 偽真

問題とは

コレ全体のこと!

入力

問題とは 各入力に対し 答が真か偽か定めたもの(入力は文字列で表される)

問題 与えられた正整数が素数か判定したい

※このように答として真偽を求める問題を判定問題という

それ以外の値を求める問題も勿論あるが 今日は考えない

例えば

問題 与えられた命題論理式が充足可能か判定したい

問題 与えられたグラフがハミルトン閉路をもつか判定したい

算法と計算量

問題(要求)

算法1 算法2 算法3

アルゴリズム (或る問題を解く)算法とは どの入力に対しても

問題の要求する通りの答を求める計算法

1. 基本操作の回数で測る

2. 入力の大きさに関する函数として表す

(その大きさの入力のうち最悪のものを考える)

3. その函数の増大の速さ(特に多項式以内か否か)に着目

計算量の考え方(原則)

同じ問題を解くにも複数の方法があるが…

1 5 63 42 1517

偽 真 偽真 偽真 偽

入力

受理・拒否が

真偽に一致!

算法

問題

拒否

受理

受理

拒否

受理

拒否

拒否

が要求する

の動作

1. 基本操作の回数で測る

• 算法が行う基本操作の回数を数える

• 四則演算やビットの操作など?

• 機械語での命令数?

より厳密にやるには チューリング機械などを使う

次に述べるように 計算量は大雑把に見積りたいだけなので

さほど細かく考えなくてもよい

2. 入力長の函数として表す(最悪時評価)

𝑇 𝑛 = max𝑥 ≤𝑛

𝑇 𝑥

大きさ n の任意の入力に対して時間の上界を保証したい

つまり 入力 𝑥 に対する計算量を 𝑇 𝑥 と書くとき

大きさ 𝑛 の最悪の入力での計算量

で評価する 𝑥 の「大きさ」(文字で表したときの長さ)

例えば素数判定の場合

入力される正整数の桁数

von Neumann

(1953)

Gödel

(1956)

Edmonds

(1965)

Rabin

(1966)

Cobham

(1964)

Nash

(1955)

3. 増大の速さが多項式以内であるかが重要

• 「全部調べる」と指数時間かかることが多い(組合せ爆発)

• 𝑛 個のモノから幾つか取る選び方 2𝑛 通り

• 𝑛 個の数の並べ方 𝑛! 通り

• それよりも良い算法≒多項式時間≒実用的

• 多項式時間 O 𝑛𝑘 の中でも 勿論次数が低い方が良い

多項式時間算法で解ける問題の全体を 𝐏 で表す

乱択の利用

乱択算法が乱数を使うことで

効率的・単純に処理を実現できる場合がある

特に「正解が比較的たくさんあり 一つでも見つければよい」とき

問題与えられた 𝑛 個の数のうち

大きい方から𝑛

2番目以内のものを一つ見つけたい

全体を読めば最大値が O(𝑛) 時間でわかるが もっと速く?

誤る確率 2−10

算法与えられた数から出鱈目に 10 回選び

そのうち最も大きいものを出力

乱択を使わない場合 必ず𝑛

2個以上を見る必要がある

例えば(先程の「問題とは真か偽かを求めるものとする」には反する問題だけど)

乱択算法では

計算結果が入力だけでなく

乱数にも依存するわけなので……

乱数の選び方によって

● 出力が正しかったり正しくなかったりする

● 計算時間が長かったり短かったりする

しかし高い確率で正しいなら役に立つ

しかし高い確率で短い

(かかる時間の期待値が小さい)なら役に立つ

結果 𝑀 𝑥, 𝑟入力 𝑥乱数 𝑟

算法

𝑀

処理時間

まずこちらを

考えます

定義

判定問題 𝐴 が級 𝐑𝐏 に属するとは

或る多項式時間(乱択)算法 𝑀 が存在し

任意の入力 𝑥 に対し

𝐴 𝑥 = 真 𝑀 𝑥, 𝑟 は確率 >𝟏

𝟐で受理のとき

𝐴 𝑥 = 偽 𝑀 𝑥, 𝑟 は必ず拒否のとき

「> 0」にすると 𝐍𝐏

片側誤り

1

2の代りに

99

100にしたければ…

𝑀 𝑥, 𝑟1 , …, 𝑀 𝑥, 𝑟7 のどれかが受理したときに受理

乱数を独立に 7 回取って 𝑟1,…, 𝑟7

誤受理なし

誤拒否あり

randomized の R

𝐏 ⊆ 𝐑𝐏 ⊆ 𝐍𝐏

𝑀 𝑥, 𝑟𝑥𝑟

算法 𝑀受理(確実!)

拒否(多分…)

算法

𝑝 が零なら確実に「零である」と判定

非零なら次の補題により確率 >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

2ではダメ

両側誤り

2

3の代りに

99

100にしたければ…

𝑀 𝑥, 𝑟1 , …, 𝑀 𝑥, 𝑟𝑘 の多数決で受理・拒否

乱数を十分な回数取って 𝑟1,…, 𝑟𝑘

誤受理あり

誤拒否あり

bounded probabilistic

𝐑𝐏 ⊆ 𝐁𝐏𝐏𝐁𝐏𝐏 = 𝐜𝐨𝐁𝐏𝐏

𝑀 𝑥, 𝑟𝑥𝑟

算法 𝑀受理(多分…)

拒否(多分…)

定義

判定問題 𝐴 が級 𝐙𝐏𝐏 に属するとは

或る多項式時間(乱択)算法 𝑀 が存在し

任意の入力 𝑥 に対し

𝐴 𝑥 = 真 𝑀 𝑥, 𝑟 は必ず受理または「?」のとき

𝐴 𝑥 = 偽 𝑀 𝑥, 𝑟 は必ず拒否または「?」のとき

無誤り(?)

繰返せば <1

100にもできる

誤受理なし

誤拒否なし

zero-error

「?」の確率は常に <1

2

決着がつくまで繰返す → 時間の期待値 poly 𝑥

𝑀 𝑥, 𝑟𝑥𝑟

算法 𝑀受理(確実!)

拒否(確実!)

ワカリ

マセン

定理

𝐙𝐏𝐏 = 𝐑𝐏 ∩ 𝐜𝐨𝐑𝐏

証明

𝐑𝐏 ∩ 𝐜𝐨𝐑𝐏 ⊆ 𝐙𝐏𝐏

𝐙𝐏𝐏 ⊆ 𝐑𝐏 「?」の代りに拒否

𝐙𝐏𝐏 ⊆ 𝐜𝐨𝐑𝐏 「?」の代りに受理

両方の算法を実行してみて

算法

受理(確実!)

拒否(微妙…)

信用

「?」

算法

受理(微妙…)

拒否(確実!)

「?」

信用

現実に解ける𝐏 =まあ

大体

現実に解ける(真の乱数があれば)

𝐁𝐏𝐏 =どれほど

重要なのか?0 と 1 が確率ちょうど1

2で出る乱数であること

どうでもよい。例えば「1

100~

99

100の或る未知の確率で

1 が出るとわかっている」乱数があれば何とかなる。

乱数の量

乱数の各ビットがそれなりに独立であること

或る程度は重要。

前のビットから完全に決ってしまうようでは役立たず。

或る程度は重要。

O log 𝑛 ビットなら代りに決定的に全部試せる。

本当に

異なるのか?

出力入力 𝑥乱数 𝑟

算法

よくわからない

(計算量理論の未解決問題)

処理時間

そもそも

乱数って作れるの?

3141592653589793238462643383279擬似乱数

本当は決定的に作られた「擬似乱数」

真の乱数を使ったときとは結果が大きく違ってしまう場合がある?

𝑟1𝑟2𝑟3𝑟4𝑟5𝑟6𝑟7

𝑟2𝑡 𝑛

長さ 𝑡 𝑛の乱数列

𝐴 ∈ 𝐁𝐏𝐏 とすると 多項式時間算法 𝑀 が存在して

任意の入力 𝑥(長さ 𝑛)について

(𝑀 𝑥, 𝑟 ≠ 𝐴(𝑥) なる 𝑟 の割合)

○○○○×○○

𝑥1

○×○○○○×

𝑥2

×○○○○○○

𝑥3

長さ 𝑛 の文字列

○×○○○○○

𝑥2𝑛…

全部○の行(長さ 𝑛 の入力すべてで

𝑀 を正解させる乱数)

が存在!

𝐴 ∈ 𝐏/poly多項式時間算法

+少量の助言

𝐁𝐏𝐏 は 𝐏 に

かなり近い?

実は等しいかも…?誤り率 <

1

2𝑛+1

どの列でも

𝐍𝐏 𝐜𝐨𝐍𝐏

𝐁𝐏𝐏

𝐑𝐏 𝐜𝐨𝐑𝐏𝐙𝐏𝐏

𝐏多項式の零判定

まとめ

𝐁𝐏𝐏 = 𝐏未解決?

(等しいと予想する人が多い)

素数判定