码迷,mamicode.com
首页 > 其他好文 > 详细

温故而知新, 哈夫曼树(Huffman tree)

时间:2018-10-21 01:01:43      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:合并   节点   如何   必须   构造   删除   初始   过程   拆分   

哈夫曼树定义:在一棵二叉树中,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树。
如何构建哈夫曼树:
一般可以按如下步骤构建:
假设有n个权值W1,W2,...,Wn,将这些权值看成是有n棵树的森林(每棵树仅有一个节点),
则哈夫曼树的构造规则为:
1,在森林中选出2个根节点的权值最小的树合并为一棵新树,作为左右子树,且新树的根节点权值为其左右子树根节点权值之和。
 
2,从森林中删除这两棵树,同时把新树加入到森林中。
 
3,重复1,2步骤,直到森林中只有一棵树为止,此树就是哈夫曼树。
 
哈夫曼树构造过程是一个递归过程,证明此构造过程出来的树一定是最优树。
那么我们只要证明:一棵最优二叉树,删除权值最小的两个叶节点(必须有共同父节点),同时父节点
的权值记为刚刚删除的2个子节点的权值之和,则新生成的树也是最优二叉树。
假定初始最优二叉树为T,权值为W(T),合并掉T的2个叶节点a,b生成c节点,a和b的权值分别记为W(a), W(b),
记新树为T‘(包含c节点),记树的权值为W(T‘),则W(T)=W(T‘)+W(a)+W(b),现在证明T‘也是一颗最优二叉树,
假定T‘不是最优二叉树,则有T*(包含c节点)为最优二叉树,且W(T*)<W(T‘),因为T*包含c,
把c拆分成权值分别为W(a),W(b)的a和b,形成新树T^,那么W(T^)=W(T*)+W(a)+W(b),
那么W(T^)<W(T‘)+W(a)+W(b),最终W(T^)<W(T),这跟T是最优二叉树矛盾,所以反过来说明T‘是最优二叉树。得证。

温故而知新, 哈夫曼树(Huffman tree)

标签:合并   节点   如何   必须   构造   删除   初始   过程   拆分   

原文地址:https://www.cnblogs.com/printk/p/9823476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!