Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

程序是怎么跑起来的

数据的压缩

作者:oasis


游程编码

游程编码的思想:标注连续文本的出现次数,实现压缩。例如 AAAAAABBCCF,压缩后 A6B2C2F1

实际文本中重复出现的字符并不常见,通过游程编码反而会让文件体积变大。

摩尔斯编码

摩尔斯编码根据字符出现频次设计编码:出现频次越高的字符,编码越短;出现较少的字符,编码较长。

例如:

字符比特序列比特长度
A1 0 1 14
E11

哈夫曼编码

哈夫曼编码受到摩尔斯编码的启发。可采用哈夫曼树构建编码系统。之所以采用哈夫曼树,是因为每个字符都在叶子节点:从根节点探访叶子节点,每个叶子节点会得到唯一的编码。这是多么巧妙的设计啊。

哈夫曼编码的计算过程

  1. 对字符出现的频次排序
  2. 选择两个最小频次的字符,构建父节点
  3. 重复步骤 2
  4. 只剩一个节点,结束

无损压缩&有损压缩

图片的压缩分为有损压缩和无损压缩,有损压缩是指压缩后的数据无法准确还原为初始数据,无损压缩后的数据可以准确还原为初始数据。

BMP 图像文件格式,把图片里每一个像素,用比特 / 字节记录颜色,存成文件(存在磁盘上)。