获取更多信息请下载APP

不插电编程课4:数据压缩

来源:    发布日期:2018-07-18 17:01:23   阅读量:0

撰文/张飞(清华大学终身学习实验室课程设计主管

从上节课的搜索算法,我们就体会到:面对庞大的数据量时,要有更高效的处理手段。数据在互联网上传输的时候,实际上是经过压缩的。我们每天看到文字、图片、声音到视频,都是如此。为什么要压缩数据?因为数据压缩了以后,体积更小,传输更快。那我们是如何压缩这些数据的呢?

☆ 文字的压缩

文字压缩可以参考LZ 编码 ( Lempel-Ziv Coding ) 方法,即从一段文字中找出重复的字符或字符串,标注好相互参考关系后,将重复的划掉,剩余字符越少越好,参考关系越简单越好。以儿歌《Rain》为例子:

压缩诗歌时,我们要先从整句开始,到一串字母,再到单个字母;但在还原诗歌时,我们就要反过来,先解决单个字母,再看一串字母,最后看整句话。压缩后到底能剩下多少字母?几乎每个人(算法)的答案都不一样——因为精简细化的深度不一样。

☆ 图片的压缩

单色图片压缩可以参考变动长度编码 ( Run-Length Encoding ) 方法:

我们已经学习过二进制的概念,是不是可以用二进制来表示图片中不同颜色的像素呢?当然可以,我们分别用 0 和 1 代表每行白、红像素的数量。例如第一行,从左往右分别有1个白色像素,3个红色像素和1个白色像素,我们就标记成 (1, 3, 1)。同理,第二行就是 (4, 1)…… 另外,第一个像素若是红色像素,就用 0 标记,所以第4、第5行,我们就应标记成 (0, 1, 3, 1) 。

压缩的目标,就是使用尽量少的数字来表示这张图片。

☆ 课后练习

通过方格右边的数字,我们能不能“解压缩”出左边的图案呢?




了解本课程详情
请扫描二维码