ツリーの高さ(nノード)はlog(n)になるため、バイナリサーチアルゴリズムはlog(n)時間かかります。
これをどのように証明しますか?
ここで私は数学的な証明をしていません。ベース2へのログを使用して問題を理解しようとします。ログ2 ログインはコンピュータサイエンスの通常の意味です。
まず、それが2進数の対数(ログ2n)(2を底とする対数)。例えば、
各高さについて、完全にバランスの取れたツリーのノード数は
高さノードログの計算 0 1ログ21 = 0 1 3ログ23 = 1 2 7ログ27 = 2 3 15ログ215 = 3
8から15のノード(任意の数、たとえば10とする)のバランスの取れたツリーを考えます。ログは常に高さ3になります。2 8から15までの任意の数は3です。
バランスのとれた二分木では、解かれる問題のサイズはすべての反復で半分になります。したがって、大まかにログ2サイズ1の問題を取得するには、n回の反復が必要です。
これがお役に立てば幸いです。
最初にツリーが完成したと仮定しましょう。ツリーには2 ^ Nのリーフノードがあります。二分探索にはN回の再帰ステップが必要であることを証明しようとします。
各再帰ステップで、候補の葉ノードの数を正確に半分にします(ツリーが完成しているため)。これは、N個の半分の操作の後、正確に1つの候補ノードが残っていることを意味します。
私たちの二分探索アルゴリズムの各再帰ステップは正確に1つの高さレベルに対応するため、高さは正確にNです。
すべての平衡二分木への一般化:ツリーのノード数が2 ^ N未満の場合、確かにmore半分にする必要はありません。必要な量は少なくても同じでも、それ以上ではありません。
処理する完全なツリーがあると仮定すると、深さkで2つあると言えます。k ノード。簡単な帰納法を使用してこれを証明できます。ツリーにレベルを追加すると、ツリー全体のノード数が前のレベルのノード数の2倍になるという直感に基づいています。
ツリーの高さkはlog(N)です。ここで、Nはノードの数です。これは
ログ2(N)= k、
そしてそれは
N = 2k
これを理解するために、以下に例を示します。
16 = 24 =>ログ2(16)= 4
ツリーの高さとノードの数は関連しています指数的に。ノード数のログを取ると、高さを見つけるために逆に作業することができます。
Knuth、Volume 3-検索とソートのアルゴリズムで厳密な証明を調べてください...彼は私が考える誰よりもはるかに厳密にそれを行います。
http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
良いコンピュータサイエンスライブラリや、多くの(非常に)古いオタクの本棚で見つけることができます。