哈夫曼树及其应用

哈夫曼树及其应用

image-20220228104013645

image-20220228103946956

判断树:用于描述分类过程的二叉树

假设 小于60分的同学有5% 60-70 15% 70-80 40% 80-90 30% >90 10%

image-20220228104437482

image-20220228104532589

显然:两种判别树的效率是不一样的

问题:能不能找到一种效率最高的判别树呢? 这就是哈夫曼树(最优二叉树)研究的问题

哈夫曼树基本概念

树的路径长度:

从树根到每一个节点的路径长度之和,记作TL

image-20220228105236196

将树种结点赋给一个有着某种含义的数值,则这个数值称为该结点的权

节点的带权路径长度

节点到该结点之间的路径长度与该节点的乘积

树的带权路径长度

树种所有的叶子节点的带权路径长度之和

image-20220228105809994

例子:有四个节点 a,b,c,d权值分别为7,5,2,4构造以此4个结点为叶子节点的二叉树

image-20220228110225383

哈夫曼树:最优树 带权路径(WPL)最短的书

带权路径最短 是在 度相同 的树中比较而得的结果,英雌有最优二叉树、最优三叉树之称等

哈夫曼树:最优二叉树 带权路径最短(WPL)的二叉树

应为构造这种树的算法是由哈夫曼教授与1952年提出的没所以被称为哈夫曼树,相应的算法称为哈夫曼算法

image-20220228110911926

哈夫曼树构造算法

哈夫曼树中权越大的叶子离根越近 贪心算法:构造哈夫曼树时首先选择权值小的叶子节点

image-20220302082259976

哈夫曼算法口诀

  • 构造森林全是根
  • 选用两小造新树
  • 删除两小添新人
  • 重复2,3剩单根

image-20220302082748380

总结

  1. 在哈夫曼算法中,初始时有n棵二叉树,要经过n-1次合并最终形成哈夫曼树
  2. 经过n-1次合并产生n-1个新节点,且这n-1个新节点都是具有两个孩子的分支节点
  3. 可见:哈夫曼树中共有 n+n-1=2n-1个结点,且其所有的分支节点的度均布唯一

哈夫曼树构造算法的实现

采用顺序存储结构------ 一维结构数组

结点类型定义

哈夫曼编码

  • 在远程通讯中,要将待传字符串转换成由二进制的字符串

image-20220302084903142

直接传输占据的内存空间太大,采用下面这种格式容易造成多义

image-20220302085204407

注意:左小右大是一种习惯 不唯一

image-20220302085831199

两个问题:

  • 为什么哈夫曼编码能够保证是浅醉编码
    • 因为 没有一片树叶是另一片树叶的祖先,所以每个叶节点的编码就不肯恶搞是其他叶结点编码的前缀
  • 为什么哈夫曼树能够保证字符编码总长最短
    • 因为 哈弗马上农户的带权路径长度最短,故字符编码的总长最短

哈夫曼编码是前缀码

哈夫曼编码是最有前缀码

文件的编码和解码

image-20220303084327116

原理是统计每个数字出现的次数,他的次数也就是他的权,根据他的权我们需要构造哈夫曼树,然后再按照左小右大构建每个单词的哈夫曼编码

image-20220303084619050

编码:

  1. 输入各字符及其权值
  2. 构造哈弗马上农户–HT[I]
  3. 进行哈夫曼编码----HC[i]
  4. 差HC[I],得到各字符的哈夫曼编码

解码

  1. 构造哈夫曼树
  2. 一次读入二进制码
  3. 读入0,则走向左孩子;读入1,则走向该右孩子
  4. 一旦到达某叶子时,即可翻译出字符
  5. 然后再从根出发继续译码,直到结束

C[i]
4. 差HC[I],得到各字符的哈夫曼编码

解码

  1. 构造哈夫曼树
  2. 一次读入二进制码
  3. 读入0,则走向左孩子;读入1,则走向该右孩子
  4. 一旦到达某叶子时,即可翻译出字符
  5. 然后再从根出发继续译码,直到结束

image-20220303085707570

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值