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

信息论与编码篇---等长编码

1. 什么是等长编码?

想象一下,你要给班上的每个同学发一个编号,方便点名。

  • 等长编码:就是规定每个同学的编号长度都一样

    • 比如:规定编号必须是两位数字。

    • 那么,张三就是01,李四就是02,王五就是03……

    • 所有人的“代码”长度相同,都是2个字符。

2. 什么是唯一可译性?

“唯一可译”就是指:当你看到一串编码时,你只能有一种方法把它切开,还原成原来的消息,而不会有歧义。

让我们通过两个例子来感受一下:

场景一:完美的等长编码(唯一可译)

假设我们只有三个同学:张三(01)、李四(02)、王五(03)。

  • 老师点名:老师收到一串数字010203

  • 解码过程:因为是等长编码,老师知道每个编号长度是2。所以他会自动地、下意识地按两位一组切开:010203

  • 结果:这只能被翻译成“张三 李四 王五”。没有第二种切法,因为如果你从中间开始切,比如10203?,这些都不是有效的编码(因为10不是任何人的编号)。所以,这就是唯一可译的

场景二:出问题的等长编码(不是唯一可译)

等长编码本身是“唯一可译”的吗?不一定!上面的例子看起来没问题,是因为我们假设了每个编码都是独一无二的,并且解码器知道长度。那问题出在哪呢?问题主要出在码字的选取上。

假设还是两位等长编码,但我们换了种编号方式:

  • 张三:01

  • 李四:10

  • 王五:11

现在,老师收到一串数字:0110

  • 解码器按两位切开0110-> 翻译成“张三 李四”。

  • 看起来没错,好像还是唯一的啊?

别急,我们再加一个同学:

  • 赵六:00

再来看另一个例子。老师收到:1011
按两位切开:1011-> “李四 王五”。没问题。

但等长编码的“非唯一可译”隐患,并不在于切分方式(因为长度固定,切分方式本身是唯一的),而在于边界混淆吗?不,对于纯等长编码,边界混淆(比如把01当成01)在解码器知道固定长度的情况下不会发生。

其实,等长编码要保证唯一可译,核心条件是:编码必须是单射的。

更通俗地说:等长编码只要保证每个原始信息(比如每个字、每个符号)被分配一个独一无二的、固定长度的码字,那它就是唯一可译的。

但是,有一种特殊情况被称为“逗号码”问题。如果码字之间是“无缝衔接”的,并且新消息开始的地方恰好和上一个码字的末尾构成了一个有效码字,从理论上讲,如果解码器丢失了同步,可能会出现问题。但在理想情况下(知道长度、从开头同步),不会。

严谨的信息论告诉我们:
等长编码要做到唯一可译,必须满足一个条件:不同的原始符号必须对应不同的码字。也就是说,码本必须是一个一一映射。只要满足这一点,解码器就可以通过简单地按固定长度截取来唯一地恢复原始消息。

总结一下:

  • 等长编码:每个符号的代码长度相同。

  • 唯一可译性条件:每个符号对应的代码必须是独一无二的(即编码函数是单射)。

  • 结果:只要满足上面的条件,按固定长度切割,就能无歧义地恢复原消息。


3. Mermaid 总结框图

下面这张图梳理了从编码到解码,并判断是否唯一可译的整个逻辑。

框图解读:

  1. 编码:原始消息进入等长编码器。编码器手里有一个码本

  2. 码本要求:这个码本必须满足两个条件——①所有码字长度相等;②每个码字对应唯一的符号。

  3. 唯一可译性判断

    • 如果满足条件2(一一对应),那么这个编码就是唯一可译的。

    • 如果不满足条件2(比如两个不同的人用了同一个编号),那这个编码就是非唯一可译的,一定会产生歧义。

  4. 解码:无论哪种情况,解码器都会按固定长度去切割收到的码字序列。

    • 如果是唯一可译的,查码本后就能准确恢复原始消息。

    • 如果是非唯一可译的,查码本时就会遇到混乱(不知道切出来的码字对应谁),导致无法准确恢复原始消息。

http://www.jsqmd.com/news/385307/

相关文章:

  • 什么,你说后来?
  • AI Agent架构揭秘:大模型、提示词、工具与MCP的协同艺术
  • 红榜2026最新口碑专业协商律所贷款协商机构排行榜(负债人实测版) - 代码非世界
  • 大模型上下文工程深度解析:从提示工程到智能体构建
  • 当AI学会拍短剧:Huobao Drama全栈AI短剧生成平台深度解析 - 详解
  • 保存站
  • 抗衰老保健品2026年热推:自然成分,守护青春,保健品/抗衰老片,抗衰老保健品食品推荐榜单 - 品牌推荐师
  • 为什么 RAG 一定需要 Rerank?看完你就懂了!!!
  • diff-gaussian-rasterization: Visual Studio 2019 编译流程记录
  • 题解:洛谷 P11542 [Code+#5] 有人吗?
  • Spark大数据处理:技术、应用与性能优化【2.1】
  • 【AI大模型技术】深度解析DPO和RLHF,你还分不清吗?
  • 排序算法衍生问题
  • google-glog编译
  • SVG 在线编辑器:设计自由,创意无限
  • Vue3 条件语句
  • JavaScript 错误处理指南
  • 8、SequenceInputStream的源码和Vector.class的一些函数说明(windows操作系统,JDK8)
  • 2025年主流项目管理工具对比:10款 Jira 替代方案清单
  • Spring AI学习
  • 2026最新口碑协商律所贷款/信用卡分期协商机构榜单(负债人实测版) - 代码非世界
  • 大模型技术:深入理解预训练与微调,为什么需要预训练,什么是微调?
  • 2026年口碑优选:哪些保健品品牌值得信赖?保健饮品/养胃颗粒/保健品,保健品品牌哪个好 - 品牌推荐师
  • AI Agent智能体解析-7种Agent框架对比!
  • Vue.js 起步指南
  • 使用 TypeScript 的指数退避机制包装异步请求
  • 深入研究大数据领域 Hadoop 的 HBase 数据库
  • Games202(一):实时阴影(Real-time Shadows)
  • 苹果充值卡回收常见问题解答 - 京顺回收
  • Go基础:Go的函数和方法详解