Upload
ayatsuka
View
163
Download
6
Embed Size (px)
Citation preview
第一回 日曜数学会 Lightning Talk
Out of “Order”~計算量の普通は気にしない部分の話~
綾塚 祐二
第一回 日曜数学会 Lightning Talk
2015.6.20
第一回 日曜数学会 Lightning Talk
自己紹介
• 名前: 綾塚 祐二 (@ayatsuka_yuji)• 出身: 理学部情報科学科• 専門(本業): ユーザインタフェース、HCI• 専門(趣味): 大気光象• その他: SF読み、紅茶飲み
第一回 日曜数学会 Lightning Talk
計算量• 何かを計算(広い意味で)するのにどれくらい時間
(やメモリ)が要るかをざっくり表す• 問題の難しさやアルゴリズムの良し悪しを考
えるのに使う• 「ざっくり」なので、対象となるデータの数
を n として「n の二乗に比例する」「n log n に比例する」というような議論をする
• それを O(n2), O(n log n) のように書くおーだーえぬじじょう おーだーえぬろぐえぬ
第一回 日曜数学会 Lightning Talk
たとえば…
• n 個の数列から特定の数字を見つける– 端から一個一個探す → O(n)
– 二分探索 → O(log n)nが大きくなったときの時間の増え方が小さいのでこちらのほうがよい(でも、小さい or 大きい順に並んでいる必要あり)
第一回 日曜数学会 Lightning Talk
他には…
• n 個の数列を小さい順に並べ替える– バブルソート → O(n2)– シェルソート→ O(n1.25) くらい
– クイックソート→ O(n log n)– ビンソート → O(n) (範囲の判っている整数のみのときだけ使える)
第一回 日曜数学会 Lightning Talk
バブルソート: O(n2)
第一回 日曜数学会 Lightning Talk
クイックソート: O(n log n)
第一回 日曜数学会 Lightning Talk
ちょっと待て。
第一回 日曜数学会 Lightning Talk
さらっと流してるけど…
その操作の実行時間、n とかに依存しないの?
第一回 日曜数学会 Lightning Talk
暗黙の仮定 実用上、普通は気にしない
• 「定数時間 (O(1)) でできる計算や操作」のセットが暗に仮定されている
• 厳密に言うと比較や足し算は数の大きさを k として O(log k) (桁数に比例) だが、実感というか実用上の議論から乖離してしまう
• ただし、多倍長計算とかが絡むと顔を出す• そして…
第一回 日曜数学会 Lightning Talk
「計算機」の根本が変わると…
• 量子計算機が実用化されると、今までO(n2) だった計算が O(n) で済んだりしうる
• 素因数分解の計算量が下がり、暗号が解かれやすくなったりしてまずいことに
• 「『計算』って本質的にエントロピー変化するのかなぁ」とか考えだすとまた別の話に… (笑)
第一回 日曜数学会 Lightning Talk
まとめ
• 普通の「計算量」の議論には意外と暗黙の仮定が入ってる
• その「仮定」が成り立たない場合もけっこうあるので忘れてるとまずい
• 「おやつは300円以内」問題 (aka ナップサック問題)
も簡単になるかも…?
第一回 日曜数学会 Lightning Talk
頭の体操? スリープソートの計算量
• コンセプト的にはビンソートと同等なので O(n)
• OS まで含めた動作で考えると…?• CPU が n 個あると…?
1. sleep(a[i]); println(a[i]); を n まで並列実行2. 後は寝て待つ
第一回 日曜数学会 Lightning Talk
Out of “Order”~計算量の普通は気にしない部分の話~
綾塚 祐二
Fin.