アルゴリズムの計算量 補足資料 「オーダ」ってのは何なのか 講義「アルゴリズムとデータ構造」配付資料: 井上 康介 例えば,ソート法を計算量に基づいて分類するのなら, 1 計算量の考え方の基本 直接選択法,バブル・ソート,シェーカー・ソート,基本挿入 法はそれぞれ,実際には微妙に計算時間が異なるものの, (時間) 計算量は,処理にかかる時間を「繰り返し回数」 n に対する計算時間の増加の仕方は二次関数 an2 + bn + c に基づいて評価する.手順一つ一つを実施するためにコ で表現できるので,すべて同じクラス O(n2 ) に分類でき ンピュータは一定の時間を使うものであり,全体的にか る.一方で,シェル・ソートは O(n1.25 ) という特殊なク かる時間はその繰り返し回数に比例するからである.例 ラスであり,クイック・ソート,ヒープ・ソート,マージ・ えば課題 2 の問題 (n 個の点座標に対して,最短の 2 点間 ソートはすべて O(n log n) という,ソート法の中では最 距離を求める) では,n 個のデータに対して繰り返し回数 速のクラスに所属する (教科書 p.119). が n2 /2 − n/2 である.この繰り返し回数が,n が巨大に なったときにどのような傾向を持って増えていくか (つま り計算時間がどのような傾向を伴ってのびていくか) がこ 要点 こでの関心である.これを,計算量の漸近的な振る舞い アルゴリズムの計算量は,計算時間がど のような種類の関数 (例えば 2 次関数か, 3 次関数か,あるいは指数関数か,対数関 数か) に従って増えるかによって分類さ れる.関数の種類を表現する方法がビッ グ・オー表記である. オーダとは,計算量の種別 (あるいは分 類) を示すものである. (asymptotic behavior) と呼ぶ. しかし,ここで問題となるのは, 「具体的な計算時間 (例 えば 530 [ms] とか) は,用いるコンピュータや OS に応じ ていかようにでも変動しうる」ということである.すなわ ち,細かい数字をいくら気にしても仕方がないのである. ではどう考えるか? 2 計算量のクラス分け 具体的な計算時間そのものを評価するのではなく,n が 増加したときの計算時間の増加傾向を「どういう種類の 関数に従って増えるか」で評価しようとするのがビッグ・ オー表記 (big-oh notation) である. n に関する 2 つの関数 f (n),g(n) に対して, f (n) ≤ c · g(n) (n ≥ n0 ) を満足する定数 c,n0 が存在するとき, 「f (n) は g(n) の オーダ (order) である」または「f (n) はオーダ g(n) であ る」と表現され, f (n) = O(g(n)) と書く.この意味は, 「n ≥ n0 において,f (n) は多くとも g(n) の c 倍 (定数倍) にしかならない」ということである. このような表現にして,この g(n) をできるだけ簡単な 関数にしてしまうことで,O 表記を使ってアルゴリズムの 計算量を分類することができる. 1
© Copyright 2024 ExpyDoc