out of "order" ~計算量の普通は気にしない部分の話

14
第一回 日曜数学会 Lightning Talk Out of “Order” ~計算量の普通は気にしない部分の話~ 綾塚 祐二 第一回 日曜数学会 Lightning Talk 2015.6.20

Upload: ayatsuka

Post on 13-Aug-2015

164 views

Category:

Science


6 download

TRANSCRIPT

Page 1: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

Out of “Order”~計算量の普通は気にしない部分の話~

綾塚 祐二

第一回 日曜数学会 Lightning Talk

2015.6.20

Page 2: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

自己紹介

• 名前: 綾塚 祐二 (@ayatsuka_yuji)• 出身: 理学部情報科学科• 専門(本業): ユーザインタフェース、HCI• 専門(趣味): 大気光象• その他: SF読み、紅茶飲み

Page 3: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

計算量• 何かを計算(広い意味で)するのにどれくらい時間

(やメモリ)が要るかをざっくり表す• 問題の難しさやアルゴリズムの良し悪しを考

えるのに使う• 「ざっくり」なので、対象となるデータの数

を n として「n の二乗に比例する」「n log n に比例する」というような議論をする

• それを O(n2), O(n log n) のように書くおーだーえぬじじょう おーだーえぬろぐえぬ

Page 4: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

たとえば…

• n 個の数列から特定の数字を見つける– 端から一個一個探す → O(n)

– 二分探索 → O(log n)nが大きくなったときの時間の増え方が小さいのでこちらのほうがよい(でも、小さい or 大きい順に並んでいる必要あり)

Page 5: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

他には…

• n 個の数列を小さい順に並べ替える– バブルソート → O(n2)– シェルソート→ O(n1.25) くらい

– クイックソート→ O(n log n)– ビンソート → O(n) (範囲の判っている整数のみのときだけ使える)

Page 6: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

バブルソート: O(n2)

Page 7: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

クイックソート: O(n log n)

Page 8: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

ちょっと待て。

Page 9: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

さらっと流してるけど…

その操作の実行時間、n とかに依存しないの?

Page 10: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

暗黙の仮定 実用上、普通は気にしない

• 「定数時間 (O(1)) でできる計算や操作」のセットが暗に仮定されている

• 厳密に言うと比較や足し算は数の大きさを k として O(log k) (桁数に比例) だが、実感というか実用上の議論から乖離してしまう

• ただし、多倍長計算とかが絡むと顔を出す• そして…

Page 11: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

「計算機」の根本が変わると…

• 量子計算機が実用化されると、今までO(n2) だった計算が O(n) で済んだりしうる

• 素因数分解の計算量が下がり、暗号が解かれやすくなったりしてまずいことに

• 「『計算』って本質的にエントロピー変化するのかなぁ」とか考えだすとまた別の話に… (笑)

Page 12: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

まとめ

• 普通の「計算量」の議論には意外と暗黙の仮定が入ってる

• その「仮定」が成り立たない場合もけっこうあるので忘れてるとまずい

• 「おやつは300円以内」問題 (aka ナップサック問題)

も簡単になるかも…?

Page 13: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

頭の体操? スリープソートの計算量

• コンセプト的にはビンソートと同等なので O(n)

• OS まで含めた動作で考えると…?• CPU が n 個あると…?

1. sleep(a[i]); println(a[i]); を n まで並列実行2. 後は寝て待つ

Page 14: Out of "Order" ~計算量の普通は気にしない部分の話

第一回 日曜数学会 Lightning Talk

Out of “Order”~計算量の普通は気にしない部分の話~

綾塚 祐二

Fin.