摩尔斯电码与字符效率 - "E"为何只需一个点而"Q"需要四个符号
1838 年,塞缪尔·摩尔斯走进纽约的一家印刷厂,开始数活字盒里的内容。他想弄清楚哪些字母准备了最多的活字 - 也就是说,哪些字母在英语中使用最频繁。这项细致的调查催生了"根据频率优化编码长度"的理念 - 信息论的先驱。给常用字符分配短编码,给罕用字符分配长编码。这一原则在大约 100 年后由克劳德·香农建立信息论时得到数学化,并进一步发展为哈夫曼编码。
从活字盒诞生的编码设计
摩尔斯在印刷厂观察到的活字库存量直接反映了英语中字母的出现频率。活字盒中"E"的活字最多,而"Z"和"Q"只有极少量。摩尔斯根据这些观察结果,为高频字母分配短编码,为低频字母分配长编码。
| 字母 | 摩尔斯电码 | 编码长度 (点和线的数量) | 英语出现频率 |
|---|---|---|---|
| E | · | 1 | 约 12.7% |
| T | − | 1 | 约 9.1% |
| A | ·− | 2 | 约 8.2% |
| I | ·· | 2 | 约 7.0% |
| N | −· | 2 | 约 6.7% |
| S | ··· | 3 | 约 6.3% |
| H | ···· | 4 | 约 6.1% |
| Q | −−·− | 4 | 约 0.1% |
| Z | −−·· | 4 | 约 0.07% |
"E"和"T"各用 1 个符号 (一个点、一条线) 表示。将英语中出现频率最高的这两个字母设为最短,大幅缩短了电报传输时间。而"Q"和"Z"需要 4 个符号,但由于出现频率低于 0.1%,对整体传输效率几乎没有影响。
ETAOIN SHRDLU - 英语字母频率排名
按出现频率排列英语字母得到"ETAOIN SHRDLU"。这个排列从活版印刷时代就已为人所知,甚至被 Linotype 排字机的键盘布局所采用。20 世纪上半叶,"etaoin shrdlu"这串字符意外出现在报纸版面上的事故时有发生。
| 排名 | 字母 | 出现频率 | 摩尔斯编码长度 | 频率 × 编码长度 |
|---|---|---|---|---|
| 1 | E | 12.70% | 1 | 0.127 |
| 2 | T | 9.06% | 1 | 0.091 |
| 3 | A | 8.17% | 2 | 0.163 |
| 4 | O | 7.51% | 3 | 0.225 |
| 5 | I | 6.97% | 2 | 0.139 |
| 6 | N | 6.75% | 2 | 0.135 |
| 7 | S | 6.33% | 3 | 0.190 |
| 8 | H | 6.09% | 4 | 0.244 |
| 9 | R | 5.99% | 3 | 0.180 |
| 10 | D | 4.25% | 3 | 0.128 |
"频率 × 编码长度"列显示了每个字母对整体传输时间的贡献。"E"频率最高,但由于编码长度为 1,贡献被控制在 0.127。如果"E"被分配 4 个符号,这个值将跃升至 0.508,大幅增加总传输时间。
不过,摩尔斯电码并非完全优化。"H"出现频率排第 6 (6.09%) 却被分配了 4 个符号,比排第 8 的"R" (5.99%) 的 3 个符号还长。这被认为是因为摩尔斯不仅考虑了活字盒的观察结果,还考虑了编码的听觉辨识度。
与哈夫曼编码共享的先见之明
1952 年,MIT 研究生大卫·哈夫曼发表了用于数据压缩的最优可变长度编码构建算法。哈夫曼编码在本质上与摩尔斯的想法相同 - 为高频符号分配短比特序列,为低频符号分配长比特序列。
| 比较项目 | 摩尔斯电码 (1838 年) | 哈夫曼编码 (1952 年) |
|---|---|---|
| 设计原理 | 高频字母分配短编码 | 高频符号分配短比特序列 |
| 最优性 | 经验性/直觉性 (非完全最优) | 数学上最优 (作为前缀码) |
| 编码类型 | 三值:点、线、间隔 | 二值:0 和 1 |
| 分隔机制 | 字符间/词间间隔 | 无需分隔 (前缀性质) |
| 用途 | 电报通信 | 数据压缩 (ZIP, JPEG, MP3 等) |
决定性的区别在于"前缀性"。哈夫曼编码的设计确保没有任何编码是其他编码的前缀,因此只需从头读取比特序列即可唯一解码。而摩尔斯电码通过字符间的间隔 (静音) 来分隔 - 没有这些间隔,"····"可能是"H"、"I + I"或"I + E + E"。考虑到摩尔斯时代信息论尚不存在,基于频率的编码长度优化这一构想本身就具有惊人的先见之明。
日文摩尔斯电码设计 - "イ"为何获得最短编码之一
日语摩尔斯电码 (和文摩尔斯) 于 1855 年左右建立。在和文摩尔斯中,每个片假名字符都被分配了编码。与英语版类似,日语中常用的字符倾向于获得较短的编码,但并非完全按频率排序。
| 字符 | 和文摩尔斯电码 | 编码长度 | 备注 |
|---|---|---|---|
| イ | ·− | 2 | 最短之列。助词"い"频率高 |
| ロ | ·−·− | 4 | 伊吕波顺序第 2 |
| ハ | −··· | 4 | 作为助词"は"频繁出现但 4 个符号 |
| ニ | −·−· | 4 | 伊吕波顺序第 4 |
| ホ | −·· | 3 | 伊吕波顺序第 5 |
| ヘ | · | 1 | 最短。用作助词"へ" |
| ト | ··−·· | 5 | 作为助词"と"频繁出现但 5 个符号 |
和文摩尔斯的编码分配不像英语版那样严格遵循频率顺序。"ヘ"以 1 个符号 (单点) 最短,但它不一定是日语文本中出现频率最高的字符。"ト"作为助词使用非常频繁,却被分配了 5 个符号。和文摩尔斯的设计被认为混合了伊吕波排序的影响和听觉辨识度的考量。
SOS - 9 个符号中蕴含的合理性
1912 年 4 月 14 日深夜,泰坦尼克号无线电报员杰克·菲利普斯反复发送"SOS"信号。SOS 的摩尔斯电码是"··· −−− ···",共 9 个符号。该信号于 1906 年被采纳为国际遇难信号,但被选中的原因并非因为它是"Save Our Souls"的缩写。
SOS 被选中的真正原因在于其作为摩尔斯电码的清晰度。"···" (S) 和"−−−" (O) 都由重复的相同符号组成,在嘈杂的无线电环境中不易听错。此外,三点、三线、三点的对称节奏不太可能与其他任何字符序列混淆。
泰坦尼克号事故中,最初使用的是旧式遇难信号"CQD" (Come Quick, Danger)。CQD 的摩尔斯电码是"−·−· −−·− −··",共 12 个符号,比 SOS 的 9 个符号多 3 个,紧急传输效率较低。菲利普斯中途切换为 SOS,这一判断据说加快了向救援船卡帕西亚号的通报。
每个字符的平均传输时间
摩尔斯电码的传输速度以"WPM" (每分钟词数) 衡量。速度定义为每分钟能发送多少次标准参考词"PARIS"。"PARIS"被选为参考词是因为其摩尔斯电码长度接近英语文本的平均编码长度。
"PARIS"的摩尔斯电码是"·−−· ·− ·−· ·· ···",以点的长度为 1 单位计算共 50 单位。即 1 WPM = 每分钟 50 单位。熟练的电报员可以 20-30 WPM 的速度发送,相当于每分钟 1,000-1,500 单位,每秒约 17-25 单位。
与现代文本通信相比,摩尔斯电码的传输速度极其缓慢。但考虑到 1840 年代的技术水平,能够向数百公里外的地方实时发送消息本身就是革命性的。如短信字数限制一文所述,SMS 的 160 字符限制也源于技术约束,但在摩尔斯电码时代,"字数限制"这个概念甚至不存在 - 每个字符都是手动逐一发送的。
与现代可变长度编码的思想联系
摩尔斯电码"高频字符用短编码"的设计思想在现代计算机中延续至今。最熟悉的例子就是 UTF-8 编码。
| 字符类型 | UTF-8 字节数 | 示例字符 | 设计意图 |
|---|---|---|---|
| ASCII 字符 (英数字) | 1 字节 | A, B, 0, 1, @ | 英语圈最常用的字符最短 |
| 拉丁扩展/希腊字母 | 2 字节 | e, n, a, b | 欧洲语言的附加字符 |
| 日语/中文/韩语 | 3 字节 | あ, 漢, 한 | CJK 字符 3 字节 |
| 表情符号/特殊字符 | 4 字节 | 😀, 🎉, 𠮷 | 补充平面字符 |
UTF-8 将互联网上使用频率最高的 ASCII 字符 (英数字和符号) 用 1 字节表示,随着使用频率降低而增加字节数。这正是摩尔斯在活字盒前进行的优化的同一思路。如字数与字节数的区别中详细介绍的,"あ"在 UTF-8 中是 3 字节,"A"是 1 字节。作为字数都是 1 个字符,但数据量相差 3 倍。
理解 Unicode 基础知识后,可变长度编码的设计思想会更加清晰。UTF-8 被全球 98% 以上的网站采用的原因之一,是其向后兼容性 - 英语文本可以用与 ASCII 相同的 1 字节表示。如果所有字符都用固定长度 (比如 4 字节) 表示,英语文本文件的大小将膨胀 4 倍。
数字的摩尔斯电码 - 为何统一为 5 个符号
英文字母的编码长度从 1 到 4 个符号不等,而数字 (0-9) 的摩尔斯电码全部统一为 5 个符号。
| 数字 | 摩尔斯电码 | 模式 |
|---|---|---|
| 1 | ·−−−− | 1 点 + 4 线 |
| 2 | ··−−− | 2 点 + 3 线 |
| 3 | ···−− | 3 点 + 2 线 |
| 4 | ····− | 4 点 + 1 线 |
| 5 | ····· | 5 点 |
| 6 | −···· | 1 线 + 4 点 |
| 7 | −−··· | 2 线 + 3 点 |
| 8 | −−−·· | 3 线 + 2 点 |
| 9 | −−−−· | 4 线 + 1 点 |
| 0 | −−−−− | 5 线 |
数字统一为 5 个符号是因为数字不像字母那样存在出现频率的偏差。英语文本中"E"出现 12.7%,而"Z"仅出现 0.07%,但数字 0-9 的出现频率因用途而大不相同。电话号码接近均匀分布,金额中"0"较多。由于没有合理依据让特定数字更短,所以全部统一为相同长度。
此外,数字编码具有优美的规律性。从 1 到 5,点逐个增加,5 全为点;从 6 到 0,线逐个增加,0 全为线。这种对称模式易于记忆,缩短了电报员的训练时间。
计算摩尔斯电码的传输效率
从信息论的角度定量评估摩尔斯电码的传输效率。英语文本每个字符的信息量 (熵) 约为 4.7 比特。而通过摩尔斯电码传输英语文本时,每个字符的平均编码长度约为 8.1 个时间单位 (以点的长度为 1 单位)。
如果摩尔斯采用完全随机的编码分配 (忽略频率),平均编码长度将约为 10.2 个时间单位。也就是说,摩尔斯基于频率的设计相比随机分配实现了约 20% 的传输时间缩短。
用哈夫曼编码进行理论上最优分配时,平均编码长度约为 7.6 个时间单位。摩尔斯电码的 8.1 个时间单位仅比最优值偏离约 7%,作为 19 世纪的经验性设计,精度令人惊叹。
计算字符效率的意义
摩尔斯电码设计至今约 190 年,"字符效率"仍然是无处不在的问题。在 X (原 Twitter) 的字数限制中,日语的 1 个字符和英语的 1 个字符被计为相同的"1 个字符",但信息量大不相同。日语汉字 1 个字符压缩了英语数个单词的含义,因此 140 个字符的日语推文比 140 个字符的英语推文传达的信息要多得多。
当摩尔斯在活字盒前数字符时,他正在解决"信息的高效传达"这一普遍问题。这个问题以不同形式传承给了为全角与半角的区别而烦恼的现代 Web 开发者,以及优化提示词字数的生成式 AI 用户。在数字符这一行为的背后,始终横亘着信息论的本质:"用有限的资源传达最大的信息。"
信息论和摩尔斯电码相关书籍在 Amazon 上也能找到。