計算量の基本
algorithmfoundationundergraduatelecture
1導入
この講義では、入力の規模に応じた実行時間と記憶領域の増加を評価する方法を説明する。特定の計算機で計測した秒数だけでなく、入力が大規模になったときの増加率を比較することで、アルゴリズムの性質を分析できる。
2入力サイズと計算資源
入力サイズ n とは、問題の入力規模を表す非負整数である。一次元配列では要素数、二次元配列では行数と列数の組み合わせなど、問題に適した尺度を選択する。したがって、すべての入力を単一の n で表現できるとは限らない。
時間計算量とは、入力サイズに対して基本操作の実行回数がどのように増加するかを表す関数である。空間計算量とは、実行中に必要な記憶領域の増加を表す関数である。入力自体を除外した追加領域だけを評価する場合は、補助空間計算量と呼ぶ。
3入力ごとの差異
同一のサイズ n でも、入力内容によって実行回数が異なることがある。
- 最良計算量は、サイズ n の入力における最小の資源使用量である。
- 最悪計算量は、サイズ n の入力における最大の資源使用量である。
- 平均計算量は、サイズ n の入力集合に確率分布を指定したときの資源使用量の期待値である。
平均計算量は確率分布を明示しなければ定義できない。また、最良・平均・最悪という入力の区分と、次節の O・\Theta・\Omega という関数の漸近的関係は別の概念である。
4漸近記法
f(n) と g(n) を十分大きな n で非負となる関数とする。
- f(n)=O(g(n)) とは、ある正の定数 c,n_0 が存在し、すべての n\ge n_0 で f(n)\le c g(n) が成立することである。これは漸近的上界を表す。
- f(n)=\Omega(g(n)) とは、ある正の定数 c,n_0 が存在し、すべての n\ge n_0 で c g(n)\le f(n) が成立することである。これは漸近的下界を表す。
- f(n)=\Theta(g(n)) とは、f(n)=O(g(n)) と f(n)=\Omega(g(n)) の双方が成立することである。これは定数倍を除いて漸近的増加率が一致することを表す。
したがって、O は上界であり、常に増加率の一致を意味するわけではない。たとえば 3n+5=O(n^2) も正しいが、より精密な評価は 3n+5=\Theta(n) である。
5具体例
T(n)=3n+5 とする。n\ge 1 では
3n\le T(n)\le 8n
が成立するため、T(n)=\Theta(n) である。定数項と定数倍は漸近的増加率を変更しない。
長さ n の配列を先頭から検査する線形探索では、先頭で一致する最良時間は \Theta(1)、末尾で一致するか不一致となる最悪時間は \Theta(n) である。一方、整列済み配列の二分探索は、各比較で候補区間を半分に縮小する。k 回後の候補数は高々 n/2^k であるため、空配列も含めた最悪時間は \Theta(\log(n+1)) となる。
入力を参照するだけで一定個数の変数を使用するアルゴリズムの補助空間は \Theta(1) である。長さ n の別配列を確保するなら、補助空間は \Theta(n) となる。時間と空間は独立に評価する。
6後続講義への接続
次の再帰講義では、再帰呼出しの回数と最大深度から時間・補助空間計算量を導出する。その後の整列講義と探索講義では、適用条件、正当性、計算量を併せて比較する。
data/lecture/information/algorithm/foundation/recursion-basics.lecture.n.md
7要約
- 入力サイズは、問題に適した尺度によって定義する。
- 時間計算量と空間計算量は、異なる計算資源を評価する。
- 最良・平均・最悪は入力の区分であり、O・\Theta・\Omega は関数間の漸近的関係である。
- O は上界、\Omega は下界、\Theta は同一の関数による上界と下界を表す。