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

  阅读时间: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分钟快速了解霍夫曼编码

  发送编码的文本

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值