哈夫曼树及其应用

哈夫曼树及其应用

哈夫曼树及其应用_第1张图片

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

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

哈夫曼树及其应用_第2张图片

哈夫曼树及其应用_第3张图片

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

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

哈夫曼树基本概念

树的路径长度:

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

哈夫曼树及其应用_第4张图片

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

节点的带权路径长度

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

树的带权路径长度

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

哈夫曼树及其应用_第5张图片

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

哈夫曼树及其应用_第6张图片

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

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

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

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

哈夫曼树及其应用_第7张图片

哈夫曼树构造算法

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

哈夫曼树及其应用_第8张图片

哈夫曼算法口诀

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

哈夫曼树及其应用_第9张图片

总结

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

哈夫曼树构造算法的实现

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

结点类型定义

哈夫曼编码

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

哈夫曼树及其应用_第10张图片

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

哈夫曼树及其应用_第11张图片

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

哈夫曼树及其应用_第12张图片

两个问题:

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

哈夫曼编码是前缀码

哈夫曼编码是最有前缀码

文件的编码和解码

哈夫曼树及其应用_第13张图片

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

哈夫曼树及其应用_第14张图片

编码:

  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. 然后再从根出发继续译码,直到结束

哈夫曼树及其应用_第15张图片

你可能感兴趣的:(Another,Leetcode打卡,队列,redis,数据库)