1. 数据压缩
假设任何文件都可以被压缩到
因此,可以得出一个相对抽象的结论,并非所有文件都可以被压缩到
数据压缩的原理,压缩原理其实很简单,本质上,所谓压缩,就是找出文件内容的概率分布(probability distribution),将那些出现概率高的部分代替成更短的形式。相应地,如果内容毫无重复,就很难压缩。极端情况就是,遇到那些均匀分布的随机字符串,往往连一个字符都压缩不了。比如,任意排列的10个阿拉伯数字(5271839406),就是无法压缩的;再比如,无理数(比如π)也很难压缩
2. 从数据压缩到熵的引出
压缩可以分解成两个步骤(哈夫曼编码):
- 第一步是得到文件内容的概率分布,哪些部分出现的次数多,哪些部分出现的次数少;
- 第二步是对文件进行编码,用较短的符号替代那些重复出现的部分。
如果文件内容只有两种情况(1/5 vs 1/5比如扔硬币的结果),那么只要一个二进制位就够了,1 表示正面,0表示表示负面。如果文件内容包含三种情况(比如球赛的结果),那么最少需要两个二进制位。如果文件内容包含六种情况(比如扔筛子的结果),那么最少需要三个二进制位。
一般来说,在均匀分布的情况下,假定一个字符(或字符串)在文件中出现的概率是 p,那么在这个位置上最多可能出现 1/p 种情况。需要
这个结论可以推广到一般情况。假定文件有 n 个部分组成,每个部分的内容在文件中的出现概率分别为
3. 信息熵
对于两个相等(
p 越大,表明文件内容越有规律,压缩后的体积就越小;p 越小,表明文件内容越随机,压缩的程度不会太高;
为了便于文件之间的比较,将上式除以
进一步将其转换(
又可视为一种期望,可以理解为,每个符号所占用的二进制位,等于概率倒数的对数的数学期望;
4. 简单释例
- 假定有两个文件都包含1024个符号,在ASCII码的情况下,它们的长度是相等的,都是 1KB。甲文件的内容 50%是a,30%b,20%是c,则平均每个符号要占用1.49个二进制位。
- 乙文件的内容10%是a,10%是b,……,10%是j,则平均每个符号