哈夫曼树的基本应用与概念

概念

哈夫曼树又叫最优二叉树,等等在做解释。我们先引入“路径”和“长度”的概念。
路径:即从树的一个结点到另一个结点所经过的分支构成
长度:即路径所经分支的个数
树的路径长度:指从根结点出发,到树中每一个结点的路径长度之和,记作:TL
例如:有这么一个二叉树:A->B->C,则A到C的路径为ABC,长度为2,树的路径长度为3
补充:结点数相同的情况下,完全二叉树的树的路径长度最短,但满二叉树的又小于等于完全二叉树
:给树中的每个结点赋以一个值,这个值就是权
结点的带权路径长度:结点的权乘以路径长度
树的带权路径长度:所有叶子结点的带权路径长度之和

贪心算法

我们利用贪心算法去构造一棵哈夫曼树,主要核心思想是四句话:
构造森林全是根
选用两小造新树
删除两小添新人
重复二三剩单根

具体实现:
哈夫曼树的基本应用与概念_第1张图片
给定四个带权的结点a、b、c、d,“构造森林全是根”,也就是让这四个点全部作为根结点列成一排,“选用两小造新树”,选出其中最小的两个根作为一棵新树,根结点为二者之和,例如这里的2,4生成新根:6;“删除两小添新人”,将原来这两个根作为子树画入图中;“重复二三剩单根”,不断重复二三步骤,只保留最后一个根结点,最终演化为一棵哈夫曼树。
有上述哈夫曼树的构成方式我们可以证明文章第一句话:哈夫曼树是最优二叉树,且哈夫曼树的结点的度只能为0,2,却不可能为1.

性质

①假设一棵树有n个结点,合并后会产生n-1个结点,所以一共有2n-1个结点
②一棵哈夫曼树中,权越大,离根越近(由具体实现部分可知,正因大权离根更近,所以树的带权路径长度才最短)
哈弗曼编码
哈夫曼树的基本应用与概念_第2张图片
因此我们选用哈夫曼编码
方法
①统计字符集中每个字符在电文中出现的平均频率(频率越大,要求编码距离越短)。
②利用哈夫曼树的特点,权越大的叶子离根越近;将每个字符的概率值作为权,构造哈夫曼树=>概率越大的结点,路径越短,反之越长。
③构建好哈夫曼树之后,在每个分支上标0或1,结点的左边标0,右边则标1,把根结点到叶子结点的分支路径全部表示出来,就是一个字符的编码。
哈夫曼树的基本应用与概念_第3张图片
通过哈夫曼编码去解码
提供一个字符频度表,通过叶子结点确定每个数字代表的字符,然后老办法:左为0,右为1,最后根据得到的编码去解开每段码所代表的含义。
哈夫曼树的基本应用与概念_第4张图片

你可能感兴趣的:(新手,二叉树,c语言,贪心算法)