程序是怎么跑起来的
数据的压缩
游程编码
游程编码的思想:标注连续文本的出现次数,实现压缩。例如 AAAAAABBCCF,压缩后 A6B2C2F1。
实际文本中重复出现的字符并不常见,通过游程编码反而会让文件体积变大。
摩尔斯编码
摩尔斯编码根据字符出现频次设计编码:出现频次越高的字符,编码越短;出现较少的字符,编码较长。
例如:
| 字符 | 比特序列 | 比特长度 |
|---|---|---|
| A | 1 0 1 1 | |
| E | 1 |
哈夫曼编码
哈夫曼编码受到摩尔斯编码的启发。可采用哈夫曼树构建编码系统。之所以采用哈夫曼树,是因为每个字符都在叶子节点:从根节点探访叶子节点,每个叶子节点会得到唯一的编码。这是多么巧妙的设计啊。
哈夫曼编码的计算过程
- 对字符出现的频次排序
- 选择两个最小频次的字符,构建父节点
- 重复步骤 2
- 只剩一个节点,结束
无损压缩&有损压缩
图片的压缩分为有损压缩和无损压缩,有损压缩是指压缩后的数据无法准确还原为初始数据,无损压缩后的数据可以准确还原为初始数据。
BMP 图像文件格式,把图片里每一个像素,用比特 / 字节记录颜色,存成文件(存在磁盘上)。