computational complexityaoba.cc.saga-u.ac.jp/.../text/computationalcomplexity.pdfcomputational...

21
計算量 Computational Complexity 計算機アルゴリズム特論:2017年度 只木進一

Upload: others

Post on 05-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

計算量Computational Complexity計算機アルゴリズム特論:2017年度只木進一

Page 2: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

計算量

アルゴリズムの良さをはかる尺度計算時間、記憶領域、理解しやすさ、プログラムへの変換の容易さ、等々

時間計算量(Time Complexity)計算に要する時間講義ではこちらを主に議論

領域計算量(Space Complexity)計算に要する記憶領域

2

Page 3: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

計算量

稼働させる計算機に依存CPU、メモリ、ディスクに依存仮想的計算機で比較

入力サイズに依存入力データのサイズ𝑛𝑛の関数として評価漸近的計算量に着目:𝑛𝑛→大のときの挙動

3

Page 4: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

入力サイズが同じでも差探索データがリストの先頭なら速いが、末尾なら遅い

平均値、最悪値(最も悪い場合の値)で議論

どの部分に注目するか律速過程を見極める

4

Page 5: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

例:多項式の計算

計算手順で演算回数が異なる係数𝑎𝑎𝑖𝑖と変数𝑥𝑥を与えて、関数の値𝑓𝑓(𝑥𝑥)を求めるのに必要な計算𝑥𝑥のべきを求めるための乗算4回係数と𝑥𝑥のべきとの乗算4回加算4回合計12回

( ) 4 3 24 3 2 1 0x a x a x af x a x a= + + + +

5

Page 6: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

double polynomial(double x, double a[])int n=a.length;double v=a[0];double xx=x.:for ( int i=1; i<n; i++)

v += xx * a[i];xx *= x;

return v;

6

Page 7: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

Hornerの方法

乗算4回+加算4回

( ) ( )( )( )( )4 3 2 1 0x a x a xf a x a x a= + + + +

7

Page 8: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

double polynomial(double x, double a[])int n=a.length;double v=a[n-1];for ( int i=1; i<n; i++)

v += v*x + a[i];return v;

8

Page 9: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

例:多項式の計算:一般化

律儀な方法𝑛𝑛次の項: 2𝑛𝑛回の乗算𝑛𝑛回の加算

( ) ( ) ( )0

1 52 2

2 2

n

k

n nk nP

n nn n

=

+ += + = + =∑

9

Page 10: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

Hornerの方法一つの括弧を閉じる:乗算と加算が各1回

( )02 2

n

kP n n

=

= =∑

10

Page 11: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

例:逐次探索

リストの長さ𝑁𝑁要素中の一つを探索

位置𝑖𝑖にある場合存在確率1/𝑁𝑁

比較回数𝑖𝑖 + 1

10 15 30 50 91817037

1

1 12

N

k

NkN =

+=∑

11

Page 12: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

計算量の評価

データのサイズ𝑛𝑛が大きいときに、計算量や計算時間が 𝑛𝑛に対してどのように増大するか定数倍にはあまり関心はない

周辺の演算の影響

𝑛𝑛に対して最も速く増大する項に関心がある𝑛𝑛が大きくなった時に最も重要

12

Page 13: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

オーダー記法

二つの関数𝑓𝑓 𝑛𝑛 と𝑔𝑔 𝑛𝑛 を考える

このとき

𝑛𝑛が大きいとき、𝑓𝑓 𝑛𝑛 は𝑔𝑔 𝑛𝑛 より増加が速くない通常は、𝑔𝑔 𝑛𝑛 は簡単な関数形

( )( )

0 limn g n

cf n

∞→≤ ≤

( ) ( )( )f n O g n∈

13

Page 14: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

他のオーダー記法記法 定義

𝑓𝑓 𝑛𝑛 ∈ 𝑂𝑂(𝑔𝑔 𝑛𝑛 )lim𝑛𝑛→∞

𝑓𝑓(𝑛𝑛)𝑔𝑔(𝑛𝑛)

≤ 𝑐𝑐

𝑓𝑓 𝑛𝑛 ∈ 𝑜𝑜(𝑔𝑔 𝑛𝑛 )lim𝑛𝑛→∞

𝑓𝑓(𝑛𝑛)𝑔𝑔(𝑛𝑛)

= 0

𝑓𝑓 𝑛𝑛 ∈ Ω(𝑔𝑔 𝑛𝑛 )lim𝑛𝑛→∞

𝑓𝑓(𝑛𝑛)𝑔𝑔(𝑛𝑛)

≥ 𝑐𝑐

𝑓𝑓 𝑛𝑛 ∈ ω(𝑔𝑔 𝑛𝑛 )lim𝑛𝑛→∞

𝑓𝑓(𝑛𝑛)𝑔𝑔(𝑛𝑛)

= ∞

𝑓𝑓 𝑛𝑛 ∈ Θ(𝑔𝑔 𝑛𝑛 ) 𝑓𝑓 𝑛𝑛 = 𝑂𝑂 𝑔𝑔 𝑛𝑛 ∧𝑓𝑓 𝑛𝑛 = Ω(𝑔𝑔 𝑛𝑛 )

14

Page 15: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

( )3O n

( )3nΘ

( )3nΩ

( )3o n ( )3nω

3 23 4n n+22n n+

4 23n n−

3 4n n−

オーダーの関係15

Page 16: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

例:多項式

律儀な方法::𝑂𝑂(𝑛𝑛)

16

Page 17: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

Insertion Sort基本的考え方

大きさ10の配列の先頭5個は整列済みとする

6番目の要素”D”を適切な位置に挿入する順に左に移動し、より小さい要素の手前に挿入

B M LRXKDTHE

B H LRXKTMED

17

Page 18: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

Insertion Sort基本的考え方:詳細

配列𝑑𝑑0番から𝑖𝑖 − 1番までは整列済み𝑗𝑗 = 𝑖𝑖から𝑗𝑗を𝑑𝑑𝑗𝑗 < 𝑑𝑑𝑗𝑗−1である限り一つずつ下げ、𝑑𝑑𝑗𝑗と𝑑𝑑𝑗𝑗−1を入れ替える

18

Page 19: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

Insertion Sortアルゴリズム

for ( 𝑖𝑖 = 1; 𝑖𝑖 < 𝑛𝑛 ; 𝑖𝑖 + +) for ( 𝑗𝑗 = 𝑖𝑖;𝑗𝑗 > 0 && 𝑑𝑑_𝑗𝑗 < 𝑑𝑑_𝑗𝑗 − 1 ; 𝑗𝑗 − −)

exch (𝑗𝑗,𝑗𝑗 − 1)

19

Page 20: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

内側のループの要素入替回数(最大)1回目:12回目:2最後:𝑛𝑛 − 1

要素入替回数(最大)1

1

( 1)2

n

k

n nk−

=

−=∑

2( )O n

20

Page 21: Computational Complexityaoba.cc.saga-u.ac.jp/.../text/ComputationalComplexity.pdfComputational Complexity 計算機アルゴリズム特論: 2017年度 只木進一 計算量 アルゴリズムの良さをはかる尺度

21