压不短的编年录:一则关于信息重量的寓言
压不短的编年录
——一则关于信息重量的寓言
王国的藏书塔里,住着一位名叫短笔的抄写员。他一生只会一样本事:把任何文书抄得更短。
国王的诏令到他手上,十页变成一页;将军的战报到他手上,一车竹简变成三根木片。他发明了成百种暗码,用符号替下长句,用"同上"抹掉重复。满朝文官都恨他——因为他的卷轴短得让人无事可做;唯独国王喜欢他,因为国王讨厌冗长。
这一年,国王把短笔召到金殿,指着一只青铜箱说:"这里面是《万代编年录》,自开天辟地,至昨日黄昏,每一件事都在其中。朕命你,把它抄到最短。"
短笔领命,闭门鏖战。
第一遍,他删光敬语与客套,编年录瘦了一圈。第二遍,他把人名地名换成数字,又瘦一圈。第三遍,他自创一套速记,把整页整页的战争与祭祀,压成几个弯弯曲曲的符号。他像拧一块湿布,每拧一遍都以为再也挤不出水,可总能再挤出一滴来。
一箱,变成一捆;一捆,变成一册;一册,变成薄薄几页。全国的抄写员闻讯赶来,挤在塔外看他变戏法——千年国史,正被塞进一个巴掌大的册子。人人都说:照这势头,他早晚能把一部国史,抄成一个字。
可短笔自己知道,日子不对了。
编年录的某一处,有一段文字,他无论如何也压不短。那是某位无名史官记下的一天:某年某月某日,天落七十四滴雨,南墙砖缝里钻出一株草,草上爬过三只甲虫,甲虫背上的斑点是七、三、九、二,然后是老妇人的一声咳嗽,然后是风,然后是黄昏。
这段文字又长又碎,像一把散落的豆子,怎么拢也拢不成一捧。短笔试过所有法子:简写?它已经一个字对一个字。查表?整部史书再找不出第二个这样的日子。归纳?它没有规律,没有韵脚,没有对称,连呼吸的节奏都没有。
他把这段文字抄在纸片上,白天看,夜里看。忽然,一个大胆的念头冒了出来——
何不干脆写:"此段无可压缩,详见原本。"
这难道不就是最短吗?他几乎要落笔了,可笔尖悬在半空,他僵住了。
"详见原本"四个字,把整本原本又悄悄装了回去。他的"最短版本"从此离了原本就不能成立;而原本本身,又可以被抄成这个"最短版本"……他低头看着手里的册子,忽然觉得它变成了一条咬着自己尾巴的蛇,越追越短,却永远追不到尽头。
藏书塔里最老的守塔人来了。据说他比许多藏书还要老。他只看了一眼,问:
"你手里的册子,就是最短的吗?"
"我想不出更短的。"
"想不出,"老守塔人说,"和'不可能更短',是两回事。你凭什么知道,日后不会有人想出一种你想不出的法子,再压短一个字?"
短笔愣住了。他这才明白,自己面对的不是一场比试,而是一个无底洞。他可以永远怀疑自己还不够聪明,可以永远怀疑某处藏着一种更巧妙的写法——除非他能证明"再也不可能更短"。可证明本身,不也是一段需要压缩的文字么?
他带着那几页纸回到金殿。国王问:"最短的版本,成了么?"
短笔把册子呈上去。国王展开一看,怔住了——那册子厚得出乎意料。里面没有速记,没有暗码,只有原文,一字不多,一字不少,被工工整整抄满每一页。
"这……就是最短的?"
"是。"短笔说,"千年的编年录里,绝大多数都能压短。可总有一些文字,天生就重,重到没有任何话能替它说。它不肯被简化——因为它已经简单到头了。它的全部,就是它自己。"
国王沉默良久,把那几页纸放回青铜箱:"那就不抄了。留着吧。让后人看看,世上有一种东西,叫压不短。"
此后,藏书塔里多了一条规矩:谁想抄短一段文字,先要问自己一句——你省掉的每个字,是真的多余,还是仅仅因为,你没能把它写得必要?
那段关于雨、甲虫与老妇人咳嗽的文字,再没有人动过。它躺在箱底,像一粒不肯被磨圆的石头,固执地守着自己的重量。
许多年后,一位云游的算学者路过王国,听说这个故事,在塔里坐了三天三夜。临走时,他在留言簿上写道:
"一段文字的重量,不在于它写了多少,而在于造出它最少需要多少。而这个'最少',恰恰是人类永远算不尽的东西。你们管这叫编年录;我们管这叫——信息。"
概念解析:Kolmogorov 复杂度
一、它是什么
Kolmogorov 复杂度(Kolmogorov–Chaitin Complexity,又称算法复杂度),是算法信息论(Algorithmic Information Theory)的核心概念,由安德雷·柯尔莫哥洛夫(1963)、雷·所罗门诺夫与格雷戈里·柴廷在 1960 年代独立提出。它回答一个朴素到近乎天真的问题:一段信息"本身"到底含有多少内容?——不是它被写成了多长,而是造出它最少需要多少。
研究生层级的定义:给定一个描述语言——即一台通用图灵机 U——字符串 x 的 Kolmogorov 复杂度 KU(x) 定义为所有能生成 x 的程序中最短者的长度:
KU(x) = min { |p| : U(p) = x }
几个关键性质(正是寓言中那些"悖论"的来处):
- 不变量定理:任意两台通用图灵机 U、V 之间,|KU(x) − KV(x)| ≤ c,常数只取决于两台机器、与 x 无关。因此"复杂度"是对象的内在属性,不因描述语言而异——这正回应了短笔的困惑:"最短"并非某个聪明人碰巧想出的写法。
- 不可压缩性 ≈ 随机性:若 K(x) ≥ |x| − c,称 x 不可压缩。计数论证表明,2ⁿ 个字符串里,能被较短程序生成的只占极小比例——绝大多数字符串几乎不可压缩。换言之,随机串就是"没有捷径"的串;压缩率本身即是随机性的探测器。
- 不可计算性:K(x) 不是可计算函数,不存在一个算法能对任意输入求出其 Kolmogorov 复杂度。更强的结论(柴廷不完备定理):在任一足够强且一致的公理系统中,只能证明极少数串"不可再压缩",绝大多数"此串已最短"的命题都是不可判定的——守塔人的那句"想不出 ≠ 不可能更短",正是这句话。
- 它与停机问题、哥德尔不完备定理同源:若能判定"某程序是否为最短",就能解停机问题。
二、角色与情节的隐喻对照
| 寓言元素 | 隐喻 |
|---|---|
| 《万代编年录》 | 一个具体对象:字符串 / 数据 x |
| 短笔 | 寻找最短描述的研究者(压缩算法、程序、科学家) |
| 压缩比赛 | 计算 Kolmogorov 复杂度 K(x) 的种种尝试 |
| 暗码、数字代换、速记 | 各类数据压缩技术:字典法、熵编码、模型拟合 |
| 压不短的那段流水账 | 不可压缩字符串,算法意义上的"真随机" |
| "此段无可压缩,详见原本" | 自指式构造——试图绕过压缩极限,却落入停机问题式悖论 |
| 守塔人:"想不出 ≠ 不可能更短" | K(x) 的不可计算性与最短性的不可判定性 |
| 一字未动的最终版本 | 当 K(x) ≈ |x| 时,最短描述就是对象本身 |
| 算学者的留言 | 对 Kolmogorov 复杂度的直接陈述:信息含量 = 最短程序长度 |
三、它在研究与现实中的意义
- 数据压缩的理论极限:任何无损压缩都不可能比 K(x) 更短。Kolmogorov 复杂度给出了"还能压多少"的绝对天花板,是评价熵编码、字典压缩等一切算法效率的标尺。
- 机器学习的理论地基:最小描述长度(MDL)原则——"最好的假设,是最短描述数据的假设"——正是奥卡姆剃刀的形式化;对"简单即好"的数学刻画,贯穿统计学习理论与当今深度学习中的信息瓶颈、压缩即智能等思潮。
- 随机性检验与密码学:可压缩则非随机。基于压缩率的随机性检测被用于评估伪随机数生成器与密钥流的质量。
- 数学基础与算法信息论:柴廷利用不可压缩性给出了不完备定理的"信息论"证明,揭示了数学真理中普遍存在的信息冗余——有些命题为真,却无法在系统内被证明"已无可再省"。
- 科学哲学:把科学理论理解为一段压缩了观测数据的程序,物理学定律即宇宙的近似最短描述。"理解世界"与"压缩世界",被视为同一件事的两面。
每日寓言 · 选题领域:计算机科学 · 概念:Kolmogorov 复杂度(算法信息论)