数据结构——哈夫曼树与哈夫曼编码

数据结构题:根据所给权值设计相应的哈夫曼树,并设计哈夫曼编码 文章目录前言一、涉及到的知识点二、例题讲解1、例题12、例题2总结 前言 在数据结构树的这章中,常常有题目,是这样的“给定一组权值…,试设计相应的哈夫曼树”,有的还要求其带权路径长度,还有的是给定字符以及其使用频率,要求设计一个哈夫曼编码,同时要求设计哈夫曼树等等。 为此这种题的步骤解法,我将做详细的讲解,本文介绍两种题型,分别是求哈夫曼树以及设计哈夫曼编码,希望对阅读本博客以及有需要的小伙伴有用,如有错误不当之处,欢迎大佬们指正! (????????????) 提示:以下是本篇文章正文内容,下面案例 阅读详情

1.哈夫曼编码 Huffman code:

  是一种文本压缩算法,这种算法依据的是不同符号在一段文本中相对出现的频率。假设一个文本是由a,u,x,z组成的字符串,其长度为1000,每个字符用1字节来存储,共需要1000字节,即8000位。如果每个字符用2位二进制来编码:00=a, 01=x, 10=u, 11=z.那么,用2000位空间即课表示1000个字符。此外,我们还需要一定的空间来存放编码表,它可以采用如下的存储格式:

    符号个数,代码1,符号1,代码2,符号2,...

  符号个数即以及每个符号分别占8位,每个代码占 log2(符号个数) 向上取整 位。因此,在这个例子中,编码表需要5*8+4*2 = 48 位。压缩比为8000/2048 = 3.9。

  即一段文本的压缩结果是:压缩有的字符串+编码表。

  在字符串aaxuaxz中,a出现3。一个符号出现的次数称为频率frequency. 当不同字符出现的频率有很大差别时,我们可以通过可变长编码来缩短编码串的长度。这带来一个 问题:每次提取多少为代码来解释符号?——只要没有任何一个代码是另一个代码的前缀就可以!因此,当从左到右检查编码位串时,可以得到与一个确切的代码相匹配的字符。

  可以利用扩展二叉树(增加了外部节点的二叉树)来派生一个特殊的类,对具有上述前缀性质的代码,实现可变长编码。这个用于编码的类称为霍夫曼编码。

  在一棵扩展二叉树中,从根到外部节点的路径可用来编码,方法是用0表示向左子树移动一步,1表示向右子树移动一步。我们用S表示待编码字符组成的字符串,F(x)是字符x的出现频率。

  对于一棵具有n个外部节点的扩展二叉树,且外部节点标记为1,2,...,n其对应的编码位串的长度为: WEP = ΣL(i)*F(i)

  L(i)是从根到外部节点i的路径长度(即路径的边数);WEP是二叉树的加权外部路径长度 weighted external path length. 为了缩短编码串的长度,必须使用二叉树代码,二叉树的外部节点与要编码的字符串的字符对应,且WEP最小。一棵二叉树,如果对一组给定的频率,其WEP最小,那么这颗二叉树称为霍夫曼树 Huffman tree。

  用霍夫曼编码对一个一个字符串或一段文本进行编码,需要做的是:

  1.确定字符串的符号和它们出现的频率。

  2.建立霍夫曼树,其中外部节点用字符串中的符号表示,外部节点的权用相应符号的频率表示。

  3.沿着从根到外部节点的路径遍历,取得每个符号的代码。

  4.用代码替代字符串中的符号\






【数据结构】哈夫曼树及哈夫曼编码实现(C语言) 目录1. 哈夫曼树1.1 基本概念1.2 构造哈夫曼树1.3 哈夫曼树的类型定义1.4 哈夫曼树创建的算法实现2. 哈夫曼编码实现2.1 哈夫曼编码2.2 完整代码2.3 运行结果 1. 哈夫曼树 1.1 基本概念 路径:指从根结点到该结点的分支序列。 路径长度:指根结点到该结点所经过的分支数目。 结点的带权路径长度:从树根到某一结点的路径长度与该结点的权的乘积。 树的带权路径长度(WPL):树中从根到所有叶子结点的各个带权路径长度之和。 哈夫曼树是由 n 个带权叶子结点构成的所有二叉树中带权路径长度最短的 阅读详情

相关推荐

【数据结构】哈夫曼树、哈夫曼编码

???概念1:什么是路径???? 概念2:什么是路径长度????概念3:什么是结点的权????概念4:什么是结点的带权路径长度????概念5:什么是 树的带权路径长度???最优二叉树(哈夫曼树)??构建哈夫曼树??哈夫曼编码??哈夫曼编码类【算法实现】在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径。在一棵树中,从一个结点到另一个结点所经过的**“边”的数量**,被我们称为两个结点之间的路径长度。在实际应用中,人们往往会给树中的每一个结点赋予一个具有某种实际意义的数值,这个数

m0_67401417的博客 3213

数据结构实验--哈夫曼编码

文章目录一、实验内容二、验收/测试用例三、代码示例 一、实验内容 给定报文中26个字母a-z及空格的出现频率{64, 13, 22, 32, 103, 21, 15, 47, 57, 1, 5, 32, 20, 57, 63, 15, 1, 48, 51, 80, 23, 8, 18, 1, 16, 1, 168},构建哈夫曼树并为这27个字符编制哈夫曼编码,并输出。模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1哈夫曼编码串,翻译出对应的原文。 参考

跳跳糖°的博客 1272

数据结构学习笔记——哈夫曼树与哈夫曼编码

哈夫曼树是一种特殊的二叉树(其中哈夫曼二叉树是哈夫曼n叉树的一种,以下都以哈夫曼二叉树为例),树中所有叶子结点都带有权值,带权路径长度最小的二叉树称为哈夫曼树,也称为最优二叉树。哈夫曼树既不是满二叉树,也不是完全二叉树,只是一棵二叉树。............

小宇y的博客 7590

树的最小带权路径问题:百练4080 哈夫曼编码树

题目描述: Construct an expanded binary tree with nexternal nodes, each external node Ki related to a weight Wi, which minimizes thesum of the external path length of leaf: Min( W1 * L1 + W2 * L2 + W3 * L3 + … + Wn * Ln) Wi: the weight of each node Li: the pat

qq_48988844的博客 488

大彩串口屏+LUA避坑指南:从Flash读写到控件状态配置的5个常见问题

本文针对大彩串口屏的LUA脚本开发,深度剖析了Flash数据存储与控件状态配置中的5个常见陷阱。重点讲解了如何通过标志位安全初始化Flash、正确处理多字节数据转换,以及如何精准配置按钮与文本控件的状态与事件响应,帮助开发者提升开发效率与代码可靠性。

weixin_27945229的博客 243

LabVIEW与MySQL实时数据存储:传感器采集与数据库同步实践

本文详细介绍了如何将LabVIEW与MySQL结合,实现传感器数据的实时采集与高效存储。通过设计合理的数据库表结构、配置LabVIEW数据库连接工具包,并编写核心的采集与存储VI,构建了稳定可靠的数据链路。文章重点分享了批量插入、连接管理、时间同步等关键优化技巧与避坑指南,帮助工程师应对工业监控、环境监测等场景下的实时数据同步挑战。

weixin_29281915的博客 261

使用哈夫曼树实现文本编码、解码

使用二叉树存储结构的链表,进行构造二叉树,对指定字符串编码解码

roc13718296531的博客 6664

Data+AI新玩法:Text2SQL让数据查询变得如此简单!

你是不是也遇到过这种情况?明明手头有海量数据,却因为SQL这道“门槛”,让分析和决策变得复杂和拖沓。你可能想着:“要是我能直接用自然语言和数据库对话,那该多好!你不是一个人在这样想,Text2SQL技术正是为了帮你摆脱这一困境而诞生的。

Ase5gqe的博客 865

数据结构与算法--哈夫曼树应用

数据结构与算法--哈夫曼树应用

qq_64010161的博客 2050

Bellhop海底地形仿真入门:从MATLAB数据导入到3D可视化(附避坑指南)

本文详细介绍了Bellhop海底地形仿真的完整工作流程,从MATLAB数据导入、清洗与坐标转换,到构建.bty输入文件,再到生成高质量3D可视化结果。文章重点解析了数据格式、深度值正负、单位统一及坐标投影等关键环节的避坑指南,并提供了可复用的代码片段,帮助用户高效完成从原始数据到仿真成果的转换。

weixin_29275257的博客 194

ADS仿真设计平行定向耦合器学习笔记

ADS仿真设计平行定向耦合器

qq_36521926的博客 1万+

数据结构:哈夫曼树

哈夫曼树与哈夫曼编码的java实现

yuhaomogui的博客 3053

从ABS到EBS再到AEBS:商用车制动安全系统的“三代同堂”与技术演进史

本文详细解析了商用车制动安全系统从ABS到EBS再到AEBS的技术演进历程。通过对比三代系统的性能差异和应用效果,揭示了电子控制单元(ECU)在提升制动精度和安全性的核心作用,并展望了智能制动技术的未来发展趋势。

weixin_42651748的博客 329

数据结构之构造哈夫曼树及哈夫曼编码

一、实验目的 1、了解哈夫曼树的概念,掌握哈夫曼树的存贮结构和构造方法。 2、掌握哈夫曼树构造的算法,掌握哈夫曼树编码的形成及特点。 二. 实验内容与要求 1.设计哈夫曼树的存贮结构。 2. 自行设计若干个字符信息及权值,根据哈夫曼树的构造方法,建立一棵二叉树。 3. 根据建立的哈夫曼树,对其中字符信息进行哈夫曼编码,并输出其编码。 4. 实现提示:    首先定义哈夫曼树的存贮结

cloud_Z的专栏 4349

自动驾驶轨迹规划算法——Apollo EM Planner

Apollo EM Planner 是百度自动驾驶系统中的轨迹规划算法,采用期望-最大化(EM)迭代优化思想。其核心是将轨迹规划分解为路径优化(E-Step)和速度优化(M-Step)两个子问题,在Frenet坐标系下交替求解。算法先通过动态规划(DP)搜索粗路径,再使用二次规划(QP)进行平滑优化,并结合障碍物信息生成安全走廊。相较Lattice、Hybrid A*等规划器,EM Planner具有更好的实时性、动态障碍物处理能力和轨迹平滑性,适用于城市道路、高速公路等复杂场景。该算法通过解耦路径与速度优

swaggytiger的博客 2666

今天出一个candence 17.4 allego的安装教程

7、安装完成,接下来进行补丁更新,找到Hotfix_SPB17.40.035_wint.iso软件 ,右击鼠标选择装载。6、因为之前选择的定制安装,这一步不知道具体要安装啥,因此都勾选,点击NECK,接下来等待安装完成。后面经过仔细对比,发现是前面更新补丁时选择了F盘,F盘是candence安装包,不是补丁。8、在破戒大师里选择安装更新补丁,并找到刚才装载的安装包里的程序,点击下一步。3、打开破戒大师,找到安装candence进行如下图选择,点击下一步。有耐心的人可以重新卸了再装一边,我就不卸了,直接装。

hcvinh的博客 2726

数据结构C++——哈夫曼树及哈夫曼编码

数据结构(C++)——哈夫曼树及哈夫曼编码 文章目录数据结构(C++)——哈夫曼树及哈夫曼编码一、哈夫曼树的介绍及概念二、哈夫曼树的构造及打印①哈夫曼树的存储结构②构造哈夫曼树③Select()函数的代码实现④打印哈夫曼树⑤测试的完整代码二、哈夫曼编码①哈夫曼编码的相关概念②哈夫曼编码的算法实现③输出哈夫曼编码④测试的完整代码三、总结 一、哈夫曼树的介绍及概念 哈夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,在实际中有广泛的用途。 (1) 路径:从树中一个结点到另一个结点之间的分支构成这两

qq_54162207的博客 7802

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构:哈夫曼树、哈夫曼编码的实现

复习数据结构1:哈夫曼数和哈夫曼编码 大部分代码是以前写的,所以是C语言,只完成了生成哈夫曼树。 复习期间又完善了哈夫曼树生成编码的部分。 如果使用C++/Java实现,利面向对象的优势应该更好。 这里不再阐述哈夫曼编码为何是最短前缀编码的理论知识 哈夫曼编码实现原理非常简单: 1.利用贪心的思想,构造当前最优树 2.进而构造出整体的最优树 3.再利用哈夫曼树生成哈夫曼编码 实现的难点在于数据结构的设计,操作数据结构也要仔细。 尽量通过模块化的思想逐步解决。 首先是结构体和函数声明 主要是三个函数: H

weixin_41570025的博客 1201

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构学习之哈夫曼树和哈夫曼编码

数据结构学习之哈夫曼树和哈夫曼编码 0x1 前言  终于完成作业了,有点小开心,虽然翘了一上午的课。 0x2 题目 0x2.1 题目要求 ​ 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为7,19,2,6,32,3,21,10。试为这8个字母设计哈夫曼编码。 0x2.2 题目输入 /* 8 a 0.07 b 0.19 c 0.02 d 0.06 e 0.32 f 0.03 g 0...

weixin_30708329的博客 915

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

24考研数据结构-哈夫曼树与哈夫曼编码

带权路径与哈夫曼

VengaZ的学习博客 632

数据结构之树(七)——哈夫曼树及哈夫曼编码

哈夫曼树的哈夫曼算法描述: 1.根据给定的n个权值{w1,w2,....,wn}构成n棵二叉树的集合F={T1,T2,...,Tn},其中每棵二叉树Ti中只有一个带权为wi根结点,其左右子树均为空。 2.在F中选取俩棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。 3.在F中删除这俩棵树,同时将新得到的二叉树加入F中。 4.重复2和3步骤,直到F只含一颗树为之。这棵树便是哈夫曼树。

BackkomCoder的博客 2477

408数据结构学习笔记——树与二叉树的应用——哈夫曼树和哈夫曼编码、并查集

1.哈夫曼树和哈夫曼编码 2.并查集

JiangNan_1002的博客 2885

数据结构 - 哈夫曼树和哈夫曼编码

哈夫曼树和哈夫曼编码 文章目录哈夫曼树和哈夫曼编码哈夫曼树引子定义与原理 哈夫曼(Huffman)编码是个实用的压缩编码方案。 哈夫曼树 引子 我们观察以下代码: if( a < 60) { printf("不及格\n"); }else if( a < 70){ printf("及格\n"); }else if( a < 80){ printf("良好\n"); }else...

Hello World 2202

数据结构实验5:哈夫曼树与哈夫曼编码

通过本次实验,我更深入地理解了哈夫曼编码的原理和实现方式,并学会了如何将算法封装。在本次实验中,我们设计了一个用于构建哈夫曼树和生成哈夫曼编码的数据结构和算法。我们进行了两组测试,分别使用不同的输入数据来测试哈夫曼树的构建和编码生成功能。从测试结果可以看出,哈夫曼树构建和编码生成功能正常工作,成功生成了有效的哈夫曼编码。在解决这个问题中,我学到了如何构建哈夫曼树和生成哈夫曼编码。2、实现哈夫曼算法,实现哈夫曼树的存储并求出哈夫曼编码。

宁清的博客 901

【数据结构】哈夫曼树与哈夫曼编码的Python实现及应用

用python实现哈夫曼树与哈夫曼编码,并通过哈夫曼编码压缩核酸序列信息。

weixin_43643877的博客 2549
上一篇: 八大排序算法 简练讲解
下一篇: 数据结构——并查集
ZDF19
博客等级 码龄12年 5粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值