バイナリ検索のbig-Oのログがベース2ではないのはなぜですか?


35

コンピューターサイエンスアルゴリズムを理解するのは初めてです。私はバイナリ検索のプロセスを理解していますが、その効率性について少し誤解しています。

要素のサイズでは、特定の要素を見つけるのに平均でnステップかかります。両側の底2の対数を取ると、log 2(s )= nが得られます。それでは、バイナリ検索アルゴリズムの平均ステップ数はlog 2(s )ではありませんか?s=2nnログ2⁡(s)=nログ2⁡(s)

バイナリ検索アルゴリズムに関するこのウィキペディアの記事では、平均パフォーマンスはと述べてい。これはなぜですか?なぜこの数字ははないのですか?O(ログ⁡n)ログ2⁡(n)


回答:


86

対数の底を変更すると、結果の式は、Big-O表記法の定義により、両方の関数が漸近的な振る舞いに関して同じクラスに属していることを意味する定数因子だけが異なります。

たとえば、 ここで、 。C=1

ログ10⁡n=ログ2⁡nログ2⁡10=Cログ2⁡n
C=1ログ2⁡10

したがって、とは定数異なり、したがって両方とも真です。 一般に、1より大きい正の整数および場合はです。log 2 n C log 10 n  は  O (log 2 n )log 2 n  は  O (log 10 n )log a n O (log b n)a bログ10⁡nログ2⁡nC

ログ10⁡n は O(ログ2⁡n)
ログ2⁡n は O(ログ10⁡n)
ログa⁡nO(ログb⁡n)ab

対数関数を持つ別の興味深い事実は、その定数の一方、ありませんが、であるのでは、定数係数だけがと異なり。k>1nkO(n)ログ⁡nkO(ログ⁡n)ログ⁡nk=kログ⁡nログ⁡nk


正の整数だけでなく、すべての実数、たとえば。a、b>1e
— nbubis

2
これが、big-O表記では、対数の底が通常指定されない理由であると付け加えます。また、どのベース使用するかについて混乱がないことを意味し。違いを生じないため、一般的に使用されるベースのいずれでもかまいません。O(ログ⁡n)
— svick

9

ログ⁡(n)eログ

しかし、すでに示したように、この場合は問題になりません。


7
「log(n)」は曖昧かもしれませんが、「O(log(n))」は、あなたが考えているベースに関係なく、後者が1つの意味しか持っていないからではないことに注意する価値があるでしょう。
— クリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.