
后记--王者归来?
期待足足三年之久,压缩霸主WinZip终于在万众期盼下公布了9.0正式版。全全球自然一片沸腾,在全球各大顶尖下载网站中,WinZip9.0再次带起下载热潮。然而这时中国并没有王者回归的欢呼,却一致委婉或直接地抒发出无奈地心情,而下载升级的客户也寥寥无几,这绝对是一道国内奇特的景色,它不禁让人想问,为什么?从诸多评测报告看,因为不支持RAR格式,所以兼容性更佳的WinRAR3.30全面赶超固步自封的WinZip9.0--其实这就是中国用户抵触WinZip9.0的唯一原因。
苍天已死,黄天当立。这是中国舆论草率的论断。之所以说草率,是由于甚至都没有发生反面声音的媒体,这绝对不是一个成熟正常的氛围。正是这样一边倒的跟风导致了长期用户极端的态度,于是牵强附会、人云亦云和以讹传讹的声音充斥期间。这不由得让人遭遇深思,事实上,看似压缩工具之争的表层下深藏的是压缩格式之争。RAR格式已经以及己经取代了ZIP格式吗?不能只是从它们的科技体现和统计数据去提问这个难题,计算机数据压缩格式的演进经历是比较新颖的,它的王者之选具有传奇的历史印记,并经常持续造成着决定性的妨碍。要恰当解答这个难题就需要去认识有关数据压缩的历史,任何企图避免历史环境而作出的论断都是盲目的。因此请不妨先了解数据压缩的历史本身,再来决定哪些压缩工具的前程是非。
LZ算法--ZIP与RAR共祖同源
要讲压缩的历史,就不可不提LZ算法,这是一种有关数据压缩的算法,何为数据压缩?从本质上讲,数据压缩的目的就是要防止信息中的冗余。早在LZ算法出现之前winrar 压缩算法,研究员们从理论上分析了压缩算法的物理基础及建模基础,同时也在这种基础上研究出了一些编码方式,其中的Shannon-Fano编码和Huffman编码更加有妨碍力。但这种编码,包括当时发展出的“算术编码”,都能够作为梦想的编码方式--由于他们能够在编码效率和编码速率上同时满足日渐下降的压缩需求。这种状况在LZ算法出现时直到了解决。
Shannon编码
1948年贝尔实验室的Shannon发表的论文《通信的物理理论》中指出,任何信息都存在冗余,冗余大小与信息中每个符号的发生几率以及说不确认性有关。Shannon借鉴了热力学的概念,把信息中排除了冗余后的平均信息量作为信息熵,并给出了推导信息熵的物理表达式。这篇伟大的论文之后被誉为信息论的开山之作,信息熵同时也确立了所有数据压缩算法的理论基础。利用信息熵公式,人们可以推算出信息编码的极限。不过完备的理论并不等于实用的技术,要将理论变为实践,编码方式是极为重要的一步。1948年,Shannon在强调信息熵理论的同时,事实上也给出了一种简单的编码方式--Shannon编码。1952年,麻省理工大学的R.M.Fano又进一步强调了Fano编码。两者之后被称为Shannon-Fano编码,这种初期的编码方式阐述了变长的编码方式揭示了变长编码的基本规律,也也确实可以获得一定的压缩效果,但离真正实用的压缩算法还相去甚远。
Huffman编码
Huffman编码是第一个真正实用的编码方式,由D.A.Huffman在1952年强调。当时Huffman是麻省理工大学的一名教师,据说为了向同学证明自己可以不参与某门功课的会考考试,他设计了这个看似简洁却影响深远的编码方式。Huffman编码效率高,运算速率快,实现方法灵活,从20世纪60年代直到今天,在数据压缩领域受到了广泛的应用。而20世纪80年代初,Huffman编码又发生在CP/M和DOS系统中,即使在现在,在许多知名的压缩软件和压缩算法里(如WinZip、gzip和JPEG),也都有Huffman编码的身影。不过,Huffman编码所得的编码长度也是对信息熵计算结果的一种近似,并不能真正逼近信息熵的极限。Huffman编码影响力很深远,至今还在计算机本科学员必修课程《数据结构》中被提到。
LZ是其发明者J.Ziv和A.Lempel两个犹太人姓氏的缩写。此二人于1977年发表题为《顺序数据压缩的一个通用算法》的论文,论文中叙述的算法被后人称为LZ77算法。1978年,二人又发表了该论文的后记,描述了之后被命名为LZ78的压缩算法。其实LZ系列的算法并不新鲜,其中既没有高深的理论背景,也没有复杂的物理公式。它们也是简洁的沿袭了千百年来他们对字典的追崇和喜好,并用一种极为巧妙的方法将字典技术采用于通用数据压缩领域。简单的说即使你习惯用词典中的脚注和行号代替文章中的每个句子的之后,那实际上你终于把握了LZ系列算法的精髓,因此这类编码算法被统称为Dictionarycoders。

在1984年,TerryWelch发表论文表述了他在Sperry研究中心(目前Unisys公司的一个别)的研究成果,也就是当时特别有名的LZW算法。它实质上是LZ78算法的一个变种,但被觉得是一个独立的编码算法。LZW继承了LZ77和LZ78压缩效果好、速度快的缺点,而且在算法描述上更容易被他们接受,实现也相对简单。而在其后发展起来的各种各样的字典编码算法,基本上都是这三种编码算法的分支或变体。也就是说LZ77、LZ78和LZW是字典编码中最基础的3种编码算法。今天我们熟悉的PKZIP、WinZip、WinRAR、gzip等压缩软件都是LZ系列算法的受益者,甚至连PGP这样的加密文件格式也选取了LZ系列算法成为其数据压缩的标准。
字典式编码不但在压缩效果上大大高于了Huffman编码,而且在推动上,压缩和解压缩的速度也异常惊人。于是LZ系列算法的优越性迅速就在数据压缩领域里表现起来,使用LZ系列算法的工具软件数目呈爆炸式下滑。UNIX系统上最先发生了使用LZW算法的Compress程序,该程序性能优良,很快变成UNIX世界的压缩程序标准。紧随其后的是MS-DOS环境下的ARC程序,还有像PKARC等仿制品。LZ78和LZW一时间几乎统治了UNIX和DOS两大平台。然而随着时间逝去,事情显得耐人寻味。目前为止占据个人客户计算机的主流压缩软件几乎都配备LZ77变种算法,为什么?
叛逆斗士的胜利--ZIP格式诞生
为什么科技推动上更为优秀的LZ78和LZW没有作为最主流的算法?LZ77与他们有哪些不同?答案是--专利权。
相对于LZ77完全没有专利限制来说,LZ78在中国稍稍涉及到一些专利禁止区,而LZW正像上文所说的专利权最后归属于Unisys公司。因此直接应用LZ78的算法可能会带给意想不到的麻烦,而所有使用LZW算法(哪怕是他的变体)的人都要取得Unisys公司的专利许可。这种专利限制是非常广泛的,例如GIF图像格式使用了LZW算法,那么所有研发GIF编码/的人都必需要有LZW专利使用许可,这意味着征收大笔的专利费。
在DOS年代因为计算机内存介质容量的微小,个人客户对数据压缩工具的渴求是目前的用户能够想象的。例如在1984年,个人计算机的顶配不过是功率360kB的5.25寸软盘而已,如果个人能将数据压缩数倍后储存,不啻于节约了一大笔钱。这种期待在1988年时超过了顶峰,这正是互联网今天产生雏形的年代,网络数据交换开始发生。当时最流行的是使用电话线拨号登陆对方在家里建立的服务平台--BBS系统,当时美国也曾有几十个这么的BBS存在,比如水木清华BBS。这种方法不但可以释放文本信息,也可由客户上传文件到站点的计算机以供其它客户下载。不过因为电话线的接入速度慢的可怜,那时的接入标准只是是14.4kbit/s,通过BBS传输稍大一点的文件就让人十分痛苦。于是数据压缩工具就变成了BBS用户一项需要的软件还记得上文提及1985年SEA公司研发的MS-DOS环境下第一个应用LZW算法的ARC压缩工具吗?它是当年MS-DOS下统治性的压缩工具。从技术角度来说ARC确实不错,但使用了专利LZW算法的ARC当然是标准的商业工具,使用这些硬件工作就需要付费。不过后来许多玩家根本买不起ARC软件,顺便说一句题外话,那时大多PC玩家基本都没哪个富裕的钱,事实上个人计算机本来的发展就是被穷玩家精打细算所实现。不过个人计算机从问世之日起就富有了叛逆、自由的精神,这只是实现整个个人计算机世界前进的主要动力。此时一个年轻的程序员发生并进而改变压缩世界,这个人叫PhillipW.Katz(菲利普·卡兹)。
20世纪七八十年代出售软件的方法和今天截然不同,以ARC软件来说,它虽然包括了一份EXE可执行文件,还包含它的C语言源代码。经常混迹于BBS上的菲利普·卡兹同样买不起ARC,于是他自己将ARC的C语言源代码进行复制并用汇编语言重写,并将这个压缩软件当做PKARC,这个程序自然与ARC完全兼容,而且因为使用汇编从而速度较ARC更快.在当年的计算机世界里这是一种很普遍的现象,并没有程序员觉得这些行为不对,甚至即使不与自己矛盾,被改写者往往也不在意.不过此次不太一样,菲利普·卡兹不只是是自己和同学用,而是将这个工具以非强迫性注册的共享工具手段向别人发放,但如果是不注册,一样可以毫无限制地使用下来,大批ARC用户自然也就转而使用菲利普·卡兹的软件.SEA其实不是哪个大企业,它也是个3人起家的小公司,当然能够接受这样毁灭性打击.以目前的心态看来,最初SEA的方法是温和的,它接洽菲利普·卡兹并期望借助授权的形式将PKARC纳入旗下,然而并不觉得自己有哪个过错的菲利普·卡兹一口答应,他不想让PKARC成为商业硬件,他制作这个软件的本意并不是为了赚钱.最终菲利普·卡兹被SEA以侵犯ARC压缩格式编码算法的定罪告上了,并丢掉了起诉.叛逆固执的卡兹在败诉后仍然反对将PKARC授权给SEA公司,而选择了支付法律成本和中止发放PKARC。
这场官司对菲利普·卡兹的一生观和信仰影响很大,追求自由公平的精神并不意味着过度和法律对抗,试图劫富济贫的少年侠客行为只能逞一时快意,实质上帮助不了任何人。在官司的进行中,菲利普·卡兹一直在稳步开发PKARC的后续产品PKPRC,败诉后菲利普·卡兹决定将PKPRC完全重写。很肯定,这次再也不能去触犯任何编码算法的专利权了,从3个基本编码算法来衍生自己的算法是必定的,于是除去有专利权的LZW和LZ78,剩下的就唯有LZ77。也许是被激怒后带给了惊人的动力,只用了几周的时间菲利普·卡兹就造就出一个全新的压缩编码算法,该算法完美地结合LZ77和Huffman编码,也就是当时大名鼎鼎的DEFLATE算法了。新压缩工具被命名为PKZIP,而其文件格式扩展名叫作“.zip”。PKZIP可将多个文件压缩到一个文件中,无论压缩比、压缩速率都全面达到了商业硬件ARC。菲利普·卡兹将PKZIP作为自由工具免费发放,使其如野火般在全球各大BBS上蔓延开来,用户以几何级数下降,遭受毁灭性遏制的SEA公司半年内就无声无息。这段独白最后演变为用自由工具打败商业软件的传奇,菲利普·卡兹更是作为富有幻想的年青程序员心里十步杀两人的偶像。
但是事情一旦只是到此为止,那么这也只是是菲利普·卡兹为私人恩怨而快意情仇的行为,未必能受到后人的真正尊重。不过他作出了一个让所有计算机客户都回报无穷的举动,那就是宣布开放ZIP格式,任何人都可以自由使用ZIP编码算法而不应该收取任何专利费用。这个决定最后颠覆了压缩的全球,使得通用数据无损压缩领域再能够出现寡头的商业巨鳄,真正含义上帮助了每位需要压缩的计算机客户。凭借这个无私的行为,菲利普·卡兹真正变成他想作为的英雄。
群雄逐鹿的结局--WinZip加冕王者

在DOS时代,ZIP格式和它的软件PKZIP并没有作为压缩世界的王者。虽然ZIP格式源于其开放性而在BBS上慢慢变成主流,不过后来的BBS网络环境虽然只属于少数PC玩家。由于CPU运行速率与内存软件容量的有限,当时个人计算机总是欢迎锱铢必计的压缩工具,因此程序员们也在不懈追求,开发出更快更好的编码算法与压缩软件。1988年到1995年成为压缩世界的黄金时代,压缩世界进入群雄鏖战的混战之中,与PKZIP具有相似影响力的也有LHA(压缩格式为LZH、LHA)和ARJ(压缩格式为ARJ)。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-130938-1.html
鱼子酱我还真吃不下
放家里跟放银行里都贬吧