回答:
いくつかのグラフを描画するだけで、うまくいきます。Wolfram Alphaは、これらの種類の調査に最適なリソースです。
このリンクによって生成されます。グラフでは、log(x)は自然対数であることに注意してください。これが、1つのグラフの方程式が少しおかしいように見える理由です。
多くのアルゴリズムでは、定数が異なる場合があり、データサイズが小さいほど定数が速くなったり遅くなったりすることがあり、アルゴリズムの複雑さによって順序付けされません。
とはいえ、超大規模なデータサイズのみを考慮すると、どちらが最終的に勝利し、その後、O(n^f)
より高速であるO(n/log n)
ため0 < f < 1
。
アルゴリズムの複雑さの大部分は、最終的に高速であるアルゴリズムを決定することである従ってことを知っているO(n^f)
よりも高速であるO(n/log n)
ため0 < f < 1
、しばしば十分です。
一般的な規則は、anyのlog n
乗算(または除算)に比べて、乗算(または除算)が最終的に無視できるn^f
ことf > 0
です。
これをより明確に示すために、nが増加するとどうなるかを考えてみましょう。
n n / log n n^(1/2)
2 n/ 1 ?
4 n/ 2 n/ 2
8 n/ 3 ?
16 n/ 4 n/ 4
64 n/ 6 n/ 8
256 n/ 8 n/16
1024 n/10 n/32
どちらがより急速に減少するかに注目してください。これは、あるn^f
列。
f
1に近かったとしても、n^f
列の開始は遅くなりますが、nが2倍になると、分母の変化率は速くなりn/log n
ますが、列の分母は一定の割合で変化するように見えます。
特定のケースをグラフにプロットしてみましょう
ソース:Wolfram Alpha
私が選択したO(n^k)
、このようなk
非常に1に近い(です0.9
)。最初O(n^k)
は遅くなるように定数も選択しました。ただし、最終的には「勝つ」ことに注意してくださいO(n/log n)
。
実行時間を比較するときは、nの大きな値を使用して比較することが常に役立ちます。私にとって、これはどの機能が遅いかについての直感を構築するのに役立ちます
あなたの場合、n = 10 ^ 10とa = .5を考えてください
O(n/logn) = O(10^10/10) = O(10^9)
O(n^1/2) = O(10^10^.5) = O(10^5)
したがって、O(n ^ a)はO(n / logn)よりも高速です。0<a <1の場合、1つの値しか使用していませんが、複数の値を使用して関数に関する直感を構築できます