takahiro_itazuriの公倍数的ブログ

本やWebを通して学習したことをまとめるブログです。最大公約数(つまり、共通部分)的なという表現と対比して、「なるべく包括的にカバーしつつ、更に+αの要素も加えられたらいいな」という意味で公倍数的ブログと名付けました。

【就プロ】計算量

はじめに

計算量とは何かを説明します。
計算量はアルゴリズムの評価尺度として用いられ、大きく時間計算量空間計算量に分けられます。

計算量とは入力のデータ量に対してどれくらいのオーダーで計算可能かということを示しています。

時間計算量

時間計算量は主に処理時間の計算量のことを指します。

空間計算量

空間計算量は主にメモリ使用量の計算量のことを指します。

オーダーについて

オーダーの記述方法

関数$f(n)$に対し、ある定数$a$と$c$が存在してすべての$n > a$に対し$f(n) \leq c \cdot g(n)$となるとき、$f(n)=O(g(n))$と表し、$g(n)$を$f(n)$のオーダーと呼ぶ。

時間計算量について処理時間が短い順に代表的なオーダーについてまとめます。

定数時間

$O(1)$で表される。処理時間はデータ量に依存しません。

対数時間

$O(\log{N})$で表される。処理を行うたびに処理対象を何割か減らすことが可能なアルゴリズム

線形時間

$O(N^2)$で表される。データ量の分だけ時間がかかります。

線形対数時間

$O(N\log{N})$で表される。

二乗時間

$O(N^2)$で表される。二重ループを含むようなアルゴリズム

指数時間

$O(k^N)$で表される。要素を取り出す時のすべての組み合わせについて調べるようなアルゴリズム

階乗時間

$O(N!)$で表される。