赫夫曼算法是啥玩意啊??

  

记得第一次听说哈夫曼编码这个词的时候是在大一上信息与信号处理课上,那时觉得它很深奥,老师只是稍微提了一下这个而已,自己也没有去查找过相关的资料,它到底是什么玩意也不太清楚,通过自己写的一个可视化赫夫曼编码知道了哈夫曼编码的一些应用,知道它的原理就会就会觉得它没有什么,但是假如哈夫曼没有提出这种算法,你会想到这么算不?有时候看到一个理论总觉得简单,就好像牛顿被苹果砸了一下就发现了万有引力定律,但是想想,如果砸的是你,你是否也会发现万有引力定律呢?呵呵,扯远了,我想说的是,哈夫曼算法并不是偶然的,而是哈夫曼经过长期的钻研才总结出来的。

那好,说一下我自己对哈夫曼算法的理解,其实哈夫曼算法形象一点来说就是一颗带权路径长度最小的二叉树也叫做哈弗曼树。哈夫曼首先给出了对于给定的叶子数目及其权值构造最优二叉树的方法,故称其为哈夫曼算法。那么是如何创建出一颗哈弗曼树呢?比如有5个权值v1=1,v2=1,v3=3,v4=5,v5=8,创建哈弗曼时,我们就得将这n个数从小到大排序,为了好说明,这里的权值都是排序好了的,首先以v1和v2为叶子,他们的权值之和为根节点v6=2,再将v6与剩下的排序,再去取出两个权值最小的v6和v3为叶子,他们的和v7=5为根节点,依此类推,直到全部的节点都用完,那么一颗哈弗曼树就建成啦!

哈弗曼算法的最大用途是哈弗曼编码,用于数据压缩,信息时代,人们对使用计算机获取信息、处理信息的依赖性越来越高。计算机系统面临的是数值、文字、语言、音乐、图形、动画、静图像、电视视频图像等多种媒体。大数据量的图像信息会给存储器的存储容量,通信干线信道的带宽,以及计算机的处理速度增加极大的压力。单纯靠增加存储器容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。压缩关键在于编码,如果在对数据进行编码时,对于常见的数据,编码器输出较的码字;而对于少见的数据则用较长的码字表示,就能够实现压缩。

可以这么说很多的数据都是经过哈弗曼编码进行压缩的,可见哈弗曼算法的重要性,下面是我自己写的一个简单的哈弗曼编码软件,可能bug是有的,让大家看看他的界面效果:

  

 

 

 

         其实现在自己应用哈弗曼算法也不是很多,以后可能会用来做压缩软件····

赫夫曼压缩图解(一) QQ不能直接传送文件夹,我们一般都会将它压缩成一个文件之后再发过去,而这里面用到的压缩技术,怎样实现的呢? 今天就来介绍一种最基本的压缩编码方式——赫夫曼编码 一:赫夫曼树概述 在说赫夫曼之前先说明三个概念: 1.1路径长度: 从树中的一个结点到另一个结点叫做一条路径,例如下图A的路径从根节点开始是2。 1.2 叶节点的带权路径:权值(节点的值)乘以路径 例如A点的带权路径为:9*2=18 1.... 阅读详情

相关推荐

c语言实现赫夫曼树的构建以及生成赫夫曼编码(《数据结构》算法6.12)

这个程序是根据《数据结构》算法6.12用c语言实现的程序,赫夫曼树就不多说了,直接看代码,代码上都有注释。 下面代码: #include #include #include #include #include #define MAX_NUM 100 #define inf 2000000000 using namespace std; typedef struct { unsigned in

LiQiyao的博客 6944

哈夫曼树和哈夫曼算法

1、最优二叉树    具有最小加权路径长度的二叉树2、哈夫曼算法    由哈夫曼给出,用于构造最优二叉树的算法3、哈夫曼树    用哈夫曼算法构造的最优二叉树4、哈夫曼算法    很熟,所以就略了5、函数CreateHfmTree的步骤:    -首先,构造n棵哈夫曼树的对象,每棵树只有一个权值为w[i]的根节点,且该对象的weight为w[i],将它们逐一加入优先权队列。    -从优先权队列中...

qq_35455503的博客 1334

数据结构(c)——赫夫曼树与赫夫曼编码

二叉树的一个重要应用——赫夫曼树(最优二叉树),即所有叶子结点的平均带权路径最短。 赫夫曼算法叙述如下: (1)根据给定的n个权值{w1,w2,...wn}构成n棵二叉树的集合F={T1,,T2,...,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均空; (2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上

Jali_li的博客 1698

赫夫曼树及赫夫曼编码、译码的算法实现

赫夫曼树及赫夫曼编码是数据结构与算法中的一个重要知识点,在生活中也是应用广泛,现在我来教大家如何构建一颗赫夫曼树并且实现它的赫夫曼编码。先讲解思路,后面会附完整代码及运行效果图。 构建赫夫曼树的算法思路如下 1.输入一串字符,统计出每个字符的出现频度创建字符频度表。 typedef struct //字符频度表 { int weight; //权值 char c; //对应字符 }F_W; F_W w[100];//字符频度存放数组 int char_count(string s,char a)

q1430186623的博客 3410

算法快学笔记(七):赫夫曼,赫夫曼树,赫夫曼编码

1. 赫夫曼 鼎鼎大名赫夫曼树以及赫夫曼编码都是出自赫夫曼这位大牛之手,为表致敬先简单的介绍赫夫曼大神。 赫夫曼,全名David Albert Huffman,1925年8月9日-1999年10月7日,生于美国俄亥俄州,计算机科学家,为霍夫曼编码的发明者。 1951年,赫夫曼在麻省理工学院(MIT)攻读博士学位,他为了完成一篇题为<<查找最有效的二进制编码>>的报告,研究出...

不积跬步,无以至千里;不积小流,无以成江海! 1368

重温经典之赫夫曼(Huffman)编码

先看看赫夫曼树 假设有n个权值{w1,w2,…,wn},构造一个有n个叶子结点的二叉树,每个叶子结点权值为wi,则其中带权路径长度WPL最小的二叉树称作赫夫曼树或最优二叉树。   赫夫曼树的构造,赫夫曼最早给出了带有一般规律的算法,俗称赫夫曼算法。如下: (1)根据给定的n个权值{w1,w2,…,wn}构造n棵二叉树的集合F={T1,T2,…,Tn},其中Ti中只有一个权值为wi的根结点,

SuperFC之替天行道 5301

赫夫曼树和赫夫曼编码(C语言版)

赫夫曼树和赫夫曼编码(C语言版)一.赫夫曼树(一)赫夫曼树的定义二.赫夫曼编码(一)赫夫曼编码的定义及表示方法三.C语言编写(一)代码设计思路(二)源代码总览(三)部分源代码函数分析四.小结 一.赫夫曼树 (一)赫夫曼树的定义 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度(WPL)最短的树,权值较大的结点离根较近。 二.赫夫曼编码 (一)赫夫曼编码的定义及表示方法 将赫夫曼树权值的

qq2977078774的博客 4644

赫夫曼树及其应用

哈夫曼树及其应用

YMchole的博客 1924

赫夫曼树的构造与存储以及赫夫曼编码与解码算法

程序要求 构建一个赫夫曼树编/译码器。根据提供的字符集和统计结果,按赫夫曼算法构造赫夫曼树,根据赫夫曼树得到每个赫夫曼编码并输出结果,能够将一个字符串转化为对应的赫夫曼编码串,能够将赫夫曼编码字符串译码。 数据结构题集(C语言版)清华大学出版社 p149 5.2 程序代码 #include <stdio.h> #include <malloc.h> #include &...

FoggyProgrammer的博客 1511

【数据结构和算法】超详细,超多图解,赫夫曼树详解

???? 作者:Linux猿 ???? 简介:优快云博客专家????,华为云享专家????,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! ???? 关注专栏:动图讲解数据结构和算法(优质好文持续更新中……)???? ???? 欢迎小伙伴们点赞????、收藏⭐、留言???? 赫夫曼树是在考试、考研、面试中经常提到的一个知识点,下面就让我们一块来看下赫夫曼树及其应用吧! 一、什么是赫夫曼树 ? 在说赫夫曼树之前,一定要先了解一个概念“带权路径长度”,简称WPL。 二、

Muti-Agent 1万+

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

赫夫曼树与赫夫曼编码

1.赫夫曼树也叫最优二叉树,n个权值构造一颗有n个叶子结点的二叉树,且使叶子结点带权路径长度之和最小,则得到一颗赫夫曼树。 2.赫夫曼树的构造 ⑴给定n个权值,构成一个森林的集合F,F中初始为n颗只有一个根节点的二叉树,即n个权值。 ⑵每次从F中取出根节点权值最小的二叉树,作为左右子树,得到一颗新树(这里规范一下,左子树根节点权值小于右子树根节点权值,这样可以得到唯一的赫夫曼树) ⑶将新树加入森林...

weixin_42416780的博客 1870

提示词工程的几个参数

低 temperature + 低 top-p:输出最稳定、最可靠,适合需要准确性和一致性的场景。高 temperature + 高 top-p:输出最多样化、最富有创意,适合需要灵感和探索的场景。Max Length:您可以通过调整max length来控制大模型生成的 token 数。指定 Max Length 有助于防止大模型生成冗长或不相关的响应并控制成本。是一个字符串,可以阻止模型生成 token,指定是控制大模型响应长度和结构的另一种方法。例如,您可以通过添加 “11” 作为。

weixin_44212787的博客 1829

【数据结构与算法】赫夫曼编码

一,基本介绍 二,原理剖析 三,思路分析 四,数据压缩 五,数据解压 六,文件压缩 七,文件解压 八,注意事项

qq_48848473的博客 2925

深入解析Android Qcom Camera HAL3架构与Camx线程模块

本文深入解析了Android Qcom Camera HAL3架构与Camx线程模块的核心原理。文章以高通芯片平台为例,剖析了从按下快门到生成照片的完整Camera流程分析,重点阐述了Camx框架中线程池、消息队列及Fence同步机制如何协同工作,以实现高效、稳定的多线程并发图像处理,为相机性能优化提供理论基础。

weixin_29184075的博客 222

STM32电机库(ST-MC-Workbench)实战指南——三电阻电流采样电路参数配置详解

本文详细解析了STM32电机库(ST-MC-Workbench)中三电阻电流采样电路的参数配置方法,涵盖电阻选型、放大增益计算、滤波时间优化等关键步骤。通过实战案例和调试技巧,帮助工程师快速掌握电流采样技术,提升电机控制系统的精度与稳定性。特别针对ST-MC-Workbench界面参数设置提供了详细指导。

weixin_29186249的博客 512

数据结构与算法——赫夫曼树基本实现

最优二叉树:也称哈夫曼树或者霍夫曼树、赫夫曼树,给定n个权值作为n个叶子结点(每个叶子结点会有权值),构造一颗二叉树,若该树的带权路径长度(wpl)达到最小带权路径长度最短的树,权值较大的结点离根较进。(值都在叶子结点上)路径:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路路径长度:通路中分支的数目若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1下图中,根结点到第三层的路径长度都是3-1=2。

weixin_51351637的博客 3332

避坑指南:Qt5.14.2 ARM交叉编译中那些你可能遇到的‘坑’及解决方案

本文深度解析了Qt 5.14.2在ARM架构上进行交叉编译的完整流程与常见难题。重点阐述了如何精准匹配交叉编译器与目标板环境、正确配置sysroot以及使用configure参数的艺术,并针对编译过程中的头文件缺失、链接错误等典型“坑”提供了经过验证的解决方案,旨在帮助开发者成功构建适用于嵌入式设备的Qt运行时库。

weixin_29279101的博客 355

赫夫曼编码

1、基本介绍 赫夫曼编码也翻译为哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码 2、原理剖析 2.1、通信领域中信息的处理方式1-定长编码 i like like like java do you like a java

舒克日记的博客 1万+

mediasoup源码分析(二十)服务端架构设计

目录 简介 信令服务(房间服务) 调度服务 媒体服务 简介 流媒体服务器大的方向上可以分为上述三个模块。目前行业内都是分布式服务,独立部署。mediasoup信令与媒体之间虽然可以管道通信。但在行业内,服务之间通过管道通信用的少。 一般是rpc、mq,或者传统的tcp。这块licode架构比较不错,licode是信令和媒体服务通过MQ消息队列解耦。 下面介绍一下这三个服务主要功能,当然文中所说也是一家之言。 信令服务(房间服务) 信令服务也称为房间服务。有的企业把信令和房间分开,信..

lcalqf的专栏 1546

Android Binder的两三事--基于Android14源码

Android14-Framework-Binder

保持专注,保持热爱 1142

数据结构实验六——赫夫曼树及赫夫曼编码算法实现(2021级zzu)

数据结构实验六——赫夫曼树及赫夫曼编码算法实现(2021级zzu)

weixin_69137951的博客 1495

一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

本文主要译至并加上了部分笔者的见解,对于全面理解LSTM有一定的帮助。

zik的博客 3079

【数据结构】——赫夫曼树

本章重点讲解二叉树的应用——赫夫曼树(也叫哈夫曼树),

2301_76695577的博客 1434

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

赫夫曼树及赫夫曼编码

以下面的例子来看一下 已知某系统在通信联络中只可能出现8种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试编写算法求其赫夫曼编码。 #include #include #define UINT_iMAX 100 using namespace std; typedef struct { int weight; int parent,

奋斗在路上 2969

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

求解赫夫曼编码的算法 数据结构算法6.12、6.13

由于赫夫曼树中没有度为1的结点(这类树又称严格的(strict)(或正则的)二叉树),则一棵有n个叶子结点的赫夫曼树共有2n-1个结点,可以存储在一个大小为2n-1的一维数组中。编码的方法有两种,一种是从叶子到根逆向求解每个字符的赫夫曼编码,对应算法6.12,另一种是直接从根出发,遍历整棵赫夫曼树,求得各个叶子结点所表示的字符的赫夫曼编码,对应算法6.13。由于赫夫曼树中没有度为1的结点,根据二叉树的性质(叶子结点数等于度为2的结点数加一)可知:总结点数 m=2n-1。

2301_81316166的博客 906

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: Java中的异常机制及其解决
下一篇: 明天你能干什么,取决于今天你在干什么
Champion_netjava
博客等级 码龄16年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值