热门标签 | 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分钟快速了解霍夫曼编码

  发送编码的文本

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

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

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


推荐阅读
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 今日深入研究了树状数组,感觉难度较大,通过课件和博客辅助学习,仍有许多疑惑。主要探讨了老师推荐的三道题目,初步掌握了树状数组的基本用法。同时,还学习了逆序数和离散化的概念及其应用。 ... [详细]
  • 本文介绍了在Shader中优化常见数学函数的方法,包括特化和近似计算,以提高渲染性能。这些方法适用于HDR格式和RGBE编码的优化。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 题目涉及 Linux 基础安全问题,提供的文件是一个 `.tar.gz` 压缩包。在 Linux 环境下解压后,需要进一步分析文件内容以发现潜在的安全漏洞和挑战。通过这一过程,可以深入了解 Linux 系统的安全机制和技术细节。 ... [详细]
  • 深入浅出解析HTTP协议的核心功能与应用
    前言——协议是指预先设定的通信规则,确保双方能够按照既定标准进行有效沟通,从而实现准确的信息交换。例如,驯兽师通过拍手使动物坐下,这实际上是一种预设的协议。本文将详细探讨HTTP协议的核心功能及其广泛应用,解析其在现代网络通信中的重要作用。 ... [详细]
  • tarzxvffilename.tar.gz顺便我们了解下linux下压缩与解压命令大全.tar解包:tarxvffilename.tar打包:tarc ... [详细]
  • 在Vite项目优化过程中,通过使用rollup-plugin-visualizer插件,可以有效地对Rollup打包结果进行可视化分析,帮助开发者清晰地了解各个模块的占用情况,从而进行更有针对性的优化。此外,结合其他常用插件,如vite-plugin-compression和vite-plugin-inspect,可以进一步提升项目的性能和可维护性。 ... [详细]
  • 网站前端开发的核心理念与必备技能解析 ... [详细]
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社区 版权所有