計算量とオーダー
計算量
●アルゴリズムが計算を行うときに必要になる、
計算資源の量
●計算にかかる時間を時間計算量
●計算に必要な記憶領域の量を空間計算量
●普通計算量という時は時間計算量を指す
計算量
●計算量は入力に依存する
●例)一つの数を取って、その素因数を答える問題
●1桁の数より100桁の数の方が時間がかかりそう
●計算量 を入力の大きさ の函数  で表すT n f (n)
1 2 3 4 5 6 7 8 9 10
0
50
100
150
200
250
計算量
オーダー
●アルゴリズム同士を比較したい
●どちらが良いアルゴリズムか?
●入力サイズが大きいときの違いで比べたい
●入力が小さい時はどちらにせよ一瞬で終わる
●細かな違いを無視して大まかな比較をしたい
●オーダーの考え方を用いる
オーダー
●ある定数 があって、  と  の間に
という関係が成り立つとき、
と書く。
f (n)k g(n)
f (n)≤k×g(n)
f (n)=O(g(n))またはf (n)∈O(g(n))
オーダー
●イメージ
1 2 3 4 5 6 7 8 9 10
0
50
100
150
200
250
300
350
f(n)
g(n)
k*g(n)
オーダー
●代表的なオーダー
●   定数時間
●     対数時間
●   線形時間
●   多項式時間
●   指数時間
●   階乗時間
O(1)
O(log(n))
O(n)
O(nc
)
O(cn
)
O(n!)
オーダー
●競技プログラミングでは大まかな計算時間を見
積もるために使うことが多い
●1秒間にできる処理は多くて1億回程度
●処理の内容により変わってくる
●O記号の中に入っている変数に、具体的な数値
を入れてみて大丈夫そうかを確かめる

計算量とオーダー