バイナリサーチツリータイプのデータ構造の場合、Big O表記は通常O(logn)と表記されます。ログに小文字の 'l'がある場合、これは自然対数で記述されているようにログベースe(n)を意味しますか?簡単な質問で申し訳ありませんが、暗黙の対数を区別するのにいつも問題がありました。
バイナリサーチツリータイプのデータ構造の場合、Big O表記は通常O(logn)と表記されます。ログに小文字の 'l'がある場合、これは自然対数で記述されているようにログベースe(n)を意味しますか?簡単な質問で申し訳ありませんが、暗黙の対数を区別するのにいつも問題がありました。
回答:
big-O()表記で表現すると、どちらも正しくなります。ただし、O()多項式の導出中に、バイナリ検索の場合、log 2のみが正しいです。この区別は、あなたの質問の最初の直感的なインスピレーションだったと思います。
また、私の意見の問題として、O(log 2 N)を書くことは、アルゴリズムのランタイムの派生をよりよく伝えるので、あなたの例にはより良いです。
big-O()表記では、定数係数が削除されています。ある対数の底から別の底への変換には、定数係数の乗算が含まれます。
したがって、定数係数のため、O(log N)はO(log 2 N)と同等です。
ただし、答えに簡単にlog 2 Nとタイプセットできる場合は、より教育的です。二分木検索の場合、big-O()ランタイムの導出中にlog 2 Nが導入されることは間違いありません。
結果をbig-O()表記として表現する前に、違いは非常に重要です。big-O表記を介して通信される多項式を導出する場合、この例では、O()表記を適用する前に、log 2 N 以外の対数を使用することは正しくありません。多項式を使用して最悪のランタイムをbig-O()表記で通信するとすぐに、どの対数を使用してもかまいません。
log_2 n
しているΘ(log_a n)
任意のベースのためa
、私は必ず私がベース2を使用すると、「より正確」であるか見ないんだので、。
Big O表記は、対数の底の影響を受けません。これは、異なる底のすべての対数が定数因数によって関連付けられるため、O(ln n)
と同等O(log n)
です。
log_2 x
とは無関係に、任意のベースのlog_b x
定数係数によって異なります。c(b)
b
x
log_2 n
、log_2 n
どこにでも行って置き換えるだけで、どこにでもlog_pi 2 * log_2 n / log_pi 2
ある分析になってしまいlog_pi 2 * log_pi n
ます。今、私の分析はの観点からlog_pi n
です。
Big-O表記は通常、漸近的に最も高い次数のみを示すように記述されるためn
、定数の係数は失われます。異なる対数の底は定数係数に相当するため、不必要です。
そうは言っても、私はおそらくログベース2を想定しています。
はい、big-O表記について話すとき、ベースは関係ありません。ただし、実際の検索問題に直面した場合、計算上は問題になります。
ツリー構造に関する直感を開発する場合、それがツリーの高さ、つまりnノードのバイナリツリーでは、ツリーであるため、バイナリ検索ツリーはO(n log n)時間で検索できることを理解しておくと役立ちます。深さはO(n log n)(基数2)です。各ノードに3つの子がある場合でも、ツリーはO(n log n)時間で検索できますが、底が3の対数です。計算上、各ノードが持つ子の数はパフォーマンスに大きな影響を与える可能性があります(例:リンクテキストを参照)
楽しい!
ポール
技術的にはベースは重要ではありませんが、通常はベース2と考えることができます。
まず、関数f(n)がO(g(n))であることの意味を理解する必要があります。
正式な定義は次のとおりです。 *関数f(n)はO(g(n))であると言われます| f(n)| <= C * | g(n)| n> kのときはいつでも、Cとkは定数です。*
したがって、f(n)= nのログベースa、ここでa> 1およびg(n)= nのログベースb、ここでb> 1
注:これは、値aおよびbが1より大きい任意の値である可能性があることを意味します。たとえば、a = 100およびb = 3です。
これで、次の結果が得られます。<= C * | nのログベースb | n> kのとき
k = 0を選択し、C = bのログベースaを選択します。
ここで、次のように私たちの方程式ルックス: | n個のログベースA | <= bのログベースa * | nのログベースb | n> 0のとき
右側に注意してください。次の方程式を操作できます。= bの対数底a * | nの対数底b | = | nのログベースb | * bの対数底a = | bの対数底a ^(nの対数底b)| = | nのログベースa |
ここで、次のように私たちの方程式ルックス: | n個のログベースA | <= | 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
log n
彼は自然対数を意味します。2.コンピュータサイエンティストが書くとき、log n
彼は2を表します。3.エンジニアが書くとき、log n
彼は10を意味します。これらは通常真実です。