私のJavaクラスでは、さまざまなタイプのコレクションの複雑さについて学習しています。
間もなく、私が読んでいる二分木について議論します。この本は、二分木の最小の高さはであると述べていますが、それ以上の説明はありません。
誰かが理由を説明できますか?
私のJavaクラスでは、さまざまなタイプのコレクションの複雑さについて学習しています。
間もなく、私が読んでいる二分木について議論します。この本は、二分木の最小の高さはであると述べていますが、それ以上の説明はありません。
誰かが理由を説明できますか?
回答:
二分木は、非葉ノードに1つまたは2つの子を持ち、葉ノードに0ノードを持ちます。ツリーにはノードがあり、有効なバイナリツリーを形成するようにノードを配置する必要があります。
証明せずに、高さを最大化するには、ノードを線形に配置する必要があります。つまり、各非リーフノードは子を1つだけ持つ必要があります。
O 1
|
O 2
|
O 3
|
O 4
|
O 5
|
O 6
|
O 7
|
O 8
ここで、ノードの数で高さの関係を計算する式は簡単です。場合木の高さは、H = N - 1。
ここで、高さが最小のノードのバイナリツリーを構築しようとすると(常に完全なバイナリツリーに還元可能)、次のレベルに進む前に、できるだけ多くのノードを上位レベルにパックする必要があります。したがって、ツリーは次のツリーの形式をとります。
O
|1
|
O------+-----O
|2 |3
| |
O---+---O O---+----O
|4 |5 6 7
| |
O---+--O O
8 9 10
特定のケース、から始めましょう。
私たちは、知っている
また、レベルは最大で2 iノードを持つことができることを証明するのは簡単です。
この結果を上記の合計で使用すると、0からmまでの各レベルに対して、2 m − 1の展開に対応する項2 i − 1が存在することがわかります。これは、完全な二分木2 m − 1ノードが完全に満たされ、高さh (2 m − 1 )= m − 1であることを意味します。ここで、h (n )= nノードの完全な二分木の高さです。
この結果を使用すると、。これは、2 m − 1ノードのツリーが完全に満たされ、したがって(2 m − 1 )+ 1 = 2 mノードのツリーは、次のレベルの追加ノードに対応する必要があるためです。Mから1だけ高さを高くM - 1に、M。
これまでに証明したことは、h (2 m + 1)= m + 1 、およびh (2 m + 1 − 1 )= mです。
したがって、、M ≤ H (N )< M + 1
しかし、両側の対数(基数2)を取って、 、M = ⌊ ログ2(nは)⌋
したがって、H (N )= M = ⌊ ログ2(N )⌋
そして、我々はこの結果を一般化することができ誘導を利用して。