计算机与信息 · 14/14
数据压缩Compression
能保住信息又缩短描述,说明你抓住了藏在细节里的规律。
牛顿用同一套定律,把落向地面的物体和绕着地球转的月球连在了一起。1687 年,他的《自然哲学的数学原理》在伦敦出版。书中的运动定律和万有引力定律,让这两种现象进入同一个计算框架:月球也在向地球下落,却因向前的运动不断绕过地球。研究者不用为每颗行星另背一套运动规则。给出质量、位置和速度,就能用同一套方程推算它怎样运动。天上地下原本分散的现象,有了共同的说明书。
为什么成立
能还原的短描述,才显出规律
一千个连续的 A,可以写成“A 重复一千次”,再按说明完整展开。后面的字符能由规则确定,就省去了逐个记录的必要。数据压缩把长记录换成这样的短表示;重复、出现频率不均、前后依赖,都能提供缩短的机会。
规则和例外必须一起算
判断是否省了描述,要先固定同一套编码和还原约定。设数据为 ,描述它的规则为 ,总长度是:
是写清规则所需的比特数, 是知道规则后,还原数据仍需补上的比特数。白话说,把说明书和剩余细节加起来,再与直接记录原文相比。规则很短,却要附上几乎整份原文,就没有找到多少规律。这是最小描述长度原则的核心。
理解让许多事实共用一条规则
找到能反复使用的短描述,让你从逐条记忆走向掌握结构。读懂牛顿的定律后,你能根据起点推算新的轨迹;背熟旧轨迹只能复述旧记录。把这套思路带到工作中,就要看一条解释能接管多少事实,又留下多少例外。规则连同例外仍然更短,才是理解有所进展的证据。
出处
它来自信息论与计算机科学。香农在 1948 年的《通信的数学理论》中奠定无损编码极限的理论基础。柯尔莫哥洛夫在 1965 年用最短生成程序刻画信息量;里萨宁在 1978 年提出最小描述长度原则,把“规则加剩余数据”的总长度用于选择模型。
换个领域看
技术
像素一个不丢
PNG 能把图片文件压小,同时逐个还原像素。1996 年,万维网联盟发布了它的首版推荐规范。编码器利用相邻像素的关系,把像素改写成差值,再压缩反复出现的数据。大块纯色图里,许多差值都是零,容易省下空间;打开文件时,解码器把这些步骤倒过来走,恢复原有像素。
投资
让财报少些意外
能解释多期经营数据的规则,比一句公司故事更有用。假设你在研究一家连锁咖啡店,先用成熟店过去的销售水平估计下一季度,再单列新店爬坡和关店。新一季账本到手后,若大部分销售都能按这套办法说明,只剩少量差额,你就抓住了可复用的结构;若每家店都要补一个理由,原来的解释就该重写。
个人生活
把漏项写成规则
反复出差时,一条规则能替你记住多次遗漏。假设你每次收行李都重新列清单,还总忘带同几样东西。你把过去的清单合成一份常备清单,另写“过夜加洗漱包”“下雨加伞”,这次只记录特殊物品。共同部分写一次,条件说清楚,例外单独留下,下一趟出门就能按这份短说明还原所需行李。
遇事时问自己
- 这些记录里,哪些内容反复出现,或能由前面的内容推出来?
- 我能否写出一条规则,让别人据此还原事实或推算下一次结果?
- 把规则、使用条件和所有例外加起来,是否比逐条记载更省?
- 面对下一批数据,我能用这条规则提前说对什么?
- 这份短描述删掉的细节,会不会改变我要做的决定?
边界与误用
短描述必须服从你要保留的信息。无损压缩要求完整还原;有损压缩允许丢掉事先选定的细节。把一次罕见故障删掉,报告会变短,却会妨碍排查事故。无损算法无法让所有输入都变短;一种工具压不动,也只说明它没找到可利用的规律。最常见的误用,是把一句顺口的故事当成理解:遗漏越多,句子越短。找到可还原的短描述,说明存在可利用的结构,却不能单凭它认定因果。让短规则接受新事实检验,并留下会改变决策的例外。
练一练
一家物流公司要保存半年的司机排班,方便以后逐日核对。原始记录占6000字节。方案甲用500字节写清轮班规则,再用900字节记录临时调整;方案乙的规则只占100字节,但调整表占1800字节。两套方案使用相同的编码约定,都能完整还原每天的排班。
若要用更少的空间完整保存排班,哪种判断最站得住?
临时调整多,确实容易让人怀疑规则。但例外已被完整记录,两套方案都能准确还原,也都比原表短。
两套方案确实都保住了记录。但题目还要求节省空间,完整还原不代表占用空间相同。
乙的规则短,容易让人觉得它更精炼。但加上调整表后,乙共需1900字节,比甲更多。
甲共需1400字节,比乙少。比较时要把规则和完整还原所需的调整一起算。
轮班规则接管了重复的排班,调整表补上规则无法确定的部分。判断是否省了描述,要把规则与剩余细节一起算,不能只看规则有多短。
某市研究员整理了三年的地铁进站量和周边商铺租金。一个很短的公式就能描述两者的共同变化,补上少量偏差后,整份记录仍比原始表短。同期,附近产业园的就业人数持续增加。研究员据此建议增加列车班次,认为这样就能提高商铺租金。
对这项建议,哪种判断最站得住?
预测新数据能证明规则有用。但只要就业继续增长,公式就可能继续预测准确,即使增加班次对租金没有影响。
偏差小,会让解释显得有力。但就业增长可能同时带动客流和租金,公式贴合记录并没有排除这个原因。
新增岗位既可能带来通勤乘客,也可能增加商铺需求。记录中的共同变化,不能直接回答主动增加班次会怎样。
先后顺序容易让人想到影响方向。但新增岗位可能先增加通勤客流,再带动商铺需求,客流在前仍不能说明增班有效。
短公式把许多记录纳入同一条规则,说明找到了可利用的结构。就业增长可能同时推动客流和租金;增加班次改变的是运力,并没有直接增加岗位或商铺需求。能概括过去的变化,不等于能证明这项干预有效。
你正在安排一次六周的自驾旅行,逐晚休息计划中有三晚只能睡不足四小时。应用建议把计划改成六个周平均值,并删除逐晚时长和日期,让报告更简洁。你要据此决定哪些早晨开车、哪些早晨休息。
为了让这份报告支持具体安排,哪种处理最合理?
缺觉次数能提醒你平均值掩盖了波动。但它没有保留日期,仍无法指出哪几个早晨应安排休息。
周平均便于统筹行程,也减少了阅读负担。但睡眠均匀的一周和夹着一晚严重缺觉的一周,可能有相同的平均值。
安排某个早晨的行程,需要知道前一晚计划睡多久。周平均可以概括整体情况,逐晚记录保住了会改变当天安排的差异。
最短时长保住了极端情况,看起来更稳妥。但把一晚的情况套到整周,会让其余早晨也失去各自的安排依据。
周平均通过舍弃逐晚差异缩短了记录,适合查看整体休息水平。这里要安排具体日期的行程,哪晚睡得少会改变次日的决定。这些日期和时长必须留下,报告变短本身不能证明它更好用。