これはデータ構造およびすべての講義/ TA講義における私の最初のコースであり、O(log(n))
について説明します。これはおそらく愚かな質問ですが、誰かが私にそれが何を意味するかを正確に説明できるかどうか私は感謝します!?
これは、問題の物(通常は実行時間)がその入力サイズの対数と一致する方法でスケーリングすることを意味します。
Big-O表記 は、exact方程式ではなく、boundを意味します。たとえば、次の関数の出力はすべてO(n)です。
f(x) = 3x
g(x) = 0.5x
m(x) = x + 5
Xを増やすと、それらの出力はすべて直線的に増加するため、f(n)
とg(n)
の比率が6:1の場合、f(10*n)
およびg(10*n)
など。
O(n)
またはO(log n)
のどちらが優れているかについては、次を考慮してください:n = 1000
の場合、log n = 3
(log-base-10の場合)。アルゴリズムを実行するのに1000秒と3秒のどちらを使いますか?
サイズn
の入力の場合、O(n)
のアルゴリズムはn
に比例するステップを実行しますが、O(log(n))
の別のアルゴリズムはおよそlog(n)
のステップを実行します。
明らかにlog(n)
はn
よりも小さいため、複雑さのアルゴリズムO(log(n))
の方が優れています。ずっと速くなるので。
簡単に言えば、O(log n)はO(n)よりも優れています
では、正確にO(log n)とは何ですか?
一般に、大きなO表記を参照する場合、log nは2を底とする対数を参照します(同じ方法ln は底e対数を表します)。この底2の対数は、指数関数の逆数です。指数関数growsは非常に迅速であり、逆関数は正反対のことを直観的に推測できます。つまり、grows非常にゆっくり。
例えば
x =O(log n)
Nを次のように表すことができます
n =2バツ
そして
210 = 1024→lg(1024)= 10
220 = 1,048,576→lg(1048576)= 20
230 = 1,073,741,824→lg(1073741824)= 30
nの大きな増分は、log(n)の非常に小さな増加にのみつながります
一方、O(n)の複雑さの場合、線形関係が得られます
ログの要因2nはいつでもnの係数を引き継ぐ必要があります。
これをさらに固めるために、私は トーマス・コーメンによるロック解除されたアルゴリズム の例に出会いました
2台のコンピューターを検討してください:AとB
両方のコンピューターには、配列の値を検索するタスクがあります。配列には、検索対象の要素が1,000万個あるとします。
コンピューターA-このコンピューターは1秒あたり10億命令を実行でき、O(n)の複雑さのアルゴリズムを使用して上記のタスクを実行することが期待されます。このコンピューターがタスクを完了するのにかかる時間を概算できます
n /(指示p秒)→107/ 10 ^ 9 = 0.01秒
コンピューターB-このコンピューターははるかに低速で、1秒あたり1,000万命令しか実行できません。コンピューターBは、O(log n)の複雑さを持つアルゴリズムを使用して上記のタスクを実行することが期待されています。このコンピューターがタスクを完了するのにかかる時間を概算できます
log(n)/(命令p秒)→log(107)/ 107 = 0.000002325349
この図では、コンピューターAがコンピューターBよりもはるかに優れているにもかかわらず、Bが使用するアルゴリズムのために、タスクをより迅速に完了することがわかります。
O(log(n))がO(n)よりずっと速い理由
http://en.wikipedia.org/wiki/Big_oh
O(log n)の方が優れています。
O(logn)は、アルゴリズムの最大実行時間が入力サイズの対数に比例することを意味します。 O(n)は、アルゴリズムの最大実行時間が入力サイズに比例することを意味します。
基本的に、O(something)はアルゴリズムの命令数(アトミック命令)の上限です。したがって、O(logn)はO(n)よりも厳密であり、アルゴリズム分析の観点からも優れています。しかし、O(logn)であるすべてのアルゴリズムもO(n)ですが、逆方向ではありません...
正式な定義:
g(x)= O(f(x)) <=> x> x0ごとにx0と定数Cがあり、| g(x)| <= C | f(x )|。
したがって、問題PのアルゴリズムAがその複雑度O(f(n))である場合、アルゴリズムが実行するステップ数は、nが通常はf(n)に漸近的に等しいか、より少ないと言うことができます。入力サイズ。 (nは何でもかまいません)
さらに読むには:http://en.wikipedia.org/wiki/Big_O_notation。