平均値のツリーのすべてのノードの深さを最小にしながらツリーの高さを最大化しようとする場合、明確な最良の形は「傘」形になります。 k個のノードと高さ= lg kを有する完全な2分木であり、ここで0 < k < nは、完全な部分の葉の1つから出てくるn-k個のノードの単一経路、すなわち「テール」と一緒になる。この木の高さはおよそlg k + n - kです。
ここで、すべてのノードの合計深さを計算しましょう。完全な部分のノードの深さの合計はsum [j * 2^j]です。ここで、合計はj = 0からj = lg kまでです。いくつかの代数によって、結果の支配的項は2k lg kです。
次に、tail部分の深さの合計は、sum [i + lg k]によって与えられます。ここで、合計は、i = 0からi = n-kまでです。いくつかの代数によって、結果はおよそ(n-k)lg k +(1/2)(n-k)^ 2になります。
したがって、上の2つの部分を合計し、nで割ると、すべてのノードの平均深さは(1 + k/n)lg k +(n-k)^ 2 /(2n)です。 0 < k < nなので、私たちが何を選んでも、最初の項はO(lg n)です。したがって、第2項がO(lg n)であることを確認するだけでよい。これを行うには、(n-k)^ 2 = O(n lg n)またはk = n-O(sqrt(n lg n))が必要です。この選択で、木の高さは
LGのK + N - = O(SQRT(N LGのN))
これは通常O(LG n)がより漸近的に大きく、漸近的であるK平均深度をO(lg n)に保ちながらツリーを作ることができます。
'w'は小文字のオメガを意味します。 – Gumbo
@Gumboはい、ありがとう。 – meteorgan