课本中没有证明,现补充在这里。
改编自以下的证明链接(英文)
http://algoviz.org/OpenDSA/Books/OpenDSA/html/HuffProof.html
[ 感谢N_thread指出的问题。]
====================
引理1:给定W = {w1, w2, w3...,wn} (n >= 2), 以此集合构建相应的哈夫曼树。
令wi, wj 是W中权重最小的两个元素。则这两个数相应的结点是兄弟结点,且这两结点在二叉树中的深度不小于其他不论什么一个叶结点的深度。
证明:由哈夫曼树的构建过程可知,wi, wj 所在结点是兄弟结点(在不影响阅读的前提下。以wi, wj 指代这两个结点)。
如果在哈夫曼树中,wi, wj 所在结点的深度不是最深的。则哈夫曼树应似图1 样式,存在一些结点,其深度大于wi, wj 的深度。在图1中。wi, wj的父结点V的权重应大于结点X权重。否则构建哈夫曼树时,应选择V而不是X作为U的子结点。但这是不可能的,由于由如果知wi, wj是W中权重最小的两个元素。得出矛盾,问题得证。
图1 一棵可能的哈夫曼树。在此树中,对于最小权重的的两个叶结点wi,wj, 其深度是不同的。图中三角形表示子树。
定理1:哈夫曼树是最优的。
证明:用归纳法证明。
若存在深度大于w1, w2深度的结点。我们能够通过将之与w1, w2交换,由此得到更小的WPL。按例如以下方式得到到二叉树T‘:以结点V‘替换结点V, 当中V‘的权重是w1+w2,则T‘是对应于{w1+w2,w3,...,wn}的一棵哈夫曼树。依据归纳如果。T‘具有最小权重外部路径,T是最优的(EPW最小)。在T‘的结点V‘上加入叶结点w1, w2。可得T。则T是具有最小权重外部路径的哈夫曼树。
由此,我们由数学照片纳法证明了定理1.
(注意:哈夫曼编码是最优之中的一个。)
原文:http://www.cnblogs.com/bhlsheji/p/5210885.html