web-dev-qa-db-ja.com

Big O(logn) log base e?

データ構造のバイナリ検索ツリータイプの場合、Big O表記は通常O(logn)と表記されます。 logに小文字の 'l'がある場合、これは自然対数で記述されているように対数底e(n)を意味しますか?簡単な質問で申し訳ありませんが、私は常に異なる暗示対数を区別するのに苦労していました。

84

Big-O()表記で表現されると、両方とも正しいです。ただし、O()多項式のderivationの場合、binary検索の場合、ログのみ2 正しい。この区別は、あなたの質問の最初の直感的なインスピレーションだったと思います。

また、私の意見の問題として、O(log2 N)は、アルゴリズムの実行時の派生をより適切に伝えるため、あなたの例ではより良いです。

Big-O()表記では、定数因子が削除されます。ある対数ベースから別のベースに変換するには、定数係数を乗算する必要があります。

したがって、O(log N)はO(log2 N)一定の要因による。

ただし、ログを簡単にタイプセットできる場合2 あなたの答えでは、そうすることは教育的です。バイナリツリー検索の場合、そのログは正しい2 Nは、big-O()ランタイムの派生中に導入されます。

結果をbig-O()表記として表現する前に、違いは非常に重要です。 big-O表記を介して通信する多項式を導出する場合、この例ではlog以外の対数を使用するのは正しくありません。2 N、O()表記を適用する前。多項式がbig-O()表記を介してワーストケースランタイムを通信するために使用されるとすぐに、どの対数が使用されるかは関係ありません。

66
Heath Hunnicutt

Big O表記は対数ベースの影響を受けません。これは、異なるベースのすべての対数が 定数係数に関連する であるため、O(ln n)O(log n)と同等です。

enter image description here

71
Cade Roux

通常、big-O表記はnの漸近的に最も高い次数のみを示すように記述されるため、定数の基数は低下します。異なる対数底は定数係数と同等であるため、不要です。

そうは言っても、おそらくログベース2を想定しています。

8
Daniel Pryden

両方とも正しいです。これについて考える

log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))
4
cartonn

まず、関数f(n)がO(g(n))になることの意味を理解する必要があります。

正式な定義は次のとおりです:*関数f(n)はO(g(n)) iff | f(n)| <= C * | g(n)| n> kの場合、Cおよびkは定数です。*

だからlet f(n) = nの対数ベースa、1> and g(n) = nの対数ベースb、b> 1

注:これは、値aおよびbが1より大きい任意の値である可能性があることを意味します。たとえば、a = 100およびb = 3

次のようになります:nの対数基底aはO(nの対数基底b)と言われます| nの対数基底a | <= C * | nの対数ベースb | n> kの場合

K = 0、C = bの対数ベースaを選択します。

今、我々の方程式は次のようになります:| log base a of n | <= bの対数ベースa * | nの対数ベースb | n> 0の場合

右側に注目してください。方程式を操作できます。= bの対数ベースa * | nの対数ベースb | = | nの対数ベースb | * bの対数ベースa = bの対数ベースa ^(nの対数ベースb)| = | n |の対数ベースa |

今、我々の方程式は次のようになります:| log base a of n | <= | nの対数ベースa | n> 0の場合

式は、n、b、またはaの値に関係なく、a、b> 1およびn> 0の制限を除き、常に真です。したがって、nの対数ベースaはO(nの対数ベースb)であり、a、bは重要ではないため、単純に省略することができます。

YouTubeビデオはこちらで見ることができます: https://www.youtube.com/watch?v=MY-VCrQCaVw

こちらの記事を読むことができます: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca

1
tempmail

技術的にはベースは重要ではありませんが、通常はベース2と考えることができます。

1
Tim Sylvester

はい、big-O表記について説明する場合、ベースは関係ありません。ただし、計算上、実際の検索問題に直面したときは重要です。

ツリー構造に関する直観を開発するとき、バイナリ検索ツリーはO(n log n)時間で検索できることを理解することは役立ちます。これは、ツリーの高さです。深さはO(n log n)(基数2)です。各ノードに3つの子がある場合、ツリーはO(n log n)時間で検索できますが、底は3の対数です。計算上、各ノードの子の数はパフォーマンスに大きな影響を与える可能性があります(例: link text を参照)

楽しい!

ポール

1
Paul