バイナリツリーの最小の高さなぜですか?


10

私のJavaクラスでは、さまざまなタイプのコレクションの複雑さについて学習しています。

間もなく、私が読んでいる二分木について議論します。この本は、二分木の最小の高さはであると述べていますが、それ以上の説明はありません。ログ2⁡(ん+1)−1

誰かが理由を説明できますか?


回答:


11

二分木は、非葉ノードに1つまたは2つの子を持ち、葉ノードに0ノードを持ちます。ツリーにはノードがあり、有効なバイナリツリーを形成するようにノードを配置する必要があります。ん

証明せずに、高さを最大化するには、ノードを線形に配置する必要があります。つまり、各非リーフノードは子を1つだけ持つ必要があります。

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

ここで、ノードの数で高さの関係を計算する式は簡単です。場合木の高さは、H = N - 1。hh=ん−1

ここで、高さが最小のノードのバイナリツリーを構築しようとすると(常に完全なバイナリツリーに還元可能)、次のレベルに進む前に、できるだけ多くのノードを上位レベルにパックする必要があります。したがって、ツリーは次のツリーの形式をとります。ん

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

特定のケース、から始めましょう。ん=2メートル−1

私たちは、知っている

20+21+22+。。。+2メートル−1=2メートル−1

また、レベルは最大で2 iノードを持つことができることを証明するのは簡単です。私2私

この結果を上記の合計で使用すると、0からmまでの各レベルに対して、2 m − 1の展開に対応する項2 i − 1が存在することがわかります。これは、完全な二分木2 m − 1ノードが完全に満たされ、高さh (2 m − 1 )= m − 1であることを意味します。ここで、h (n )= nノードの完全な二分木の高さです。私0メートル2私−12メートル−12メートル−1h(2メートル−1)=メートル−1h(ん)=ん

この結果を使用すると、。これは、2 m − 1ノードのツリーが完全に満たされ、したがって(2 m − 1 )+ 1 = 2 mノードのツリーは、次のレベルの追加ノードに対応する必要があるためです。Mから1だけ高さを高くM - 1に、M。h(2メートル)=メートル2メートル−1(2メートル−1)+1=2メートルメートルメートル−1メートル

これまでに証明したことは、h (2 m + 1)= m + 1 、およびh (2 m + 1 − 1 )= mです。

h(2メートル)=メートル、
h(2メートル+1)=メートル+1
h(2メートル+1−1)=メートル

したがって、、M ≤ H (N )< M + 1∀ん∈Z、2メートル≤ん<2メートル+1

メートル≤h(ん)<メートル+1

しかし、両側の対数(基数2)を取って、 、M = ⌊ ログ2(nは)⌋

メートル≤ログ2⁡(ん)<メートル+1
メートル=⌊ログ2⁡(ん)⌋

したがって、H (N )= M = ⌊ ログ2(N )⌋∀ん、ん∈[2メートル、2メートル+1)

h(ん)=メートル=⌊ログ2⁡(ん)⌋

そして、我々はこの結果を一般化することができ誘導を利用して。∀ん∈Z

ログ2⁡(ん+1)−1んログ2⁡(ん)ん


18

ん

41+1⋅2+1⋅2⋅2+1⋅2⋅2⋅23

ノード=1+2+22+23+。。。+2深さ=Σk=0深さ2k=1−2深さ+11−2。

ノード=2深さ+1−1、
ノード+1=2深さ+1ログ2⁡(ノード+1)=ログ2⁡(2深さ+1)=深さ+1ログ2⁡(ノード+1)−1=深さ。

4

高さを最小に保つには、最後のレベル以外のすべてのレベルを埋める必要があることが簡単にわかります。どうして?それ以外の場合は、最後のレベルのノードを上のレベルの空のスロットに移動するだけです。

今、私はいくつかの不特定の数のBeanがあり、一度に1つのBeanを与えて、可能な限り最小の高さのバイナリツリーを構築するように要求するとします。最後のレベルを完全に満たすか、少なくとも最後のレベルに1つのBeanが含まれるまでに、Beanがなくなる可能性があります。この時点で、あなたは木の高さhを持っているとしましょう。

20+21+22+23+⋯+2h=2h+1−1≤ん。
h=lg⁡(ん+1)−1。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.