`
celebration
  • 浏览: 35163 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

李开复:算法的力量

阅读更多

李开复:算法的力量

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学 计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算 法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计 算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶 时髦的人最后只懂得招式,没有功力,是不可能成为高手的。


算法与我

当我在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/mapreduce.html )。 这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。 Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个 server farm宕掉一半,整个fram依然能够运行。正是因为这个天才的认识,才有了Map and Reduce算法。借助该算 法,Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长。


算法并不局限于计算机和网络

举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都能几个TB的数据量。但因为处理能力和存储能力的不足,科学家不得不把绝大部分未经处理 的数据丢弃掉。可大家要知道,新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法可以改变人类的生活。例如人类基因的 研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一个911的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯 救生命。

所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现;算法的重要性不是在日益减小,而是在日益加强。

分享到:
评论
1 楼 rmn190 2008-07-17  
对算法的重要价值有了更深的认识,

"编程匠" --> "功夫高手"

相关推荐

    李开复:算法的力量;李开复:算法的力量

    总而言之,李开复博士关于算法力量的观点深刻而有力,他呼吁大家回归计算机科学的本质,重视算法和理论知识的学习。在这个快速变化的技术世界里,算法的力量是无可替代的,它不仅塑造了过去,更定义了未来。每个希望...

    李开复-算法的力量

    李开复先生在其讲座《算法的力量》中,深入浅出地阐述了算法在计算机科学领域的核心地位,并强调了它对技术发展和人才成长的重要性。通过李开复先生的经历和见解,我们可以深刻理解到,掌握算法,就如同习武之人练就...

    李开复文章:算法的力量

    以他的Othello对弈软件为例,通过高效的算法,他的程序能在相同的硬件条件下完成比对手多60倍的工作,这正是算法力量的体现。再如,贝尔实验室的语音识别系统性能低下的问题,归根结底也是算法优化不足导致的,说明...

    李开复: 算法是计算机科学领域最重要的基石

    而只有那些掌握了算法“内功”的人才,才能在科技发展的浪潮中立于不败之地,成为推动社会进步的关键力量。因此,重视和加强算法的学习,不仅关乎个人的职业发展,也是国家和社会发展的需要。只有这样,我们才能在...

    李开复-算法的力量 编程灵魂

    这一点在标题“李开复-算法的力量 编程灵魂”中得到了强调。算法的重要性不仅在于它能够让程序变得更加高效,更重要的是,它是连接计算机科学理论与实践之间的桥梁。 在描述中提到,“算法是计算机编程的灵魂!”这...

    算法的力量--李开复

    这不仅仅是一个技术上的胜利,更是算法力量的体现。它揭示了在软件开发中,算法创新和优化是提升性能和竞争力的关键。 另一个引人深思的案例发生在贝尔实验室。研究人员由于缺乏深厚的算法知识,对算法理解不足,...

    算法的力量 李开复

    "算法的力量 李开复" 算法是计算机科学领域最重要的基石之一,但卻受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言。 实际上...

    算法思想 李开复--算法的力量

    李开复提到的“算法的力量”强调了算法在计算机科学中的核心地位。算法不仅是编程的基础,更是解决复杂问题的关键。在描述中,李开复指出,一些程序员误以为掌握多种编程语言就能在IT行业立足,但实际上,理解和掌握...

    算法的力量、(李开复)、程序员读

    《算法的力量》是李开复博士的一本专为程序员撰写的书籍,强调了算法在信息技术领域中的重要性。算法是解决问题的关键,它们是程序的心脏,驱动着计算机系统的高效运行。这本书旨在帮助程序员深入理解算法,提升编程...

    李开复自传:世界因你不同(完全版).pdf

    ### 李开复自传《世界因你不同》相关知识点 #### 书籍基本信息 - **书名**:《世界因你不同:李开复自传》 - **作者**:李开复、范海涛 #### 书籍简介 《世界因你不同》是一本由李开复与范海涛合著的自传体作品,...

    算法导论Introduction to Algorithms,.Second Edition

    Introduction to Algorithms是麻省理工学院的算法导论教程,他将带领你...算法对当今的社会几个人都极其重要,不妨看下李开复:算法的力量http://www.kuqin.com/itman/kaifulee/20070814/274.html,希望对你有所收获!

    算法的力量

    ### 算法的力量:李开复的深入解析 #### 引言 李开复在其著作《算法的力量》中深刻剖析了算法对于软件开发人员的重要性。他指出,尽管市场上不断涌现新的编程语言和技术,但算法作为计算机科学的核心基石仍然至关...

    csdn论坛算法精华

    【算法的力量】(李开复) 这篇文章由李开复撰写,揭示了算法在现代科技和社会中的巨大影响力。算法,作为计算机科学的基础,已经渗透到我们生活的方方面面,从搜索引擎的推荐系统,到社交媒体的信息推送,再到金融...

    AI·未来-李开复.zip

    他强调了数据、计算能力、算法和应用场景这四大驱动力量如何交织在一起,推动AI技术的飞跃发展。特别是数据的积累和算法的进步,为AI提供了动力和方向,而计算能力的提升则是实现这些可能性的技术保障。 在应用方面...

    李开复老师新作,epub格式,网络资源上传共享

    李开复老师的新作,网络资源,上传与大家共享,epub格式,可直接用浏览器打开阅读。

    李开复博士给中国计算机系学生的建议

    在当今科技飞速发展的时代,计算机科学无疑是引领变革的核心力量。李开复博士,这位在计算机科学领域有着杰出贡献的学者,对于中国计算机系学生的未来发展提出了深刻的见解和建议。这些指导不仅为学生指明了学术发展...

    《人工智能》读后感李开复人工智能读后感.pdf

    随着算法的优化和计算能力的提升,我们看到越来越多先进而智能的机器被创造出来。这不仅推动了技术的变革,也激发了社会对于机器人是否可能具备情感和伦理道德问题的热烈讨论。电影《人工智能》中的设定,就是对这一...

    语音识别技术:第四讲 语言模型.pdf

    此后,李开复在语音识别领域进一步验证了统计语言模型的有效性,将原本复杂的大词汇量非特定人连续语音识别问题简化成了一个更易处理的20词识别问题。 早期的词性标注系统,如TAGGIT和CLAWS系统,也展示了统计语言...

Global site tag (gtag.js) - Google Analytics