压缩
为了提高传输效率,在网速不变的情况下,更小体积的数据效率更高,所以有了数据压缩的需求。
1.无损压缩
一种方法是减少重复信息,例如游程编码 Run-length encoding,适合处理连续相同值多的文件。在 7 个连续的黄色快的数据场景下,可以写 run-length(7, yellow)。由于整体风格要一致,所有数据都会多出一个 run-length,这时如果连续重复数据较少,很可能出现压缩后体积变大的情况。这种方式可以还原真实数据,叫做无损压缩。
另一种方式是用更紧凑的表示方法,例如 DFTBA,用一个字典存储代码和数据之间的对应关系,1950s 发明了霍夫曼树 Huffman tree,用于编码,可以实现无损压缩。先定义数据块,再列出所有数据块和出现频率,每轮选两个最低的频率,将它们组成一个树,总频率是 2,这样重复后形成一个按照频率排列的树。这种编码最优秀的性质是不会冲突。
GIF, PNG, PDF, ZIP 都使用了这两种无损压缩方式。
2.有损压缩
有些信息丢失一些数据后也难以察觉,例如音频和视频信息,这时使用有损压缩技术 Lossy compression techniques。
例如录制音频的时候所有不在人类听力范围内的频率信息都可以丢弃,这种删除人类无法感知数据的方式叫做感知编码 perceptual coding。