原文地址:http://www.toutiao.com/a6412852281302466818/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=9676479737&utm_medium=toutiao_android


霍夫曼编码压缩算法,是数据压缩中经典的一种算法。这是一种根据文本字符出现的频率,重新对字符进行编码,频率越高的词,编码越短,从而达到数据压缩的效果。

假设我们有这样的一段数据需要进行编码——“beep boop beer!”。这段字符通过ASCII编码后的结果为62 65 65 70 20 62 6F 6F 70 20 62 65 65 72 21 (十六进制),总共有十五个字节。

首先,我们先计算每个字符出现的频率,经过我们统计,得到下面一张表:

然后把这些数放到优先级队列中,从左到右,频率逐渐增加。

下面我们需要把这个队列,转换成霍夫曼二叉树,这是一个带有权重的二叉树,在队列中每个字符出现的次数,标识这个字符的权重,霍夫曼二叉树始终保证权重高的在越高的地方。下面来介绍,二叉树是如何演变的。

我们从最左边开始,取两个元素来构造一个二叉树(第一个元素是左结点,第二个是右结点),并把这两个元素的权重相加,得到新的空元素。

同理,我们继续取最左边两个元素,进行权重相加(2+2=4),相加结果变大,需要对权重进行重新排序。

继续执行同样的操作,这里可以看到自底向上的构建二叉树的一个过程。

最后,我们得到这样一个带有权重的二叉树:

这里,我们把这个树的左边分支用0编码,右边分支用1,这样我们就可以遍历这棵二叉树获取每个字符的编码,例如:‘b’的编码是 00,’p’的编码是101, ‘r’的编码是1000。我们可以发现出现次数越多的字符会越在上层,它的编码也越短,次数少的字符,编码越长

最后我们可以得到下面这张编码表:

利用这个编码表我们对字符串“beep boop beer!”重新进行编码,得到:0011 1110 1011 0001 0010 1010 1100 1111 1000 1001。共计40位二进制,而之前没重新编码时,是15字节共120位,这样看来压缩比例还是比较客观的。

算法——霍夫曼编码压缩算法相关推荐

  1. 霍夫曼树和霍夫曼编码以及霍夫曼编码的应用

    文章目录 霍夫曼树介绍 1.1霍夫曼树的定义 1.2霍夫曼树的几个概念 1.3构建霍夫曼树的过程 1.4代码实现霍夫曼树 霍夫曼编码介绍 什么是霍夫曼编码 通信领域的应用 字符串压缩 1.构造霍夫曼树 ...

  2. Zlib压缩算法:LZ77、LZ78、霍夫曼编码、滑动窗口、Rabin-Karp算法、哈希链、I/O缓冲区

    Table of Contents 1.简介 1.1 什么是zlib 2.压缩算法 2.1 放气 2.2 LZ77 2.2.1 滑动窗口 2.2.2 长距离对 2.3 霍夫曼编码 3. zlib的实现 ...

  3. 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码

    一. 诞生原因 找出存放一串字符所需的最少的二进制编码. 二. 构造方法 首先统计出每种字符出现的频率,即:概率.权值. 例如:频率表 A:60,    B:45,   C:13   D:69   E ...

  4. 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  5. C语言Huffman Encode霍夫曼编码的算法(附完整源码)

    C语言Huffman Encode霍夫曼编码的算法 C语言Huffman Encode霍夫曼编码的算法完整源码(定义,实现,main函数测试) C语言Huffman Encode霍夫曼编码的算法完整源 ...

  6. 贪心算法之最小堆实现霍夫曼编码

    贪心算法之最小堆实现霍夫曼编码 实现之前需要学习的地方: 如果你不了解堆.堆的插入.堆的删除,可以先看下我前面几篇博客 http://blog.csdn.net/u011068702/article/ ...

  7. 贪心算法(Greedy Algorithm)之霍夫曼编码

    文章目录 1. 贪心算法 2. 应用 2.1 找零钱 2.2 区间覆盖 2.3 霍夫曼编码 霍夫曼编码完整代码 1. 贪心算法 我们希望在一定的限制条件下,获得一个最优解 每次都在当前的标准下做出当下 ...

  8. 算法科普:有趣的霍夫曼编码

    前言 霍夫曼编码 ( Huffman coding ) 是一种可变长的前缀码.霍夫曼编码使用的算法是 David A. Huffman 还是在MIT 的学生时提出的,并且在 1952 年发表了名为&l ...

  9. 程序员的算法课(8)-贪心算法:理解霍夫曼编码

    一.一种很贪婪的算法定义 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. [百度百科]贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体 ...

  10. 霍夫曼算法_霍夫曼编码算法

    霍夫曼算法 In this tutorial, we'll be discussing and implementing the Huffman Coding Algorithm in Java. 在 ...

最新文章

  1. Jquery JQZoom Plugin 放大鏡效果 Two
  2. 利用CSDN将图片自动存入AI Studio :pic2bml
  3. android7.1.2 user版本打开usb调试功能
  4. 数据结构-挖坑填数+分治法解决快速排序问题(java+c)
  5. 彻底关掉win10自动更新_win10系统explorer.exe错误的解决教程
  6. 10款微信公众平台相关的开源软件(转)
  7. python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别
  8. flyway版本号_Flyway版本化管理数据库脚本
  9. WinDBG中设置条件断点
  10. 10.8 wtx模拟题题解
  11. OSGi中的ServletContext
  12. [Win+RF]新人视角-快速上手RF的接口测试
  13. NLP ---文本情感分析
  14. 大数据趋势下,服务风暴必将来临
  15. 【160】VS2022调试通过海康摄像头烟火识别SDK
  16. 网络、如何通信、TCP/IP协议
  17. 自动驾驶在干线物流的商业化进展综述
  18. awk截取字符命令_bash中的字符截取命令cut和awk
  19. 树莓派新手入门:烧录系统、换源、基础配置、putty或vnc远程连接
  20. 计算机视觉(2)随记

热门文章

  1. error: metrics not available yet
  2. 最新上市公司商誉减值损失数据
  3. 三角函数诱导公式理解
  4. 手机连接Wi-Fi不能上网之DNS异常
  5. 十年前加入互联网改变世界,十年后加入顶级微信团队一起炸屎
  6. 机器人及其相关零件的发展
  7. 英文名字及意义(超全)
  8. 保温杯市场前景分析及行业研究报告
  9. 200行代码让你找回童年的记忆,C + EasyX实现《拼图》小游戏!
  10. Java实现发送短信