AtCoder 計算量について学ぶ

1週間ぶりに落ち着いた時間ができたので、
久しく放置していた計算量について学びました。

参考:https://qiita.com/drken/items/18b3b3db5735241465ef


AtCoderで使える知識となるよう、メモします。

扱えるループの回数と使用目安

1秒間で扱えるループの回数の目安が、
10**7~10**8(シンプルなら10**9)ということです。

ABC問題の実行時間は2秒程度が多いので、
おおむね上記と同じ10**7~10**9あたりが限界と覚えておきます。

また、上記を踏まえたnの数値は、

n!...n=10程度
2**n...n=20程度
2**n/2...n=30程度
n**4...n=100程度
n**3...n=300程度
n**2...n=10**3~4程度
nlogn...n=10**5~6程度
n...n=10**7~8程度
logn...n=10**9~12程度

色々なアルゴリズムのオーダー

・線形探索...O(n)
・偶数出力...O(n)
・かけ算九九...O(n**2)
・2頂点間最小距離...O(n**2) →分割統治法によりnlognへ
・行列乗算...O(n**3)
・二進法展開...O(logn)
・ナベアツ...O(logn)
・二分探索...O(logn)
・マージソート...O(nlogn)
・素数判定...O(sqrt(n))
・bit全探索...O(n2**n)
・順列全探索...O(nn!)
・ループ内で素数判定などの重い処理...O(n sqrt(n))
・エラトステネスの篩...O(nlognlogn)

自分の実装しようとしているプログラムがどの程度のオーダーになりそうかを、
前もって意識できるように考えていきたいです。

以上。