哈夫曼树

原文:skywang12345 博客园


1.理论

[1]

Huffman Tree,中文名是哈夫曼树或霍夫曼树,它是最优二叉树。说它是最优的是因为它的带权路径长度达到最小。

(1)路径和路径长度,某结点的路径指的是从根结点到该结点的通路,路径长度为该结点层次-1

如结点100的路径长度为1,结点30的路径长度为2,结点20的路径长度为3;


(2)结点的权及带权路径长度,权值指的是结点上的值,带权路径长度=路径长度*权值,

如结点100的带权路径长度=1*100,结点20的带权路径长度=3*20;


(3)树的带权路径长度,树的所有叶结点的带权路径长度和,记为WPL,

如上面这棵树为,其叶结点为100, 50, 20, 10, 得WPL=1*100+2*50+3*20+3*10=290

上面两棵树的WPL

左边WPL=2*20+2*10+2*50+2*100=360;右边WPL=290。故右边的树要优于左边的树。而哈夫曼树对于存储同样数据是最优的带权路径的树结构。


[2]构造哈夫曼树

第1步中是由5棵高度为1的树组成的森林;

第2,3步开始构造高度为2的树,树的根结点等于两子结点之和,构造的树的根结点值从小到大,直到结点用完;

第4步开始构造高度为3的树,树的根结点等于两子结点之和,这里第3步的11-5-6树和15-7-8或15结合最终结果都是最优哈夫曼树;

第5步构造高度为4的树。


2.编程

发布于 2018-11-16