時間の複雑さO(n^2)
またはO (n(logn)^2)
の方が優れていますか?
それを単純化すると、
O(n) vs O((logn)^2)
およびlogn
<n
ですが、logn^2
?
nは(log n)よりも小さい2n 0.49未満の値の場合...
したがって、一般的には(log n)2は大きい方に適していますn ...
しかし、これらの[〜#〜] o [〜#〜](something)-notationは常に一定の要素を除外しているため、あなたの場合、どちらのアルゴリズムが優れているか確認してください...
これがグラフです:
(青い線はnで、緑の線は(log n)です)2)
nの小さな値の違いはそれほど大きくなく、Big-O表記に含まれていない定数係数によって簡単に小さくなります。
ただし、大規模なn、(log n)2ハンドダウン:
各定数についてk
漸近的にlog(n)^k < n
。
証明は簡単で、方程式の両側でログを記録すると、次のようになります。
_log(log(n))*k < log(n)
_
漸近的にはこれが正しいことは容易に理解できます。
セマンティックノート:log(n)^k == log(n) * log(n) * ... * log(n) (k times)
とここではlog(log(log(...log(n)))..) (k times)
を想定しています。
O(n^2) vs. O(n*log(n)^2)
<=> O(n) vs. O(log(n)^2) (divide by n)
<=> O(sqrt(n)) vs. O(log(n)) (square root)
<=> polynomial vs. logarithmic
対数勝。
(logn)^2
も<n
です。
例を挙げましょう:
n = 5
log n = 0.6989....
(log n)^ 2 = 0.4885..
(long n)^ 2がさらに削減されていることがわかります。
あなたがnのより大きな値を取る場合でも、例えば1億
log n = 9
(log n)^ 2 = 81
これはn
よりはるかに少ないです。
(Log n)^ 2は、変数mをexp mで変更する場合、m ^ 2がexp mよりも優れているため、より優れています。