この表のように平均時間の複雑さについて議論するとき。バイナリ検索ツリーでBig Oのログのベースは何ですか
O(ログn)は
は、私はそれが2であると仮定しますが確認したかったんです。また、これらのデータ構造では常に2ですか? O記法で
この表のように平均時間の複雑さについて議論するとき。バイナリ検索ツリーでBig Oのログのベースは何ですか
O(ログn)は
は、私はそれが2であると仮定しますが確認したかったんです。また、これらのデータ構造では常に2ですか? O記法で
定数問題ではありません。たとえば、log2(n)とlog10(n)は定数でしか異なるので、O表記ではlog(n)のみが表示されます。
ローマのCortesはもう一方の答えを得ました。 a
とb
が1より大きい整数のときには、log_a(n) = Theta(log_b(n))
を示すのは簡単だから、漸近的複雑さの問題です。
しかし、log
がどこから来るのかを検討することはまだ有益だと思います。まずは、その動機づけに関連する数字と理解があります。
バイナリ検索ツリーは、値の検索を高速化するように構成されています。すべてのノードには、最大で2つのサブツリーがあり、左側のサブツリーのすべての値は、親の値よりも小さく、右側のサブツリーのすべての値は、親の値よりも大きくなります。バランスのとれたバイナリ検索ツリーを検索するとき(バランスがとれていることが重要です)、ターゲット値を検索する残りのノードの数を実質的に半分にする(または半分にするのに十分に近づける)ことができます。これは、実行時の再帰関係T(n) = T(n/2) + c
を使用して表現できます。これは言う:
c
)を加えた時間にターゲットを比較するから定数項で与えられる
サブツリーですが、決して両方(
T(n/2)
)。T(0) = a
は、いくつかの定数a
のために、我々はT
のいくつかの値を書き出すことができますことを合理的に仮定し
:
n T(n)
- ----
0 a
1 T(1/2) + c = a + c
2 T(2/2) + c = a + c + c = a + 2c
4 T(4/2) + c = a + 2c + c = a + 3c
8 T(8/2) + c = a + 3c + c = a + 4c
...
2^k T(2^k/2) + c = a + kc + c = a + (k+1)c
k = log_2(n)
をしてみましょう。その後、T(n) =T(2^k) = a + (k+1)c = a + (1 + log_2(n))c
となります。したがって、T(n) = O(log_2(n)) = O(log n)
。ターゲットの下限は、現在のノードの下限値未満である場合、ターゲットが左サブツリーである
は、我々は値の範囲であり、次の規則が適用平衡三元ツリーを持っていたと仮定する。
だから、これはバランスの取れた三元検索ツリーかもしれません:あなたは二つの条件ではなく、いずれかをチェックし、むしろ1よりも、三つの可能なサブツリーのいずれかを選択除い
(10,20)
|
+----------+----------+
| | |
(5,11) (11,15) (21,24)
|
(22,23)
検索は、バイナリ検索のように働くかもしれません2つの可能性がある。再帰関係はT(n) = T(n/3) + c'
となり、解はT(n) = a' + (1 + log_3(n))c' = O(log_3(n)) = O(log n)
となる。
私は定数が重要ではないことを知っていますが、定数と見なされるかどうかはわかりません。私はその5 log(n)と10 log(n)を取得します。あなたは2^nと8^nの両方が同じ大きなOを持っていると言っていますか? –
彼らは私が投稿したリンクの2^nに2を残さなかった。あなたはその関係を見ますか? –
例:log2(n)= log10(n)* 3.3219 ...(長い番号)。ちょうどどんなnでも試してみてください。 –