N
二分木にノードを収めるのに必要な最小の高さを呼びましょうminheight(N)
。
特定の数のノードに対するツリーの高さの下限を導き出す 1 つの方法はN
、別の方向から作業h
することです。
この関数を height と呼びましょうmaxnodes(h)
。明らかに、特定の高さのバイナリ ツリーのノード数は、ツリーがいっぱいになると最大になります。つまり、各内部ノードに 2 つの子がある場合です。誘導はすぐにそれを示しmaxnodes(h) = 2^h - 1
ます。
したがって、N
ノードがある場合、すべてh
の formaxnodes(h) >= N
はの上限です。つまり、その高さの木にminheight(N)
すべてのノードを収めることができます。N
これらすべての上限のうち、最良の (最も厳しい) 上限が最小になります。したがって、私たちが見つけたいのはh
、
N <= maxnodes(h) = 2^h - 1
では、 のこの最小の満足値を見つけるにはどうすればよいh
でしょうか?
の重要な特性maxnodes(h)
は、それが wrt に関して非減少であることですh
(実際には厳密には増加していますが、非減少で十分です)。これが意味することは、高さを減らすことによって完全なバイナリ ツリーにノードを追加することは決してできないということです。(当たり前のことですが、ときどき詳しく説明すると役立つことがあります!) これにより、上記の式を並べ替えて の最小値をh
簡単に見つけることができます。
2^h - 1 >= N
2^h >= N+1 # This is the RHS of your inequality, just flipped around
h >= log2(N+1) # This step is only allowed because log(x) is nondecreasing
h
h
は整数でなければならないので、満たす最小値h >= log2(N+1)
は ですRoundUp(log2(N+1))
。
これは下限を説明する最も便利な方法だと思いますが、質問している不等式の LHS を導出するために使用できます。前のブロックの 2 番目の方程式から始めます。
2^h >= N+1
この不等式を満たす値のセットは、正の無限大からh
始まり、h = log2(N+1)
正の無限大まで伸びます。h = log2(N+1)
はこのセットの最小満足値であるため、それより低い値は不等式を満たさないはずh-1
です。>=
2 つの実数 (無限でない) の間に不等式が成立しない場合、対応する<
不等式が成立する必要があるため、次のようになります。
2^(h-1) < N+1