前言

数据压缩无处不在,对现代计算来说它仍然像以前一样必不可少。过去,1GB就已经很大了,数据以每秒几千字节的速度传输。从某种意义上来说,我们已经经历了一个完整的循环,从内存和带宽有限的古董计算机时代,来到了内存有限且数据套餐十分昂贵的移动设备时代。

幸运的是,有很多工具、API以及程序包可以帮我们压缩数据。理解它们如何工作,有助于我们正确地选择压缩工具(或算法),而这又可以令用户更高兴,同时降低成本、增加收入。

数据压缩的基础是数学,让我们坦然面对它。对大多数人来说,数学很难,真的很难,而且对于程序员曾经是最高的一道门槛。想想数据压缩之父克劳德•香农(Claude Shannon),他的数学非常好,在黑板上随手一写就是一行行复杂的方程。

更疯狂的是,现代程序员不需要了解数学。现在,8岁的孩子都能上网,甚至在没有上过代数课的情况下,就能通过自学教程发布自己的网页或应用程序。

我们相信,这就是过去20多年里数据压缩领域一直停滞不前的原因。虽然有20亿人在使用移动设备这是2015年的数据,如果你是在未来某个时间点读到这本书的,数据肯定会不同。还有,很感谢你阅读这本书。,并且他们经常遇到内存不足和网络连接不良等问题,但是数据压缩技术仍然处于半停滞状态。这是因为懂数学的程序员不多。

当然也因为数学比较难。

你可以看到,压缩不是真的与数据有关。数据压缩领域早期的创始人考虑的并不是数据,而是统计。他们寻找并发现了操纵数据集中符号的概率分布的不同方法,并利用这些方法来生成包含同样的信息但更小的数据集。

随着计算机技术越来越普遍、越来越去数学化,普通程序员需要知道的统计学知识和其他高等数学知识也越来越少。因此,尽管21世纪初出现了计算机史上最大规模的技术繁荣,整个数据压缩领域却只取得了两三项技术进展。

因为数据压缩很难。

因为它以数学为基础。

现在,我们从公平和实用的角度来看待这个问题。如今,大多数程序员和内容开发人员不需要懂得高等数学,也不需要理解压缩的工作原理,因为他们只需要获得一个像样的数据压缩库,再把数据扔给它,就可以到处使用压缩后的数据了。

然而,向前看,这还不够。根据预测,到2025年,将有50 亿人使用计算机并通过互联网传输数据。想想那时,数据量会急剧增长,我们会有太多的数据,运营商的传输速度会不够快,数据仓库又太小而无法容纳这些数据。当然,一个解决方法就是使用尚未发明出来的创新算法,实现更快、更好的压缩。

这自然要用到数学。

而数学又很难。

另一个解决方法是教那些愿意学的人理解数据压缩的工作原理。因此,你不再是随便拿到某个压缩工具就去使用,而是可以选择最好的压缩工具,并将数据以最高效的方式提供给用户。

这就是本书的写作动机。我们试图将数据压缩这一学科中大量难以理解的内容简化为普通人都能理解的内容,并且让他们能将这些知识应用到日常的数据需求中。我们试着尽可能少用数学,尽量用图、表和数据流的形式来解释数据压缩的基本原理。与柯尔特在YouTube上的Compressor Head 系列视频相似,我们希望能通过本书教给任何高中以上文化水平的读者一些数据压缩知识,即使你不是程序员也不要紧。

不过,我们要坦诚地告诉读者:如果你真想理解这些内容,就必须做一些思维训练。就像骑自行车一样,数据压缩还是比较难的,只有你真正领会了其中的要点,一切才变得有意义起来。但在这之前,你必须坚持下去,并通过例子加深自己的理解。

有一点需要明确,本书的目标不是让你成为压缩专家,因为那需要相当深厚的数学功底(这很难做到),而是让你理解压缩算法,这意味着我们有时会使用恰当的术语,有时则会使用虽然不太正确但更具描述性的术语。掌握这些术语也许还不足以让你与其他数据压缩专业人员在茶歇时随心交流。我们想为你提供足够多的信息,以确保你做出正确的有关数据压缩的商业决策。

最后,老实说,数据压缩真的很酷。当然,这是我们的想法,希望当你深入阅读本书后,也会这样认为。

在写这本书时,我们觉得很开心,也希望你能从数据压缩知识的学习中获得乐趣。