判定树/判别树的概念
现在假设有下面这样的一个题目
如果根据题目构建下面这样的一棵树,那么这个树就是判定树(或判别树)
- 判定树(或判别树):用于描述分类过程的二叉树
什么是哈夫曼树呢?
假设每次的输入量很大,假设现有10000个学生的成绩,其中E的学生占5%、D的学生占15%、C的学生占40%、B的学生占30%、A的学生占10%
假设以下面的方式构建一棵判定树,则1000个数据的比较次数为:10000*(15%+215%+340%+440%)=31500次
假设以下面的方式构建一棵判定树,则1000个数据的比较次数为:10000*(320%+280%)=22000次
显然,上面的两种判别树的效率是不一样,现问:有没有一种效率最高的判别树呢?其中本文讨论的哈夫曼树就是一种最优二叉树
二、一些相关术语
路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径
结点的路径长度
结点的路径长度:两结点间路径上的分支数
例如,下面从A到B、C、D、E、F、G、H、I的路径长度分别为1、1、2、2、3、3、4、4
例如,下面从A到B、C、D、E、F、G、H、I的路径长度分别为1、1、2、2、2、2、3、3
树的路径长度(TL)
树的路径长度(TL):从树根到每一个结点的路径长度之和,记作:TL
例如,下面树的TL=0+1+1+2+2+3+3+4+4=20
例如,下面树的TL=0+1+1+2+2+2+2+3+3=16
注意:结点数目相同的二叉树中,完全二叉树是路径长度最短的二叉树
权(weight)
权(weight):将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权
结点的带权路径长度
结点的带权路径长度:从根节点到该节点之间的路径长度与该节点的权的乘积
树的带权路径长度(WPL)
树的带权路径长度(WPL):树中所有叶子结点的带权路径长度之和,记作WPL
其中WPL为:
演示案例
现有有4个节点a、b、c、d,权值分别为7、5、2、4。现在构建了下面的两棵二叉树
上面两棵二叉树的WPL分别为:
WPL(a)=72+52+22+42=36
WPL(b)=73+53+21+42=46
三、哈夫曼树
哈夫曼树:对于具有相同节点的二叉树,其中构造出来的"带权路径长度最短"的二叉树称为哈夫曼树.
演示说明
现在有4个节点a、b、c、d,各个结点的权值分别为7、5、2、4
下面构造出的二叉树WPL=72+52+22+42=36
下面构造出的二叉树WPL=73+53+21+42=46
下面构造出的二叉树WPL=71+52+23+43=35。在所有的树中其WPL最小,因此其是一棵哈夫曼树
下面构造出的二叉树WPL=71+52+23+43=35。在所有的树中其WPL最小,因此其是一棵哈夫曼树
总结:
满二叉树不一定是哈夫曼树
具有相同权结点的哈夫曼树不唯一
哈夫曼树中权越大的叶子离根越近,权越小的叶子离根越远
四、哈夫曼树的构建
哈夫曼树的构造方法(哈夫曼算法)
- ①构造森林全是根:根据n个给定的权值{W1、W2、…、Wn}构成n棵二叉树的森林F={T1、T2、…、Tn},其中Ti只有一个带权为Wi的根节点
- ②选用两小构新树:在F中选取两棵根节点的权值最小的树作为左右子树,构造一棵新的二叉树,且设置新的二叉树的根节点的权值为其左右子树上根节点的权值之和
- ③删除两小添新人:在F中删除这两棵树,同时将新得到的二叉树加入森林中
- ④重复②③剩余单根:重复②和③,直到森林中只有一棵树为止,这棵树即为哈夫曼树
贪心算法:构造哈夫曼树时首先选择权值小的叶子节点
https://blog.csdn.net/qq_40950183/article/details/103015895