web-dev-qa-db-ja.com

バランスのとれた二分探索木の高さがlog(n)であることの証明

ツリーの高さ(nノード)はlog(n)になるため、バイナリサーチアルゴリズムはlog(n)時間かかります。

これをどのように証明しますか?

16
Igor L.

ここで私は数学的な証明をしていません。ベース2へのログを使用して問題を理解しようとします。ログ2 ログインはコンピュータサイエンスの通常の意味です。

まず、それが2進数の対数(ログ2n)(2を底とする対数)。例えば、

  • 1の2進対数は0
  • 2の2進対数は1です。
  • 3の2進対数は1です。
  • 4の2進対数は2です
  • 5、6、7の2進対数は2
  • 8-15の2進数の対数は3です。
  • 16-31の2進数の対数は4などです。

各高さについて、完全にバランスの取れたツリーのノード数は

高さノードログの計算
 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回の反復が必要です。

これがお役に立てば幸いです。

18
Sandesh Kobal

最初にツリーが完成したと仮定しましょう。ツリーには2 ^ Nのリーフノードがあります。二分探索にはN回の再帰ステップが必要であることを証明しようとします。

各再帰ステップで、候補の葉ノードの数を正確に半分にします(ツリーが完成しているため)。これは、N個の半分の操作の後、正確に1つの候補ノードが残っていることを意味します。

私たちの二分探索アルゴリズムの各再帰ステップは正確に1つの高さレベルに対応するため、高さは正確にNです。

すべての平衡二分木への一般化:ツリーのノード数が2 ^ N未満の場合、確かにmore半分にする必要はありません。必要な量は少なくても同じでも、それ以上ではありません。

9
usr

処理する完全なツリーがあると仮定すると、深さkで2つあると言えます。k ノード。簡単な帰納法を使用してこれを証明できます。ツリーにレベルを追加すると、ツリー全体のノード数が前のレベルのノード数の2倍になるという直感に基づいています。

ツリーの高さkはlog(N)です。ここで、Nはノードの数です。これは

ログ2(N)= k、

そしてそれは

N = 2k

これを理解するために、以下に例を示します。

16 = 24 =>ログ2(16)= 4

ツリーの高さとノードの数は関連しています指数的に。ノード数のログを取ると、高さを見つけるために逆に作業することができます。

7
Elijah Tai

Knuth、Volume 3-検索とソートのアルゴリズムで厳密な証明を調べてください...彼は私が考える誰よりもはるかに厳密にそれを行います。

http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming

良いコンピュータサイエンスライブラリや、多くの(非常に)古いオタクの本棚で見つけることができます。

1
Radiotrib