赫夫曼树及其应用
1)树的路径长度 是从树根到每一个结点之间的路径长度之和。
完全二叉树就是这种路径长度最短的二叉树。
2)将上述情况推广到带权重的结点。结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。
树的带权路径长度 为树中所有叶子结点的带权路径长度之和,记为WPL。
3)假设有n个权重{w1, w2,…, wn},试构造一棵含有n个叶子结点的二叉树,每个叶子结点带权为wi,则其中带权路径长度WPL最小的二叉树称作 最优二叉树 或 赫夫曼树。
4)赫夫曼树的应用:
1)将学生成绩按照分成bad、pass、general、good、excellent五个等级。因为学生成绩为正态分布,比如若70-79分的人占40%,那么程序先比较学生成绩是否处在这个区间,能获得较少的比较次数。程序若先后与60、70、80、90比较,则会有更多的比较次数。其实,40%就是构造赫夫曼树中叶子结点70-79的权重。
2)在传送电文的时候,希望传送电文的长度越小越好。良好的编码可以取得更短的报文。如电文为“ABACCDA”,可以将ABCD的编码分别为00,01,10,11。则上述7个字符的电文为14位。如果设计ABCD的编码分别为0,00,1,01,则总长度可以减少为9个字符,可是这样的报文无法在接收端翻译。其实,我们需要的是一种,任意个字符的编码都不是另一个字符的编码的前缀,这种编码称作 前缀编码。
3)可以通过,以字符ABCD分别出现的次数来当做权重,来构造有4个叶子结点的赫夫曼树,来得到 二进制前缀编码。约定二叉树做分支为0,右分支为1。
设计电文总长度最短的二进制前缀编码即为以n种字符出现的频率作权,设计一棵赫夫曼树的问题,由此得到的二进制前缀编码便称为 赫夫曼编码。
5)赫夫曼树中没有度数为1的结点,所以称为,严格的二叉树,正则的二叉树。
6)赫夫曼树的构造过程