Prob_Solve 板


LINE

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生 看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学 各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的舖路方法。其实大家 都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算 机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算 法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。 在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技 术、标准比拟为“外功”。整天赶时髦的人最後只懂得招式,没有功力,是不可能成为高 手的。 算法与我 当我在1980年转入计算机科学系时,还没有多少人的专业方向是计算机科学。有许多其他 系的人嘲笑我们说:“知道为什麽只有你们系要加一个‘科学’,而没有‘物理科学系’ 或‘化学科学系’吗?因为人家是真的科学,不需要画蛇添足,而你们自己心虚,生怕不 ‘科学’,才这样欲盖弥彰。”其实,这点他们彻底弄错了。真正学懂计算机的人(不只 是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师 的务实手段来解决问题──而这种思维和手段的最佳演绎就是“算法”。 记得我读博时写的Othello对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥 幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效 率上比他快60多倍时,才彻底服输。为什麽在同样的机器上,我可以多做60倍的工作呢? 这是因为我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数 时间就可得到近似的答案。在这个例子中,是否用对算法才是能否赢得世界冠军的关键。 还记得1988年贝尔实验室副总裁亲自来访问我的学校,目的就是为了想了解为什麽他们的 语音识别系统比我开发的慢几十倍,而且,在扩大至大词汇系统後,速度差异更有几百倍 之多。他们虽然买了几台超级计算机,勉强让系统跑了起来,但这麽贵的计算资源让他们 的产品部门很反感,因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中,我 惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。 更惊讶的是,他们还为此发表了不少文章,甚至为自己的算法起了一个很特别的名字,并 将算法提名到一个科学会议里,希望能得到大奖。当时,贝尔实验室的研究员当然绝顶聪 明,但他们全都是学数学、物理或电机出身,从未学过计算机科学或算法,才犯了这麽基 本的错误。我想那些人以後再也不会嘲笑学计算机科学的人了吧! 网络时代的算法 有人也许会说:“今天计算机这麽快,算法还重要吗?”其实永远不会有太快的计算机, 因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快 增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现 在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的纪录和存 储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快 增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论 是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代, 越来越多的挑战需要靠卓越的算法来解决。 再举另一个网络时代的例子。在互联网和手机搜索,如果要找附近的咖啡店,那麽搜索引 擎该怎麽处理这个请求呢?最简单的办法就是把整个城市的咖啡馆都找出来,然後计算出 它们的所在位置与你之间的距离,再进行排序,然後返回最近的结果。但该如何计算距离 呢?图论里有不少算法可以解决这个问题。 这麽做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆,那 麽这麽做应该没什麽问题,反正计算量不大。但如果一个城市里有很多咖啡馆,又有很多 用户都需要类似的搜索,那麽服务器所承受的压力就大多了。在这种情况下,我们该怎样 优化算法呢? 首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“ 格子(grid)”,然後根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进 行距离排序。 问题又来了,如果格子大小一样,那麽绝大多数结果都可能出现在市中心的一个格子里, 而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更 进一步,格子应该是一个“树结构”,最顶层是一个大格──整个城市,然後逐层下降, 格子越来越小,这样有利於用户进行精确搜索──如果在最底层的格子里搜索结果不多, 用户可以逐级上升,放大搜索范围。 上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一 下,它是一个“点”,如果要搜索一个“面”该怎麽办呢?比如,用户想去一个水库玩, 而一个水库有好几个入口,那麽哪一个离用户最近呢?这个时候,上述“树结构”就要改 成“r-tree”,因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http: //www.cs.umd.edu/~hjs/rtrees/index.html)。 通过这个小例子,我们看到,应用程序的要求千变万化,很多时候需要把一个复杂的问题 分解成若干简单的小问题,然後再选用合适的算法和数据结构。 并行算法:Google的核心优势 上面的例子在Google里就要算是小case了!每天Google的网站要处理十亿个以上的搜索, GMail要储存几千万用户的2G邮箱,Google Earth要让数十万用户同时在整个地球上遨游 ,并将合适的图片经过互联网提交给每个用户。如果没有好的算法,这些应用都无法成为 现实。 在这些的应用中,哪怕是最基本的问题都会给传统的计算带来很大的挑战。例如,每天都 有十亿以上的用户访问Google的网站,使用Google的服务,也产生很多很多的日志(Log) 。 因为Log每份每秒都在飞速增加,我们必须有聪明的办法来进行处理。我曾经在面试中 问过关於如何对Log进行一些分析处理的问题,有很多面试者的回答虽然在逻辑上正确, 但是实际应用中是几乎不可行的。按照它们的算法,即便用上几万台机器,我们的处理速 度都根不上数据产生的速度。 那麽Google是如何解决这些问题的? 首先,在网络时代,就算有最好的算法,也要能在并行计算的环境下执行。在Google的数 据中心,我们使用的是超大的并行计算机。但传统的并行算法运行时,效率会在增加机器 数量後迅速降低,也就是说,十台机器如果有五倍的效果,增加到一千台时也许就只有几 十倍的效果。这种事半功倍的代价是没有哪家公司可以负担得起的。而且,在许多并行算 法中,只要一个结点犯错误,所有计算都会前功尽弃。 那麽Google是如何开发出既有效率又能容错的并行计算的呢? Google最资深的计算机科学家Jeff Dean认识到,Google所需的绝大部分数据处理都可以 归结为一个简单的并行算法:Map and Reduce(http://labs.google.com/papers/mapred uce.html)。这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是 说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最後 ,它的容错性能异常出色,就算一个server farm宕掉一半,整个fram依然能够运行。正是因 为这个天才的认识,才有了Map and Reduce算法。借助该算法,Google几乎能无限地增加 计算量,与日新月异的互联网应用一同成长。 算法并不局限於计算机和网络 举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都能几个TB的数据量 。但因为处理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。 可大家要知道,新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的,在其 他任何领域里,算法可以改变人类的生活。例如人类基因的研究,就可能因为算法而发明 新的医疗方式。在国家安全领域,有效的算法可能避免下一个911的发生。在气象方面, 算法可以更好地预测未来天灾的发生,以拯救生命。 所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现;算法 的重要性不是在日益减小,而是在日益加强。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.156.192
1F:推 march20:很好奇, 这是刊在哪个杂志的咧? 06/29 10:45
2F:推 march20:如果刊在数字周刊或水果日报, 读者应该会一头?水吧 XD 06/29 10:45
3F:推 windows2k:上谷歌查应该就拿查到这篇了 06/29 11:03
4F:推 cplusplus:古歌 XD 哈哈 还是很奇怪 06/29 15:39
5F:推 nsc:推晕倒两仟 06/29 22:24
6F:推 drkkimo:不错的文章呀~ 07/03 23:29
7F:推 ngulin0911:好文章..只是很多大陆的用语..看得很辛苦.算法=演算法? 07/04 12:52
8F:推 march20:好文 M 起来 :P 07/04 15:17
weii:转录至看板 SFFamily 08/28 13:36
9F:推 pioneerLike:好文~^^~ 借转:) 09/23 22:43







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP