IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 哈夫曼树及其应用 -> 正文阅读

[数据结构与算法]哈夫曼树及其应用

哈夫曼树及其应用

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:50:05  更:2022-03-04 15:52:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:59:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码