哈夫曼编码(Huffman Coding)与哈夫曼树(Huffman Tree)

        已知字符集{a,b,c,d,e,f},若各字符出现的次数分别为6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是(        )。

A.00,1011,01,1010,11,100                   B.00,100,110,000,0010,01

C.10,1011,11,0011,00,010                   D.0011,10,11,0010,01,000


看到此题,首先我们需要了解什么是哈夫曼编码与哈夫曼树?


哈夫曼编码(Huffman Coding)

  1. 哈夫曼在1952年设计了一种算法,即利用字符频率来构造最优前缀码的编码方法,称为哈夫曼编码。
    1. 该编码方法一般设置在哈夫曼树中,从根节点到每个叶子节点的路径上,标记左分支的权值为0,标记右分支的权值为1,则从根结点到叶子结点所经过的路径分支组成的0和1的序列便为该结点对应字符的编码(即每个叶子节点都会有一个唯一的二进制编码),这就是哈夫曼编码。
  2. 一般应用于数据的解压和压缩。其核心思想是通过构建哈弗曼树,为常用字符分配较短的编码,不常用的字符分配较长的编码,从而减少数据的总体存储空间以及传输成本。 不会丢失信息,能够保持原始数据完整性。但构建哈夫曼树和生成编码的过程相对复杂,一般在应用时也无法实时地快速处理。
  3. 可以根据数据出现的频率来构建二叉树 。      
  4. 哈夫曼编码是前缀编码,各个编码的前缀各不相同,因此直接拿编码序列与哈夫曼编码一比对即可
    1. 前缀编码 

      1. 任一字符的编码都不是另一个字符的编码的前缀,不会因为编码的长短不等而让人产生混淆,这就是前缀编码。
  5. 哈夫曼编码构造过程

    1. 首先统计每个字符在数据中出现的频率,将每个字符的频率视为树的权值。
    2. 先把有权值的叶子结点按照从小到大的顺序进行排列,形成一个有序序列。
    3. 每次选择两个权值最小的树(即出现频率最低的两个节点,相对较小的是左孩子)合并为一棵新的二叉树,新树的权值为两个子树权值之和。(即令N为这两棵树的父结点,N节点的出现频率等于这两棵树出现频率的总和)。

    4. 去掉步骤3的两个节点,将父结点N加入步骤2,重新进行计算。

    5. 重复上述过程,直到只剩下一棵树为止,即最终会形成一个根结点。此时便完成了哈夫曼树的构造。

    6. 根据构建好的哈夫曼树,从根节点到每个叶子节点的路径上,左分支标记为0,右分支标记为1,从而得到每个字符的哈夫曼编码。

               


哈夫曼树‌【优化二叉树】(Huffman Tree)

  1. 哈夫曼在编码中用到的特殊二叉树称为哈夫曼树。
    1. 同样,我们在解码的时候还是要用到哈夫曼树。
  2. 树结点间的边相关的数叫做权。
  3. 树的构建基于字符的出现频率,频率高的字符对应的节点更接近树的根结点,频率低的字符对应的节点更远离树的根结点。‌
  4. 【路径长度】为从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目。
  5. 【树的路径长度】为树根到每一结点的路径长度之和。
  6. 【结点带权的路径长度】为从该结点到树根之间的路径长度与结点上权的乘积。
  7. 【树的带权路径长度(WPL)】为树中所有叶子结点的带权路径长度之和。
    1. 哈夫曼树是一种最优二叉树,其带权路径长度最短。

                        

回看此题:

        已知字符集{a,b,c,d,e,f},若各字符出现的次数分别为6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是(        )。

A.00,1011,01,1010,11,100                   B.00,100,110,000,0010,01

C.10,1011,11,0011,00,010                   D.0011,10,11,0010,01,000

因为各字符出现的次数分别为6,3,8,2,10,4,所以根据上面讲到的哈夫曼编码构造过程第2步,先把有权值的叶子结点按照从小到大的顺序进行排列,形成一个有序序列,即:

2,3,4,6,8,10

根据第3步所讲,每次选择两个权值最小的树(即出现频率最低的两个节点,相对较小的是左孩子)合并为一棵新的二叉树,新树的权值为两个子树权值之和。(即令N为这两棵树的父结点,N节点的出现频率等于这两棵树出现频率的总和),即:

2和3为出现频率最低的两个节点,2相对较小,是左孩子,N为2+3=5,即N=5

画图为:

将N加入步骤2,重新进行计算,即:

4,5,6,8,10

根据第3步所讲,即:

4和5为出现频率最低的两个节点,4相对较小,是左孩子,父结点为4+5=9,即N=9

将父结点加入步骤2,重新进行计算,即:

6,8,9,10

根据第5步所讲,重复上述过程,直到只剩下一棵树为止,即最终会形成一个根结点。此时便完成了哈夫曼树的构造,即:

9,10,14

14,19

33

 

根据字符集为{a,b,c,d,e,f},各字符出现的次数分别为6,3,8,2,10,4,所以将上面画好的图替换回来,即:

再根据第6步所讲,根据构建好的哈夫曼树,从根节点到每个叶子节点的路径上,左分支标记为0,右分支标记为1,从而得到每个字符的哈夫曼编码,即:

列表为:

abcdef
00101101101011100

故得到的哈夫曼编码为00,1011,01,1010,11,100

选项:

A.00,1011,01,1010,11,100                   B.00,100,110,000,0010,01

C.10,1011,11,0011,00,010                   D.0011,10,11,0010,01,000

故选A

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言入门笔记:第一节,快速了解R语言——文件与基础操作

关于 R 语言的简单介绍 上一期 R 语言入门笔记里面我简单介绍了 R 语言的安装和使用方法,以及各项避免踩坑的注意事项。我想把这个系列的笔记持续写下去。 这份笔记只是我的 R 语言入门学习笔记,而不是一套 R 语言教程。换句话说:这份笔记不…

创意思维与决策方法——SCAMPER:探索创新思维的利器

探索创新思维的利器:SCAMPER法 在面对复杂问题或需要突破性创意时,我们常常需要一些行之有效的工具来引导思考。SCAMPER法正是这样一个激发创新思维的利器,它通过七个步骤:替代(Substitute)、组合&#xf…

微信小程序调用 WebAssembly 烹饪指南

我们都是在夜里崩溃过的俗人,所幸终会天亮。明天就是新的开始,我们会变得与昨天不同。 一、Rust 导出 wasm 参考 wasm-bindgen 官方指南 https://wasm.rust-lang.net.cn/wasm-bindgen/introduction.html wasm-bindgen,这是一个 Rust 库和 CLI…

自动驾驶3D目标检测综述(六)

停更了好久终于回来了(其实是因为博主去备考期末了hh) 这一篇接着(五)的第七章开始讲述第八章的内容。第八章主要介绍的是三维目标检测的高效标签。 目录 第八章 三维目标检测高效标签 一、域适应 (一)…

计算机毕业设计hadoop+spark+hive图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

极品飞车6的游戏手柄设置

极品飞车,既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速,也可以使用游戏手柄来操作车辆的运行。需要注意的是,极品飞车虽然支持手柄,但是仅支持常见的北通、罗技还有部分Xbox系列的手柄,至于其他的PS4手…

【VBA】EXCEL - VBA 创建 Sheet 表的 6 种方法,以及注意事项

目录 1. 创建一个新工作表,并将其添加到工作簿的末尾 2. 创建一个新工作表,并命名它 3. 创建一个新工作表,并将其插入到指定位置 4. 检查是否已有同名工作表,避免重复创建 5. 创建多个工作表 6. 基于现有模板创建新工作表 …

html文件通过script标签引入外部js文件,但没正确加载的原因

移动端H5应用,html文件通过script标签引入外部js文件,但没正确加载,在移动设备上难以排查。通过PC浏览器打开,发现js被阻止了:blocked:mixed-content。 原因在于: “blocked:mixed - content” 是浏览器的…

虚拟机Centos下安装Mysql完整过程(图文详解)

目录 一. 准备工作 1. 设置虚拟机静态IP 2. 卸载Mysql 3. 给CentOS添加rpm源 二. 安装MySQL 1. 安装mysql服务 2. 启动mysql服务 3. 开启MySQL开机自启动 4. 查看mysql服务状态 5. 查看mysql初始密码 6. 登录mysql ,修改密码 7. 允许外部访问MySQL数据库…

ulimit命令与nginx的联系

华子目录 ulimit使用ulimit命令查看当前限制设置特定限制常用的资源类型临时和永久设置 ulimit与nginx的联系ulimit对Nginx的影响Nginx配置中的相关参数 ulimit 在Linux系统中,ulimit命令用于获取和设置用户级别的资源使用限制。这些限制可以控制诸如可以打开的文件…

初识具身智能

具身智能是智能科学的一个基础问题,在过去的5.4亿年以来,地球上所有生物都是通过身体和环境交互、进化逐步产生的。通俗地讲,具身智能体以第一人称视角身临其境地从环境交互中理解外部世界的本质概念,被认为是通向通用人工智能的重…

【机器人】机器人的数学模型:符号表示、位形空间、状态空间、工作空间

定义 机器人是一种可重复编程的多功能机械臂,他们通过可变程控运动来执行如移动材料、零件、工具或者特种设备等多种任务。 ——美国机器人协会(RIA) 1.1 机器人的数学模型 1.1.1 机器人的符号表示 机械臂:关节joint 连杆link …

VITUREMEIG | AR眼镜 算力增程

根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示,美国市场AR/VR总出货量增长10.3%。其中,成立于2021年的VITURE增长速度令人惊艳,同比暴涨452.6%,成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…

PY_11_01

前言 PY_11_01 抄就行了👻 一、代码步骤 抄就行了👻 def fact(n):if n1:return 1else:return n*fact(n-1)while True:minput(请输入一个正整数m:)if not m.isdigit() or int(m)0:print(输入错误,请重新输入!)else:mint(m)brea…

Richardson-Lucy (RL) 算法的卷积形式推导

Richardson-Lucy 算法从模糊图像中恢复原始图像。Richardson-Lucy 方法假设观测图像的噪声服从泊松分布,是一种极大似然估计方法。 1. 问题定义 假设我们有一个原始图像 f ( x , y ) f(x,y) f(x,y),通过一个已知的点扩散函数 h ( x , y ) h(x,y) h(x,y…

网线直连模式下,ubuntu虚拟机与zynq开发板互ping

目的:想要使用网线将windows网口与zynq开发板网口直连,可以实现通过nfs(network file system)挂载在ubuntu中的根文件系统,从而运行linux,方便linux的驱动开发。 参考文章: 领航者 ZYNQ 之嵌入式 Linux 开…

深入了解 Zookeeper:原理与应用(选举篇)

在上一篇关于 Zookeeper 的介绍中,我们知晓了它在分布式系统中的关键地位以及核心的工作原理框架。今天,重点来深入探究一下 Zookeeper 集群是如何实现领导者选举这一至关重要的环节的。 一、选举触发时机 集群启动时:当一个全新的 Zookeep…

金仓数据库对象访问权限的管理

基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等,都称为数据库对象,对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…

C++并发:线程管控

1 线程基本管控 每个C程序都含有至少一个线程,即运行main()的线程,它由C运行时系统启动。随后程序可以发起更多线程,它们以别的函数作为入口。这些新线程连同起始线程并发运行。当main()返回时,程序就会退出;同样&…

网络爬虫性能提升:requests.Session的会话持久化策略

网络爬虫面临的挑战 网络爬虫在运行过程中可能会遇到多种问题,包括但不限于: IP被封禁:频繁的请求可能会被网站的反爬虫机制识别,导致IP被封。请求效率低:每次请求都需要重新建立TCP连接,导致请求效率低下…