热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

5分钟快速了解霍夫曼编码

阅读时间:3分钟霍夫曼编码算法是许多压缩算法(例如DEFLATE)的基石,PNG图像格式和GZIP都是用的它。您是否想知道&

  阅读时间:3分钟

  霍夫曼编码算法是许多压缩算法(例如DEFLATE)的基石,PNG图像格式和GZIP都是用的它。

  您是否想知道:我们如何压缩某些东西而又不丢失任何数据?为什么有些东西压缩得比其他东西好?GZIP如何工作?5分钟以内

  霍夫曼编码可以用于任何数据,字符串是很好的例子,霍夫曼编码利用了最常用的字符比不常用的字符占用更少的空间这一特性。

  编码字符串

5分钟快速了解霍夫曼编码

  让我们使用霍夫曼编码来压缩12个字符的“do or do not”字符串。

  它有几个重复的字符,我们假设存储每个字符需要8位,共96位,但是使用Huffman编码可以做得更好!

  我们从建立树形结构开始。我们数据中最常见的字符更接近树的根,而离根最远的节点表示次要字符。(如下图)

  

5分钟快速了解霍夫曼编码

  字符串中最常见的字符是'o'(代表4个字符)和空格(代表3个字符)。请注意,到那些字符的路径离根只有两步之遥,而对于最不常见的字符('t')则只有三步之遥。

  现在,我们可以存储字符的路径,而不是存储字符本身。

  我们用第一个字母d来举例,我们从买游戏平台根节点开始,然后沿着树一直向着要编码的字符前进。走右边存一个1,走左边存一个0,如下图所示:

  

5分钟快速了解霍夫曼编码

  最终结果是1 0 0,是3位而不是8位,这是一个很大的改进!

  整个编码后的字符串如下所示:

  

5分钟快速了解霍夫曼编码

  总共是29位而不是96位,没有数据丢失,是不是被震撼到了?

  解码字符串

  要解码我们的文本,我们只需跟随路径傻瓜前行就可以还原我们的字母,比如0 0 表示O,然后从顶部重新开始查找:

  

5分钟快速了解霍夫曼编码

  发送编码的文本

  当我们将编码后的文本发送给其他人时,他们不也需要树吗?是的!另一端需要相同的霍夫曼树才能正确解码文本。

  最简单但效率最低的方法是将树与压缩文本一起发送。

  我们也可以先约定同一棵树,然后在对任何字符串进行编码或解码时都使用该树。


推荐阅读
  • mapreduce原理_MapReduce原理及WordCount实践
    参考链接:https:www.cnblogs.comlaowangcp8961946.html一、MapReduce流程1.1Mapreduce整体流程: ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 本文介绍了在Linux系统下进行文件压缩与解压的常用命令,包括tar命令的基本使用和参数,以及gzip、bz2、compress、rar和zip等不同格式的压缩与解压方法。同时还提供了常见的压缩文件后缀名及对应的解压命令,方便用户进行文件的压缩和解压操作。 ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • 现在很多App在与服务器接口的请求和响应过程中,为了安全都会涉及到加密和解密的问题,如果不加的话就会是明文的,即使加了GZIP也可以被直接解压成明文。如果同时有Android和IO ... [详细]
  • 开发中,EXT封装的.NET控件,使用了ExtJsExtenderControl的开源控件,发现个问题,就是每次控件加载,都需要调EXT_ALL.JS文件,600K,导致页面加载很慢。想对这个问题进行 ... [详细]
  • Linux操作系统回炉复习各种常用命令集合解析
    Linux操作系统回炉复习各种常用命令集合解析猿码互联猿码互联今天Linux终端命令格式目标了解终端命令格式知道如何查阅终端命令帮助信息01.终端命令格式command[ ... [详细]
  • 用SpringBoot实现万能文件在线预览
    推荐一个用SpringBoot搭建的文档在线预览解决方案:kkFileView,一款成熟且开源的文件文档在线预览项目解决方案,对标业内付 ... [详细]
  • 1.man(相当于cmd--help)对不熟悉的命令想查询详细使用方法的帮助解释可以使用eg:manls就可以查看ls相关的用法注: ... [详细]
  • Chrome浏览器非常强大,使用Chrome浏览器对页面性能进行检测,根据测试的结果进行优化。当然这个结果只是参考,在实际的项目中肯定有特殊情况存在,并不能为了满足某项测试结果而忽略特定情况的存在。1 ... [详细]
author-avatar
印度神油两性a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有