当前位置: 首页 > news >正文

信息论(三):霍夫曼编码

我们有一组符号,比如字母,每个符号都有出现的概率。我们想给每个符号分配一个二进制代码(由 0 和 1 组成的字符串),使得:常用符号使用短代码,不常用符号使用长代码,并且没有代码是其他代码的前缀,这样解码就不会产生歧义。

这被称为前缀码,霍夫曼算法(由大卫·霍夫曼于 1952 年提出)可以找到最短的前缀码,即平均长度最接近熵极限 H(X) 的前缀码。

霍夫曼编码(Huffman coding)背后的思想:把这些符号想象成一棵棵小树,每棵树代表一个概率。我们将逐步合并概率最小的节点,直到只剩下一棵树。每次合并都会将两个“轻”的分支合并成一个更重的分支,就像先把最不确定的部分编织在一起一样。

假设我们的数据源包含以下概率:A:0.4,B:0.3,C:0.2,D:0.1。

算法过程如下:

选择两个最小的概率:C(0.2) 和 D(0.1),将它们合并成一个新节点,概率为 0.3,C 和 D 成为该节点的子节点。

现在我们得到:A(0.4), B(0.3), CD。

再次选择两个最小的概率:B(0.3) 和 CD,合并,得到新节点 0.6。

现在:A(0.4),BCD。

合并最后两个节点,A(0.4) + BCD,得到根节点 1.0。

完成!我们得到了一棵二叉树。

接下来是分配位,左移 = 0,右移 = 1(反之亦然)。

一种可能的结果:A: 0,B: 10,C: 110,D: 111。

现在我们得到了变长码,常用符号用较短的码,不常用符号用较长的码。

最后,检查平均长度:L = 0.4(1) + 0.3(2) + 0.2(3) + 0.1(3) = 1.9 比特/符号。

该分布的熵:H = -(0.4log₂0.4 + 0.3log₂0.3 + 0.2log₂0.2 + 0.1log₂0.1) ≈ 1.846 比特。

它们几乎相同,霍夫曼编码使我们达到了熵的极限!任何编码都无法做得更好,除非允许小数位,例如算术编码。

直觉来看,每次我们合并最小概率时,我们实际上是在说:“让最罕见的事件共享一个共同的前缀,因为它们很少被使用。” 这就像构建一种语言,其中你最常用的词都很短,“是”、“否”、“爱”。而你很少用到的词却很长,比如“反政教分离主义”(英文:antidisestablishmentarianism)。这就是压缩的诗意。


霍夫曼编码过程:

输入:选择任意文本,一首诗、一段文字,甚至是一首摇篮曲。

1. 统计每个字母或符号出现的次数。

2. 将这些频率转化为概率。

3. 构建霍夫曼树,逐步合并出现频率最低的字母,直到得到你的编码。

4. 使用这些可变长度的二进制字符串对文本进行编码。

5. 最后,比较该编码与固定长度编码(例如 ASCII,每个字符使用 8 位)的总比特数。

输出:频率表,霍夫曼树,每个符号对应的编码,以及最终的压缩比。

通常情况下,霍夫曼编码几乎神奇地更短。其中,频率越不均匀,意味着某些字母出现的频率远高于其他字母,压缩率就越高。

 

http://www.dtcms.com/a/581450.html

相关文章:

  • 002-GD32L235KBQ6 Keil工程移植J-Link RTT
  • 手机网站建设 苏州企石镇做网站
  • java的设计模式之桥接模式(Bridge)
  • 【Unity踩坑】Error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.26100.0
  • 网站二维码可以做长按识别吗深圳专业网站建设制作价格低
  • 图片优化 上传图片压缩 npm包支持vue(react)框架开源插件 支持在线与本地
  • React Native CLI的搭建
  • 世界互联网大会乌镇峰会:共话数字未来新可能
  • TeamCity更新包
  • 第8届 AiDD峰会 深圳 | “AI+领域”线:解锁未来科技新图景
  • 网站搭建服务器需要多少钱网站运营seo招聘
  • 结构自由度
  • Effective Python 第49条:用__init_subclass__记录现有的子类
  • 《PLC编程与MES系统开发学习指南》详细大纲
  • AbMole小课堂丨L-NAME:一氧化氮合酶(NOS)经典抑制剂在心血管及免疫研究中的应用
  • 【AI入门】通俗易懂讲AI(初稿)
  • 静力水准仪监测核心原理:如何实现高精度沉降监测?
  • 谷歌网站为何打不开网站栏目定位
  • 基于西门子1500仿真软件PLCSIM Advanced 7.0的本机Modbus TCP通信实例之Modbus TCP Sever建立(一)
  • 虫虫wap建站源码the7企业中 英文wordpress模板
  • PHP 表单验证
  • 6-6〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸利用Windows库文件进行攻击-2
  • SSM文创产品推荐系统设计与实现95ml5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • WebSocket 核心 API 速查表
  • 多功能电脑PDF转换工具Icecream PDFv3.15 中文绿色便携版
  • 在线ftp传网站文件有空间域名服务器怎么做网站
  • 独立站的优势和劣势和运营技巧
  • 软考 系统架构设计师系列知识点之杂项集萃(192)
  • 在Vagrant 2.4.9中安装Rocky 9和Docker
  • 儿童网站设计百度怎么做自己网站