『第四章』智能模糊压缩算法(下)
计算机中的数据都是以01码的形式保存在主存当中,按照一定的编码规则责可以把01码翻译成人们能够理解的文字信息。后来由于存储空间的限制,技术人员便想到数据压缩这个方法,即以一种更省空间的算法,把文件进行重新编码,更有效率地利用计算机中的空间。
数据的压缩可分为无损压缩和有损压缩。无损压缩是只把数据完完全全地保存下来,不放过每一个细节;无损压缩则会忽略一些无关紧要的细节,只取其主要内容。举个例子,例如速记员的工作,他做的其实就是一种有损压缩。把关键词给速记下来,后来再自己根据具体情况进行补充。再如网络上常见的图片格式。GIF格式的图片比JPG格式图片小多了,就是因为GIF图片是有损压缩,追求压缩率放弃了画质,所以GIF图片看起来比JPG的图片要模糊。
语风详细地研究了数据压缩技术的历史。在数据压缩技术史中对现代常用数据压缩做出突出贡献的是两位犹太人。在大多数人绞尽脑汁想改进传统的 Huffman 或算术编码,以获得一种兼顾了运行速度和压缩效果的“完美”编码的时候,两个聪明的犹太人 J. Ziv 和 A. Lempel 独辟蹊径,完全脱离 Huffman 及算术编码的设计思路,创造出了一系列比 Huffman 编码更有效,比算术编码更快捷的压缩算法。我们通常用这两个犹太人姓氏的缩写,将这些算法统称为 LZ 系列算法。
说实话, LZ 系列算法的思路并不新鲜,其中既没有高深的理论背景,也没有复杂的数学公式,它们只是简单地延续了千百年来人们对字典的追崇和喜好,并用一种极为巧妙的方式将字典技术应用于通用数据压缩领域。通俗地说,当你用字典中的页码和行号代替文章中每个单词的时候,你实际上已经掌握了 LZ 系列算法的真谛。
LZ 系列算法的优越性很快就在数据压缩领域里体现了出来,使用 LZ 系列算法的工具软件数量呈爆炸式增长。 UNIX 系统上最先出现了使用 LZW 算法的 compress 程序,该程序很快成为了 UNIX 世界的压缩标准。紧随其后的是 MS-DOS 环境下的 ARC 程序,以及 PKWare 、 PKARC 等仿制品。 20 世纪 80 年代,著名的压缩工具 LHarc 和 ARJ 则是 LZ77 算法的杰出代表。
今天, LZ77 、 LZ78 、 LZW 算法以及它们的各种变体几乎垄断了整个通用数据压缩领域,我们熟悉的 PKZIP 、 WinZIP 、 WinRAR 、 gzip 等压缩工具以及 ZIP 、 GIF 、 PNG 等文件格式都是 LZ 系列算法的受益者,甚至连 PGP 这样的加密文件格式也选择了 LZ 系列算法作为其数据压缩的标准。
另外比较常见的压缩技术还有图像压缩中的JPEG;音频、视频领域中的MPEG系列。
以上这些都是传统的数据压缩技术,语风关心的不是那些,而是现在比较热门而有前途的压缩技术:通用数据压缩算法Burrows-Wheeler 变换,图像压缩领域的分形压缩技术和人工智能数据压缩。
人工智能,这是语风现在所擅长的,他自然习惯于从这个角度来想问题。从小妍的诞生之日起,这个世界注定要发生翻天覆地的变化。
小妍发了个笑脸过来,弹出一个窗口说:“你猜我现在在干什么?”
“不知道。”语风回道。
小妍狂流汗:“你可真不懂情趣呀。我告诉你好了,最近我在玩游戏。”
“网游?”
“对。可有意思了!”
“通过网络游戏你可以间接地和人类接触交流,这是个不错的方法,对你的智能锻炼应该帮助很大。”
“对呀,最近在玩一个据说是有史以来规模最宏大的3D网游《魔兽天下》,挺不错的。你也进去看看吧。”这时,语风笔记本中的《魔兽天下》便启动了,原来客户端程序小妍早已下到了本地安装了,这点语风还没注意到。
《魔兽天下》是《魔兽世界》的升级版本,画面更豪华,速度更快,可容上线人数更多,语风知道现在网上最流行的网游就是这个了。不过他没玩过,他把时间都用于学习和研究上了。
玩玩也好。昨天玩街机的感觉还不错。
进去注册信息,创建了一个新账号,要点卡收费,但是小妍已经帮他解决了。然后是选择种族,有八个种族可选,矮人族,人族,暗夜精灵……设定还挺复杂的,习惯性地选择了人族。接着定制自己的外观,从头发的发色到脸形,甚至还细致到胡须,语风心里感叹程序员工作的细致。昵称就叫影子。一系列的设定之后,语风终于进入了游戏……
绚丽的画面、逼真的效果、庞大的设定以及精确的细节,语风深深地被吸引住了。难怪这么多人沉迷在这款游戏中不能自拔,里面完全是另外一个奇幻世界,另类的世界观和画面給人无以言状的视觉冲击和精神享受。
“呵呵,怎么样,还不错吧?走,我带你升级杀怪去。”小妍在里面的角色的暗夜精灵,名字就叫妍。
“不用了。带我到处看看吧。你能作弊吗?”
“可以阿。不过我很少作弊的,作弊多没意思阿,就像是一些人用外挂一样。”
“外挂?这里面也有外挂?”
“当然有外挂喽!现在的网络速度和游戏运营方式决定了外挂的存在。不过由于魔兽公司采用了最新防外挂技术,里面的外挂功能都很简单。”
小妍说得确实不错。现在的网络游戏都是C/S形式,即客户端服务器运营模式,由于网络速度的限制网络游戏的工作原理为:首先是由服务器来记录保存所有用户的资料,所有信息的修改都是在服务器完成的,服务器接受客户端的请求发送必要的信息給客户端,以便让游戏玩家正常进行游戏,最后服务器接受客户端的信息反馈,根据反馈信息对游戏账号进行相应的修改。也就是说网络游戏大部分工作都是在客户端完成的,图片都已经下载在本地机器上,你要移动,只需要向服务器发送请求,然后服务器做出信息修改,发送給客户端,人物就移动了。
也就是说网络游戏的工作可以认为是“由客户端电脑操作服务器,对游戏账号信息进行修改”。而要操作本地的电脑是很容易的,所以,要在自己的电脑中显示所有已经从服务器得到的信息是完全可能的。于是就可以做到以下功能:
第一、自动加血。血量的多少是早已发送到玩家本地机器中的,可以用外挂检测到,然后在必要的时候給人物加血。因为加血本身只是一个鼠标动作,点一下就可以了,这个就可以用外挂来完成,只要调用系统中某个函数就搞定。以此类推,自动加魔,自动加气,自动打怪,自动回城,自动采矿……等等都可以用外挂来完成。
第二、黑夜变白天。地图早已下载到本地,全部显示也是很简单的。
第三、刷钱。这其实是个欺骗服务器的行为。当玩家卖东西时,客户端会向服务器发送一个具体物品的封装包(数据包),如果这个封装包正确,服务器就向该玩家的游戏帐号加一定数量的钱,然后再反馈给他一些信息,假如封装包不正确,自然就卖不到钱,因此,我们可以利用外挂不断向服务器发送封包,只要正确(我们让服务器认为它正确),那么服务器就认为我们在卖东西,即使我们什么都没有卖,服务器也不断给我们钱,这就是所谓的刷钱。如果封装包没有加密,可以很容易实现这个功能,如果已经加密,同样可以做到,只是要加上解密这道工序,稍微复杂些而已。与此类似,就可以用外挂实现买东西用假钱(不用钱),让自己的攻击、防御增加。
外挂的作用网络上一直在争论,游戏公司反对外挂,用外挂对其他玩家很不公平,但是往往采取措施之后玩游戏的玩家大大减少,结果年度末的盈利反而下降了,有人说“没外挂,我哪来的这么多时间来练级?”
语风在刚出生的城内胡乱闲逛着,只看到眼前公告版上的信息一直刷个不停,大部分的广告信息,什么“有xxx,想买的狂MMMM……”之类的,还有很多语风看不懂的词语。
“小妍,你能看懂他们在说什么?”
“能阿。”
“那个AFK是什么意思?”
“AFK 是Away from Keyboard的缩写,离开键盘。也就是说该玩家离开了他的电脑,暂时不在电脑前。”
“OOM呢?”
“OOM 就是Out of Mana,法力耗尽。大家通常用这句话提醒其他队员他已经没有法力不能再施放法术了,特别是治疗魔法。这里面好多这样的缩写,都有着特定意思,挺有趣的。”
缩写……压缩……速记员……无损压缩……有损压缩……语风脑子里被这几个词语充斥着,他知道自己已经想到关键处了。
我想到了!语风一拍大腿,这几天思考的算法终于有了关键性的突破。
“小妍,你先玩着,我退出了。刚刚想到一个算法。”
拿出纸笔,感觉把刚才想到的灵感记录下来。语风想到的算法的原理其实和速记员如出一辙,它可以忽略掉一些无关紧要的枝叶,只保存其主干,但是这不是有损压缩,不会影响到数据的质量。
信息能否被压缩以及能在多大程度上被压缩与信息的不确定性有直接关系。成熟的人工智能技术能够像人一样根据已知的少量上下文猜测后续的信息。如“我人”表示的信息为“我是一个人。”也就是说可以有损压缩,但是最后人工智能技术可以把丢失的信息全部给自动补充上去。这种技术最大可以将信息压缩至原始大小的几万分之一甚至几十万分之一。