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

Posted printk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了温故而知新, 哈夫曼树(Huffman tree)相关的知识,希望对你有一定的参考价值。

哈夫曼树定义:在一棵二叉树中,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树。
如何构建哈夫曼树:
一般可以按如下步骤构建:
假设有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)的主要内容,如果未能解决你的问题,请参考以下文章

学习数据结构笔记(10) --- [赫夫曼树(Huffman Tree)与赫夫曼编码(Huffman coding)]

Python---哈夫曼树---Huffman Tree

Huffman Tree哈夫曼树权值路径长度WPL计算,binarytree ,Python

Huffman Tree哈夫曼树权值路径长度WPL计算,binarytree ,Python

Huffman Tree哈夫曼树权值路径长度WPL计算,binarytree ,Python

Huffman Tree