前言:
当前看官们对“lzw编码例题”大约比较注重,各位老铁们都想要知道一些“lzw编码例题”的相关内容。那么小编同时在网摘上搜集了一些有关“lzw编码例题””的相关资讯,希望姐妹们能喜欢,我们快快来了解一下吧!自由叛逆的ZIP斗士——菲利普·卡兹
日前笔者整理旧物,在抽屉的角落中发现了一张3.5吋的软磁盘,怀旧情绪由然而生。就是当年这种小小的容量为1.44M的软盘,成为我们上机时的必备工具。小小一张软盘价值5元,想想如今以TB计算的硬盘该价值几何?因为容量小,大家就不得不挖空心思考虑如何最大限度地物尽其用,总渴望有一种方法把数据像压缩饼干似的包含着更多的能量。其实不仅笔者这样可以自诩的老鸟曾经有这样的渴望,人们对于这种渴望早就开始了。
压缩算法的历史
为何要先提到压缩算法的历史,很大程度上因为对于压缩而言,算法是灵魂。算法之重要如同汽车引擎,而压缩软件不过是基于该引擎而设计的汽车。对算法的研究由来已久,可以追溯到上个世纪前半叶。
最早的比较公认的算法是1948 年Shannon 在论文《通信的数学理论》中提到Shannon 编码,它提出信息熵概念的同时也奠定了所有数据压缩算法的理论基础。1952 年,R.M.Fano 又进一步提出了Fano编码。两者后来被称为 Shannon-Fano 编码,这种编码虽揭示了变长编码的基本规律,但因实用性较差,还是避免不了扮演“马前卒”或“先驱”的命运。
第一个真正实用的编码方法是由D.A.Huffman 在 1952 年提出Huffman 编码。据说提出该编码的目的十分单纯,仅仅是为了向老师证明自己可以不参加某门功课的期末考试。该编码具有效率高、运算速度快、实现方式灵活等优点,故而从诞生伊始,即得到广泛应用。时至今日,常见压缩算法里,也都有 Huffman 编码的身影。
而目前流行压缩软件的算法主要是基于LZ算法。LZ 是其发明者 J.Ziv 和 A.Lempel 两个犹太人姓氏的缩写。因1977 年发表题为《顺序数据压缩的一个通用算法》的论文,论文中描述的算法被后人称为 LZ77 算法。1978 年,二人又发表了该论文的续篇, 该算法即被为 LZ78。之后Terry Welch 在1984年改进了 LZ78 算法,提出了LZW 算法。目前的压缩算法,都是基于 LZ77、 LZ78 和 LZW 是字典编码中最基础的3种编码算法。该类算法被统称为 Dictionary coders,基本思路如查字典,核心思想在于用字典中的页码和行号代替文章中的每个单词。字典式编码不但在压缩效果上大大超过了 Huffman 编码,而且压缩和解压缩的速度也异常惊人,于是使用LZ系列算法的工具软件数量呈爆炸式 增长。今天我们熟悉的 PKZIP、WinZip、WinRAR、gzip 等压缩 工具都是 LZ 系列算法的受益者,甚至连 PGP 这样的加密文件格式也选择了LZ系列算法作为其数据压缩的标准。 一个耐人寻味的现实是 LZ77这个并不最优的算法大行其道,而更优的 LZ78 和 LZW算法却踪迹难觅。这是为何?很简单的原因,三个字, 专利权;一个字,钱。相对于 LZ77 完全没有专利限制来说,使用LZ78和 LZW算法则要交专利费。
叛逆斗士的胜利——ZIP格式诞生
与互联网时代相比,人们在单机时代对于数据压缩的渴望只能算小巫见大巫了。由于技术所限,通过电话线的接入速度慢得可怜,通过互联网传输较大文件实在是叫人痛苦的一件事。传说中的信息高速公路竟然比土路上的牛车还慢了不知多少倍。于是,使用压缩技术减小文件的体积并将多个文件压缩到一个封包中就成为了用户的一项必须掌握的技巧。SEA(System Enhancement Associates)公司携带ARC压缩软件应运而生。它生逢其时却又命运多舛,先天基因不足最终导致了昙花一现。先天基因不足是因为它采用专利 LZW 算法,使它不得不成为标准的商业软件。说其命运多舛是因为其刚一出世就遇到了强大对手,一个20多岁的愣头青——菲利普·卡兹。
那时的菲利普·卡兹是一个沉迷于BBS 上的毛头小伙,除了喜欢尝新之外,还和当时大多玩家一样穷,根本买不起 ARC 软件。穷则思变,何况是才华横溢的愤青小伙。小伙对于ARC的收费非常不满,但他不知从什么地方搞到一套ARC软件。别人买ARC的目的是为了自己用;而他目的是共享,而且免费,所以他复制了ARC 的C语言源代码。不用怀疑,他能搞到源代码是使用了什么见不得人的手段,而是那个时代的软件销售不仅包括一份 EXE 可执行文 件,还包括它的C语言源代码。接下来他的工作就是利用汇编语言重写,将其改头换面为PKARC(Philip Katz'ARC),这个程序与 ARC完全兼容,而且由于使用汇 编使得速度较ARC更快。当然这事件本身没错,即使现在也有许多高手在做,作为个人行为,没人会理会,也不会有人去追究。不过这次菲利普·卡兹玩得有点过火,不仅仅是自己和朋友用,而是将这个软件以非强迫性注册的共享软件形式向他人发放,即使不注册,一样可以毫无限制地使用下去,大批ARC用户自然也就转而使用菲利普·卡兹的软件。玩火可以,玩过头了则自然会引火烧身。为生存计,SEA公司曾私下接洽过菲利普·卡兹,并希望通过授权的方式将PKARC收编。视收费为敌人的菲利普·卡兹当然一口回绝,让PKARC成为商业软件来赚钱不是他的初衷。 SEA公司一纸诉状将菲利普·卡兹告上了法庭,法庭自然判决菲利普· 卡兹禁止继续开发和传播PKARC。而他也不出意外地输掉了官司。败诉后的卡兹依然拒绝将PKARC授权给SEA公司,而选择了支付法律费用和停止发放PKARC。
判决并没有压跨卡兹,而是激起了他与ARC斗争到底的决心。如打不死的小强,遇强则强,他选择了对PKPRC完全重写。当然这次不能去触犯任何有专利权的编码算法了,完全自己重写编码也不太现实,借签不失为一条便捷路,于是他的目光转向了3个基本编码算法。LZW和 LZ78有专利权,剩下的就只有LZ77。也许是被激怒后带来了惊人的动力,只用了几周时间,菲利普·卡兹就创造出一个全新的压缩编码算法,该算法完美地结合 LZ77 和 Huffman 编码,也就是后来大名鼎鼎的 DEFLATE 算法了。 新压缩软件被命名为PKZIP,而其文件格式扩展名叫作“.zip”。PKZIP可将多个文件压缩到一个文件中,无论压 缩比、压缩速度都全面超过了商业软件ARC。菲利普·卡兹将PKZIP作为自由软件免费发放,使其以星火燎原之势在全 美各大BBS上蔓延开来,用户以几何级数增长,各大BBS的站长自发将原来使用ARC格式压缩的文件转换成ZIP格式,卡兹用他天才的头脑和顽强的毅力堂堂正正的击败了ARC,使得SEA公司半年内就无声无息。这段故事最后演变为用自由软件打败商业软件的传奇,菲利普·卡兹更是成为充满幻想的年轻程序员心中的偶像,即使今天提及,也让人津津乐道。正如后来有人评价卡兹时所说的那样:“他无疑扮演了ARC掘墓人的角色,为ARC的棺材钉上了最后一颗钉子!”
如果仅仅到此为止,那么这也不过是菲利普·卡兹为一己私愤而快意恩仇的行为,未必能得到后人的真正尊重。自由平等的思想已浸入了他骨髓,他做出了一个让所有电脑用户都受益无穷的举动,那就是宣布开放ZIP格式,任何人都可以自由使用ZIP编码算法而不需要缴纳任何专利费用。这个决定最终改变了压缩的世界,使得通用数据无损压缩领域再无法出现垄断的商业巨鳄,真正意义上帮助了每个需要压缩的计算机用户。凭借这个无私的行为, 菲利普·卡兹真正成为他想成为的英雄。而目前国内好压、酷压、360压缩为何能争相推出并免费使用,一个根本原因就是ZIP算法的免费,而RAR需要付费。
此后卡兹一直继续着对PKZIP的开发和维护工作,PKZIP建立和统治了DOS时代的压缩标准ZIP压缩格式,当然同时代的主要竞争者还有压缩率更高的ARJ和LHA格式。Windows诞生后,使用卡兹创造的压缩算法的软件Winzip,凭借着良好的图形界面和友好的操作方式,远远地把ARJ和LHA格式甩在了身后,更使ZIP格式成为Internet的传输标准,ZIP压缩格式也成为压缩文档的事实标准,建立起一个统治Internet的“ZIP王朝”。
风水轮流转,目前的压缩软件市场远不是ZIP一家独大,WinRAR风头正劲,7Z也在虎视眈眈。但ZIP在压缩软件的历史长河中,必将会占有一席之地。
令人遗憾的是,卡兹虽然给世人呈上了最美的ZIP编码,他的最终命运却让人扼腕叹息。他获得了精神,却败给了物质。糟糕的个人生活习惯和长期编写软件的巨大压力使卡兹染上了的恶习,最终断送了他那年轻的生命。2000年的4月14号,死在了美国威斯康星州密尔沃基的一家汽车旅馆里,死时,年仅37岁;死时,手里还紧握着一个烈性酒的酒瓶。斯人已逝,留给后人除了无尽的忧伤和遗憾之外,也唯有通过Ultraedit打开任一个zip文件,去看一下文件最前面两个字母PK,这便是zip文件格式的创始人Philip Katz的名字缩写。也许这是我们纪念它唯一的也是最好的方式。
标签: #lzw编码例题