试想你正坐在一个闷热而潮湿的大厅,聆听一个长篇大论又啰里啰嗦的讲座,抓狂不已的同时,你一定祈求演讲者不要再一味的念着冗长的演讲稿,而能把信息清晰地传递给痛苦的听众;很快,到了要记笔记的地方,你肯定希望自己可以用简单的符号代替冗长的记录,然而往往力不从心而写得手腕抽筋,仍跟不上演讲者语速而只得到一个破碎的笔记,这时,你绝望地渴求有什么妙方,可以把信息简单地储存下来;演讲结束后,总有一些同学因事没去听讲座,然后当他们拍着你的肩膀,问你“兄弟!这次讲座说了啥呀?”时,你心理只有一个想法,怎样用一句话把3小时的演讲内容告诉他然后打发他走。
这三个问题似乎指向了同一个方向:如何把信息变得精炼。
我想无论是谁,都会遭遇这种普适性的悲剧,哪怕它只是一台看似强大实则弱小的计算机。
当计算机在传输,储存和转化数据时,它没准比坐在计算机前的我们能够高明一些。
事实上无论是人类用的自然语言还是计算机的二进制,从本质上而言,都是“信息”,都符合一句老话:浓缩才是精华。
简洁而准确,是信息交流,储存与转化的终极目标。
下面笔者要浅谈的就是达成这个目标的手段之一:数据压缩技术。尽管它们的原理看似深奥,但实则与我们的生活常识十分贴近,就算你是计算机方面零基础,理解起来亦无困难,这里笔者以读者没有计算机基础为前提,尽量减少术语或提供解释。
笔者先介绍一些通用的数据压缩技术,然后将介绍一些生活中压缩技术的应用,以帮助大家了解。
通用的数据压缩技术
分类:数据压缩技术分为无损和有损两类,从字面意思上很好理解,无损方案在压缩过程中不丢失信息,有损则会丢失。有损技术能压缩地更彻底,因此在能够容忍小错误的应用中很流行,比如后面会介绍的MP3格式。
下面这些技术一般都是无损的
1,行程长度编码
定义:将一组相同的数据成分替换成一个编码,指出重复的成分以及其在序列中出现的次数。
抛开拗口的定义,我们来看一个现实的场景:我要描述一个队列的性别排列情况,我可以告诉你:女女女女女男男男。我也可以告诉你:先五个女生后三个男生。后一种就是长程程度编码,是不是与我们的日常交流很接近呢?
如果把女生换成1,男生换成0,就是计算机中的二进制数据。例如指出一串计算机数据包含253个1,接着118个0,接着87个1,这比直接列出一长串1111111111……要节省空间。
2,频率相关编码(也称为赫夫曼编码)
定义:用于表示数据项的位模式的长度与这个项的使用频率是反相关的。
再次抛开费解的定义。我们来看这个场景:你正在写一篇漫长的论文,你会发现有某些词语用的频率非常高,而有些词语几乎不用,不幸的是,用的多的词与几乎不用的词在储存时,长度(可以理解为所需数据量)是统一的,这时,你可能会考虑:我用短位模式表示使用频率高的词语,用长位模式表示几乎不用的词,那一篇论文下来,不就节省了不少的空间吗?事实上计算机处理文本时也是这么做的。
3,相对编码(也称为差分编码)
定义:记录下两个连续数据单元之间的区别,而不是全部单元。
这次的定义十分好理解,以动画的连续帧为例,爱看动画的人都知道很多时候两个画面是差不多的,那只记录下每一帧的差别岂不是美滋滋?锦上添花的是,这种技术也可用于有损压缩,以动画为例,在记录两帧之间的差别时,可以只记录近似的差别,因为人眼的分辨力是有限的,反正也看不出来,干脆记录得差不多就行了,所以又压缩得更小。
4,字典编码
定义:这里的术语“字典”指的是一组构造块,压缩的信息通过它们建造起来,而信息本身被编码成字典的一系列参照符。
这个定义很费解,但其实不深究的话还是很好理解的。设想现在你的老师手里有一本花名册,每个同学的名字都对应一个学号,那老师在点名时就不用念名字,直接念数字就行了。这本花名册就是“字典”,全班乃至全校同学的姓名都可以用几万个数字来代替,而如果要使用复杂的汉字,需要的储存空间会大得多。 事实上许多文本文档都包含了出色的压缩字典。
这几种最基本的数据压缩技术使用十分广泛,从图像,音频到视频压缩,大多都是这几种压缩的扩展和组合。
下面就把一些使用广泛的压缩标准,作为应用实例介绍给大家。
如果大家常处理图像,音频和视频的话,应该都见过JPEG,MP3和MPEG这些格式名,但未必了解它们的内涵,这里笔者只浅谈它们的基本原理,感兴趣的读者可以进一步查阅资料。
流行的图像压缩系统JPEG
JEPG标准实际上包含多种图像压缩方法,这里仅介绍使用最广泛的JPEG基线标准(一种有损压缩)。
有两个步骤
一,在一个2*2的色素方块中求色度(可以理解为色彩的纯度或饱和程度)的平均值,同时保留所有亮度信息。这里利用了人眼的特性,相对于色度变化,人眼对亮度变化更敏感。
二,将图像划分为8x8的像素块(像素可以理解为组成图像的点),将每一块作为一个单元来压缩信息。这里我们无需关心转换的细节,只要知道这种转换把原始的8x8像素块变成了另一种像素块。例如如果原始像素块是一个黑白相间的棋盘,新像素块可能表现为平均色。(一个8x8像素块非常小,人眼不能识别这之间的差异)
然后,再应用传统的行程长度编码,相对编码以及变长编码技术进一步压缩,总之,JPEG基线标准一般能在没有明显质量损失的情况下,将彩色图像压缩至少10倍,有时甚至能压缩30倍。(宅男们收集美图时应心怀感激,是程序猿让纸片人小女孩们变得更加轻盈)
最常用的音频及视频压缩标准MPEG
视频可以看成许多张图片的集合,其中一部分称为I帧的图片被整个编码,在两个I帧之间的图片采用相对编码技术,I帧本身经常使用类似于JPEG的技术压缩。(如今20分钟的1080p动画只需要300M,这简直是流量党的福音)
最著名的音频压缩系统MP3
它是由MPEG标准中开发出来的,事实上MP3是MPEG layer 3的缩写。
它利用人耳的特性,删除了人耳察觉不到的细节。一个特性称为暂时模糊,指的是在一次巨大声响后,短时间内人耳觉察不到本可以听见的轻柔声音。另一个称为频率模糊,指的是某一频率的声音可能掩盖相近频率的轻柔声音。利用这些特性,可以通过MP3获得显著的音频压缩,而且保持接近CD的音质。
结语:归根结底,计算机是人发明的,所有的技术也都是人想出来的,必然离不开人的生活常识与经验,所谓“数据压缩技术”,在最初,往往是把人类用自然语言的经验和技巧移植到了计算机的二进制信息中。但令人惊奇的是,计算机似乎后来居上,在处理信息方面的能力逐渐超过了人类。当信息科学在几十年间突飞猛进时,笔者听演讲时遭遇的问题和几十年前的前辈别无二致。一声叹息之余,或许这就是信息科学的魅力。