私はハフマンエンコーディングのユニークな形式を実行しており、完全なk-ary(この特定の場合では3-ary)ツリーを構築しています(すべてのノードには0またはkの子が含まれます)。私がそれを構築する前に持っています。葉の数でツリー内のノードの総数を計算するにはどうすればよいですか?
完全な2進ツリー(2進)の場合、これの式は2L-1です。ここで、Lは葉の数です。この原理をk-aryツリーの場合に拡張したいと思います。
完全な二分木について結果を証明する方法を考えてください。そうすれば、一般的にそれを行う方法がわかります。高さh
の完全なバイナリツリーの場合、ノードの数N
は
N = 2^{h+1} - 1
どうして?最初のレベルには2^0
ノードがあるため、2番目のレベルには2^1
ノードがあり、通常、k
thレベルには2^{k-1}
ノードがあります。これらを合計してh+1
レベル(つまり高さh
)を合計すると、
N = 1 + 2 + 2^2 + 2^3 + ... + 2^h = (2^{h+1} - 1) / (2 - 1) = 2^{h+1} - 1
リーフの総数L
は、直前のレベルのノードの数に過ぎないため、L = 2^h
です。したがって、代入により、
N = 2*L - 1
k
- aryツリーの場合、2
のみが変更されます。そう
N = 1 + k + k^2 + k^3 + ... + k^h = (k^{h+1} - 1) / (k - 1)
L = k^h
そして少しの代数であなたは
N = (k*L - 1) / (k-1)
あなたが言及した2L-1の式は、完全で完全なバランスのとれた二分木を調べることから来ています。最後のレベルでは2 ^ hの葉があり、他のレベルでは1 + 2 + 4 + .... + 2 ^(h-1)= 2 ^ h -1の葉。ツリーのレベルを「混乱」させて不均衡なレベルを作成しても、内部ノードの数は変わりません。
3進ツリーでも同じロジックです。最後のレベルでは3 ^ hの葉があり、他のレベルでは1 + 3 + 9 + .... + 3 ^(h-1)=(3 ^ h -1)/ 2、つまり、3進ツリーでは、1.5 * L-0.5の葉があることを意味します(これにより、次数が大きくなるため、必要な内部ノードが少なくなります)。ここでも、ツリーのレベルをめちゃくちゃにしても、同じ数の内部ノードが必要になります。
それがあなたを助けることを願っています
任意のk-aryツリーについて、ノードの総数n = [(k ^(h + 1))-1] /(h-1)ここで、hはk-aryツリーの高さです。
例:-完全な二分木(k = 2)の場合、合計はありません。ノード数= [(2 ^(h + 1))-1] /(h-1)。
したがって、高さ3の合計はありません。ノードの数は15になります。
完全な三成分ツリーtree(k = 3)の場合、合計数ノード数= [(3 ^(h + 1))-1] /(h-1)。
したがって、高さ3の合計はありません。ノードの数は40になります。