2018.2.14 Java中的哈夫曼编码
概念
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
哈夫曼原理
哈夫曼算法流程图
哈夫曼树
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
树节点间的边相关的数叫做权。
从树中的一个节点到另一个节点之间的分支构成两个点之间的路径,路径上的分支数目称作路径长度。图中二叉树a中,跟节点到D的路径长度就是4,b中根节点到D的路径长度为2。树的路径长度就是从树根到每一个节点的路径长度之和。二叉树a的路径长度就为1+1+2+2+3+3+4+4=20。二叉树b的树路径长度就为1+2+3+3+2+1+2+2=16。如果考虑带权的节点,节点的带权的路径长度就是从该节点到树根之间的路径长度乘该节点的权。数的带权路径长度就是所有叶子节点的带权路径长度之和。带权路径长度(WPL)最小的二叉树称作哈夫曼树。
如何构造哈夫曼树
下面我们以【5、8、4、11、9、13】为例来画出哈夫曼树(数字大小代表权重大小,越大的权重越大)
第一步:按从小到大排序。【5、8、4、11、9、13】→【4、5、8、9、11、13】第二步:选最小两个数画出一个树,最小数为4和5。给定的4、5、8、9、11、13为白色, 红色的9为4+5,与给定的白9无关,新序列为:【红9(含子节点4、5)、8、9、11、13】
之后一直重复第一、第二步:排序然后取两个最小值。实际就是一个递归过程
排序:
取两个最小数8和9:
排序
区两个最小数11和9
排序,然后取两个最小数13和17:
取两个最小数20和30:
转载于:https://www.cnblogs.com/qichunlin/p/8448280.html
2018.2.14 Java中的哈夫曼编码相关推荐
- JPEG编码过程中的霍夫曼编码
JPEG编码过程中的霍夫曼编码 jpeg文件中的霍夫曼编码分两个部分对DC系数编码和对AC系数的编码. DC系数的编码 编码过程 DC系数的编码由两部分组成, huffman 编码的bitlen + ...
- java中哈夫曼编码所用的函数_数据结构(java语言描述)哈夫曼编码
原理:哈夫曼编码是根据将已给出的权值作为叶子结点,生成一颗哈夫曼树,然后使得权重最小. 首先生成已给权重的所有的叶子结点,然后取所有节点中最小和次小的结点作为左右孩子生成一个哈夫曼树,计算出父节点的权 ...
- Java如何实现哈夫曼编码
哈夫曼树 既然是学习哈夫曼编码,我们首先需要知道什么是哈夫曼树:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tre ...
- 霍夫曼算法_霍夫曼编码算法
霍夫曼算法 In this tutorial, we'll be discussing and implementing the Huffman Coding Algorithm in Java. 在 ...
- 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码
第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...
- 18.C#写算法之“哈夫曼编码” 是什么鬼?
文章参考自:程序员小灰:漫画:"哈夫曼编码" 是什么鬼? 哈夫曼编码是一种高效的编码方式,在信息存储和传输过程中,用于对信息进行压缩. 计算机系统是如何存储信息的呢? 计算机不是人 ...
- 2022黄文嵩商盛兰张阳徐铭信息论课程作业 哈夫曼编码(Huffman Coding)简介
目录 5G,华为,土耳其--我花了两个月,搞懂了5G背后的秘密_哔哩哔哩_bilibili 一.什么是编码? 二.哈夫曼编码 1.编码过程 2.码方差 3.编码特点 4.人无完人,码无完码 三.总结 ...
- JPEG霍夫曼编码教程
转译自:https://www.impulseadventure.com/photo/jpeg-huffman-coding.html 量化后,霍夫曼/熵编码是JPEG压缩文件大小节省的重要因素之一. ...
- 7-1 哈夫曼编码 (30分)
文章目录 7-1 哈夫曼编码 (30分) 输入格式: 输出格式: 输入样例: 输出样例: 题解 代码 7-1 哈夫曼编码 (30分) 给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给 ...
最新文章
- 观Citrix最新官方发布评测报告有感-外行看热闹,内行看门道
- linux常用操作命令详解
- VS2010中水晶报表插件下载安装方法
- 粒子群算法求解旅行商问题
- Effective Java之通过私有构造器强化不可实例化能力(四)
- jsf 开发_JSF开发人员应该知道的5种有用方法
- html5三角函数怎么用,HTML5(五)html5<canvas路径和三角函数的故事>(下)
- 程序员应该具备的12种能力
- Android系统 miui主题6,miui主题工具-miui主题工具最新版v2.6.2 安卓版_永辉资源网
- UBNT设置AP模式注意事项
- 计算机开机检测dhcp,电脑开机显示dhcp是什么意思
- ARM开发工具综述转
- GBase 8c 的安全特性
- Python之Sqlitespy连接并把Excel内容写到数据库的表中
- 亲测好用的屏幕录制软件:camtasia2021 mac中文版
- Bat文件闪退_启动失败
- 深度学习之(DNN)深度神经网络
- android手机远程视频移动检测的实践
- 思科恢复服务器上的配置信息,思科服务器的配置方法
- IDEA 操作与设置笔记
热门文章
- Win10鼠标拖拽移动文件
- 图数据库:图数据库以及图数据库的使用场景
- MeterSphere 数据库使用
- 猴油编写代码的两点认识
- 后台如何将图片的byte[]转成流传给前端展示
- Palisade DecisionTools Suite Unexpected error解决办法
- HTML学生个人网站作业设计:动漫网站设计——火影忍者(1页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- SAP FI 系列 (013) - 会计凭证的配置
- 平安科技面试经验分享
- 独立开发者一个前端库月入2万刀 AMA