news 2026/5/30 17:43:47

[信息论与编码理论专题-39]:算术编码不是给每个符号分配一个“码字”,而是把整个消息压缩成一个“小数”——这个小数越精确,信息量越大。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[信息论与编码理论专题-39]:算术编码不是给每个符号分配一个“码字”,而是把整个消息压缩成一个“小数”——这个小数越精确,信息量越大。

一、对比哈夫曼编码:为什么需要算术编码?

先看大家熟悉的哈夫曼编码

  • 每个字符单独编码,比如:
    A → 0B → 10C → 11
  • 编码长度必须是整数位(1位、2位……)
  • 问题:如果某个字符概率是 0.9(比如英文中空格很常见),理论上它只需要不到 1 位就能表示(香农熵 ≈ 0.47 bit),但哈夫曼最少也得用 1 位,浪费了!

算术编码的突破
不再限制每个符号必须用整数位,而是把整条消息映射到一个0 到 1 之间的实数区间,用这个区间的任意一个数(比如 0.3527)来代表整条消息!


二、通俗例子:用“猜数字”理解算术编码

想象你在玩一个猜数字游戏

我心里想一个 0 到 1 之间的数,你要通过我的提示不断缩小范围,最后猜中它。

现在,我们用这个思路来“编码”一条消息,比如:"AB"

假设我们知道每个字母出现的概率:

  • A:80%(0.8)
  • B:20%(0.2)

第一步:划分初始区间 [0, 1)

  • 把 [0, 1) 按概率切分:
    • A 占前 80% → [0, 0.8)
    • B 占后 20% → [0.8, 1)
10 ────────┬─────────────── 1 2 │ 3 A(0.8) B(0.2)

第二步:处理第一个字符 'A'

  • 因为第一个字符是 A,所以新范围缩小到 [0, 0.8)

第三步:在 [0, 0.8) 内,再按概率细分

  • 在这个小区间里,继续按 A:80%、B:20% 划分:
    • A 的子区间:0 + 0.8 × 0.8 = 0.64 → [0, 0.64)
    • B 的子区间:0.64 到 0.8 → [0.64, 0.8)
10 ────────┬─────────────── 0.8 2 │ 3 A(0.64) B(0.16)

第四步:处理第二个字符 'B'

  • 所以最终区间是[0.64, 0.8)

第五步:选一个数代表整个消息

  • 只要选这个区间里的任意一个数,比如0.7,就可以代表 "AB"!
  • 解码时,从 0.7 出发,反向推回去:
    • 0.7 在 [0, 0.8) → 第一个是 A;
    • 在 A 的区间里0.7 落在 B 的子区间→ 第二个是 B;
    • 得到 "AB" ✅

三、为什么更高效?

  • 哈夫曼编码 "AB" 可能需要:A=0(1位),B=1(1位)→ 共2 位
  • 算术编码用一个小数(如 0.7)表示,实际存储时只需足够精度的二进制小数,比如:
    • 0.7 的二进制 ≈ 0.101100110011...
    • 只需 约 1.32 位(理论极限 = -log₂(0.8×0.2) ≈ 2.64 bits / 2 chars = 1.32 bpc)

✅ 算术编码可以逼近香农熵的理论极限,比哈夫曼更省空间!


四、关键特点总结

表格

特点说明
整条消息一个数不是逐个字符编码,而是整体映射到一个区间
支持非整数码长高频符号“贡献”的区间大,所需精度低,节省比特
接近理论最优平均码长 ≈ 信息熵,优于哈夫曼
适合高冗余数据如文本、DNA序列、传感器数据

五、现实中的应用

虽然算术编码更优,但因涉及浮点运算和专利问题,早期用得少。如今广泛用于:

  • JPEG 图像压缩(可选算术编码,但多用哈夫曼)
  • H.264/HEVC 视频编码(CABAC:基于上下文的自适应算术编码)
  • 数据压缩工具(如 bzip2 的部分变种)

✅ 最后一句话记住它:

算术编码就像把一整句话“折叠”进 0 到 1 之间的一个小缝隙里,缝隙越小,信息越密集;只要记住缝隙里的任意一个点,就能还原整句话。

字符串的长度决定了浮点区间计算的次数,决定了嵌套的子区间的个数。

字符的个数决定了最外层区间的个数。

第一个字符决定了数值所在的第一个区间位置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 22:04:05

[信息论与编码理论专题-40]:算术编码的优缺点与应用场景

算术编码(Arithmetic Coding)是信息论中一种接近理论极限的无损数据压缩方法,相比哈夫曼编码等传统方法具有显著优势,但也存在一些局限。以下是其核心优缺点与典型应用场景的清晰梳理: 一、优点 ✅ 1. 压缩效率极高&a…

作者头像 李华
网站建设 2026/5/29 3:38:19

别喊北美SaaS黄昏了!真相是,软件的天早变了

最近华尔街对于软件行业似乎忧心忡忡。从Salesforce到Adobe,再到SAP,一批曾被视作企业数字化基石的软件巨头,突然被贴上危险标签。甚至有人开始认真讨论一个问题:企业软件会不会成为历史。这种焦虑可太熟悉了!云计算出…

作者头像 李华
网站建设 2026/5/30 14:12:58

Java如何编写文档注释,实现javadoc编程

目录 一、什么是javadoc二、javadoc为什么会找不到路径三、如何解决javadoc一直找不到路径的问题 一、什么是javadoc Javadoc是一种用于生成Java源代码文档的工具,它可以帮助开发者生成易于阅读和理解的文档。Javadoc通过解析Java源代码中的注释,提取其…

作者头像 李华
网站建设 2026/5/30 9:40:13

基于STM32单片机的智能窗帘系统(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:CJ-32-2022-004设计简介:本设计是基于STM32单片机的智能窗帘系统,主要实现以下功能:1、 定时模式:早上&…

作者头像 李华
网站建设 2026/5/21 11:54:52

当测试脚本学会自我修复:CV+Transformer重塑自动化测试新范式

在UI自动化测试领域,元素定位器失效导致的维护成本常年占据总成本的30%以上。传统基于XPath/CSS的静态定位方式,在面对前端框架动态渲染、频繁迭代的现代应用时显得力不从心。本文解析的融合计算机视觉(CV)与Transformer架构的动态元素自愈框架&#xff…

作者头像 李华
网站建设 2026/5/22 0:38:25

软件测试公众号内容热度解析:多模态技术驱动的专业洞察

在人工智能快速发展的2026年,软件测试领域正经历深刻变革,公众号作为知识分享平台,其内容热度直接影响从业者的学习效率和行业影响力。本文聚焦多模态测试技术(如CLIP驱动的图文跨模态断言验证工具),解析公…

作者头像 李华