【前言】
数据压缩存在于计算机、网络的各个地方,是很底层的技术支持,例如歌曲、图像、视频、网页、文本等的保存和传输都是用过数据压缩算法的。
总的来说,我们常使用数据压缩来增多硬盘存储的内容、减少网络传输的流量。
数据压缩研究的是,在可接受的信息恢复程度下,可以将信息变得有多紧凑。通常有两个思路:减少数据中不同符号的数据量;用更少的位数对更常见的符号进行编码。
数据压缩的算法多种多样,没有万能的算法,通用算法能保证数据集经过压缩后会变小,但与数据特征相匹配的算法能将数据集压缩得更小。
想要取得更好得压缩效果,需要根据数据集的特征选择合适的算法,并在该算法原理基础上做适合数据集的调整,这是开发可以做的事情。
压缩算法可以分为五类:变长编码、统计压缩、字典编码、上下文模型和多上下文模型。
为了压缩同一个数据集,可以在压缩过程中,多次使用同一个和不同算法。正如为了给数据集排序多次使用排序算法一样。
【信息熵】
在信息论中,熵(英语:entropy,又称信息熵、信源熵、平均自信息量)是接收的每条消息中包含的信息的平均量
一文看懂信息熵的本质——谈谈自己对信息熵的理解-CSDN博客
单个整数的信息熵
对于给定的任意十进制数,通过计算其对应的log2函数值,可以知道用多少位二进制表示,其也是这个整数的熵(entropy),例如:
- 2的log2为1,需要两位二进制
- 3的log2为1.58,需要两位二进制
- 4的log2为2,需要3位二进制
- 7的log2是2.80,需要三位二进制
- 8的log2为3,需要4位二进制
但在计算机中会用固定长度的二进制位数表示整数,所以实际的用的二进制位数比理论上多。
数据集的信息熵
对于一个数据集,在数据压缩中,信息熵表示每个符号平均所需要的最小二进制个数。
注意数据集中的基本单位是每个符号,在不同的应用中,所看的基本单位是不同的,计算出来的信息熵也有区别
信息熵只表示数据集中信息的随机性,也叫不确定性。如果两个数据集的每个符号出现的概率相同,数据集长度不同或符号排列顺序不同,那么计算出来的信息熵是一样的。
因此,在数据压缩的角度下,信息熵不表示数据集所传递的内容,即与信息量无关。
熵越大,表明平均需要的二进制位数越多,存储时占用的空间就越大。数据压缩时会替换或修改某些字符使得数据集的熵变小。
如果所有字符出现概率等同,那么数据集的熵较大。如果有字符出现概率很大,表明数据冗余较大,有较大的压缩空间。
【参考】
《数据压缩入门》