1. ハフマン木の構造
より明確に見えますが、最適性の証明は授業や本では示されていません。
2. 最適性の証明
そこで私はインターネットで検索し、より良い証拠を入手し、以下のように再掲しました (若干の修正と補足を加えて): (
出典 https://blog.csdn.net/weixin_42881755/article/details/90714191)
実際に最適であることを証明するには、それは次のことを証明することです:
1. まず、最小の重みを持つ 2 つの数値が最下位の兄弟ノードであることを証明します。
VL 最大 V_{L_{max}}なのでVLマックス_はパスの長さが最も長い分岐点です。その子ノードはリーフ ノードである必要があります。VL 最大 V_{L_{max}}と仮定します。VLマックス_リーフ ノードは 1 つだけあります、V wx V_{w_x}Vw×、子ノードV wx V_{w_x}を使用できますVw×ブランチノードの代わりにVL max V_{L_{max}}VLマックス_新しいツリーT n ∗ T_{n}^*を取得しますTn∗,则有:W ( T n ∗ ) = W ( T n ) − wx W ( T_{n}^*) = W ( T_n ) − w_xW ( T)n∗)=W ( T)ん)−w×、 T n T_n付きTん最適ツリーと矛盾します。この場合、最下層には 2 つのリーフ ノードが存在する必要があります。
これら 2 つのノードが最小でない場合、最小値をこれら 2 つの点と交換すると、加重パスは確実に減少し、最適なツリーと矛盾します。, したがって、最小の重みを持つ 2 つの数値が最下位の兄弟ノードであると結論付けられます。
2. 最適なツリーが縮小および拡張後も依然として最適であることを証明する
(ここで注意すべき点は、データを格納する各ノードはリーフノードであるため、他のノードに影響を与えることなく自由に拡張およびマージできることです)
将 V w 1 、 V w 2 V_{w_1}、V_{w_2} Vw1、Vw22 つの葉ノードが縮小して新しいツリーが得られますT n − 1 ∗ ( w L max = w 1 + w 2 ) T_{n-1}^*(w_{L_{max} } = w_1+w_2)Tn − 1∗(wLマックス_=w1+w2) ,令带权为{ w 3 、 w 4 . . . . w n 、 w 1 + w 2 w_3、w_4....w_n、w_1+w_2 w3、w4.... wん、w1+w2}最適なツリーはT n − 1 T_{n-1}ですTn − 1、逆展開して得られる木はT n ∗ T_n^*Tn∗内容:
W ( T n ) = W ( T n − 1 ∗ ) + ( w 1 + w 2 ) W(T_n)=W(T_{n-1}^*)+(w_1+w_2)W ( T)ん)=W ( T)n − 1∗)+( w1+w2)
W ( T n − 1 ) = W ( T n ∗ ) − ( w 1 + w 2 ) W(T_{n-1})=W(T_n^*)-(w_1+w_2)W ( T)n − 1)=W ( T)n∗)−( w1+w2)
整理得:
W ( T n ) − W ( T n ∗ ) + W ( T n − 1 ) − W ( T n − 1 ∗ ) = 0 W(T_n)-W(T_{n}^*)+ W(T_{n-1})-W(T_{n-1}^*)=0W ( T)ん)−W ( T)n∗)+W ( T)n − 1)−W ( T)n − 1∗)=T n 、T n − 1 T_n、T_{n-1}
のため、 0Tん、てn − 1は、W ( T n ) = W ( T n − 1 ∗ ) W(T_n) = W(T_{n-1}^*) の場合にのみ最適な木です。W ( T)ん)=W ( T)n − 1∗)そしてW ( T n − 1 ) = W ( T n − 1 ∗ ) W(T_{n-1}) = W(T_{n-1}^*)W ( T)n − 1)=W ( T)n − 1∗)等式が成立する場合。つまり、T n ∗ 、T n − 1 ∗ T_n^*、T_{n-1}^*Tn∗、てn − 1∗最適な木でもあります。
という命題が証明された。
3. ハフマン ツリーの作成
いくつかの重みを取得したので、それを最適なコーディング ツリーに配置したいと思います。上記の結論によると、構築原則は次のとおりです: 一番下の葉ノードとして最小の 2 つを見つけ、縮小 ( 2 つを合計し、残りの重りと混合し、操作を繰り返します。実際、これは冒頭で示したハフマン木の構築原理です。
要約すると、ハフマン木が最適なコーディング木であるという結論が得られました。
#学習・転載・侵入・削除について