算法的重要性

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公 司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为, 学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学, 但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法 和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上, 有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最 后只懂得招式,没有功力,是不可能成为高手的。 算法与我 当我在 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 里面的机器 down 掉一半, 整个 farm 依然能够运行。正是因为这个天才的认识,才有了 Map and Reduce 算法。借助该算法,Google 几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络 举一个计算机领域外的例子:

在高能物理研究方面,很多实验每秒钟都产生几个 TB 的数据量。但因为处 理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信 息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法都可以改变人类的生活。 例如人类基因的研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一 个 911 的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯救生命。 所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现,算法的重要性不是在 日益减小,而是在日益加强。 给程序员的七个建议 (1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把 数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大 家不妨试试高德纳所著 The Art of Computer Programming 里的题目,如果你能够解决其中的大部分题 目,就说明你在算法方面有一定的功力了。 (2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习 C 语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。 这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家 争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。 (3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实 干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。 比如,学会了 C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员 在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数 的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能 真正掌握。 (4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代 数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集 型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。 (5)培养团队精神,学会与人合作。今天的软件

工程早已经不是一个人可以单独操作的,而必须靠团队合 作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。 (6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创 新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新, 动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而 就的。 (7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的 公司, 在一个好的“老板”指导下完成真正会被用户使用的程序。 不要急于去一个要你做“头”而独挡一面的地 方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境, 一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。 希望大家都能把握机会,养成好的学习习惯,把算法学精学透;希望大家都能有一个美好的未来!

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公 司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为, 学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学, 但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法 和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上, 有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最 后只懂得招式,没有功力,是不可能成为高手的。 算法与我 当我在 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 里面的机器 down 掉一半, 整个 farm 依然能够运行。正是因为这个天才的认识,才有了 Map and Reduce 算法。借助该算法,Google 几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络 举一个计算机领域外的例子:

在高能物理研究方面,很多实验每秒钟都产生几个 TB 的数据量。但因为处 理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信 息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法都可以改变人类的生活。 例如人类基因的研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一 个 911 的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯救生命。 所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现,算法的重要性不是在 日益减小,而是在日益加强。 给程序员的七个建议 (1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把 数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大 家不妨试试高德纳所著 The Art of Computer Programming 里的题目,如果你能够解决其中的大部分题 目,就说明你在算法方面有一定的功力了。 (2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习 C 语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。 这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家 争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。 (3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实 干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。 比如,学会了 C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员 在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数 的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能 真正掌握。 (4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代 数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。 尤其当你对一些“数学密集 型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。 (5)培养团队精神,学会与人合作。今天的软件

工程早已经不是一个人可以单独操作的,而必须靠团队合 作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。 (6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创 新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新, 动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而 就的。 (7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的 公司, 在一个好的“老板”指导下完成真正会被用户使用的程序。 不要急于去一个要你做“头”而独挡一面的地 方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境, 一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。 希望大家都能把握机会,养成好的学习习惯,把算法学精学透;希望大家都能有一个美好的未来!


相关文章

  • 算法初步分析
  • 一.新课标要求 算法是数学及其应用的重要组成部分,是计算科学的重要基础.随着现代信息技术飞速发展,算法在科学技术.社会发展中发挥着越来越大的作用,并日益融入社会生活的许多方面,算法思想已经成为现代人应具备的一种数学素养.需要特别指出的是,中 ...查看


  • 浅析新版小学数学教材的创新特点
  • 关于小学数学算法多样化的认识与思考 [论文关键词]小学数学 算法多样化 价值取向 优化 [论文摘要]目前,小学数学教学越来越关注算法的获得和选择对学生的影响.本文试图探讨新的数学课堂教学的模式,调动不同层次学生数学学习的积极性,让学生学会数 ...查看


  • 遗传算法原理与发展方向综述
  • 信息科学 遗传算法原理与发展方向综述 赵宜鹏 孟磊 彭承靖 (云南民族大学数计学院,云南昆明650031) 摘 要:遗传算法是一种基于生物自然选择与遗传机理的随机搜索与优化方法,近年来, 由于遗传算法求解复杂优化问题的巨大潜力及其在工 业工 ...查看


  • 十大经典数学模型
  • 十大经典数学模型 1.蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,是比赛时必用的方法) 2.数据拟合.参数估计.插值等数据处理算法(比赛中通常会遇到大量的数据需要处理,而 ...查看


  • 信息安全概论加密算法论文
  • 随着信息时代的到来,特别是随着Internet和电子商务的发展,怎样才能达到使信息系统的机密信息难以被泄漏,或者即使被窃取了也极难识别,以及即使被识别了也极难篡改,已经成为IT业界的热点研究课题.到现在为止网络安全解决方案可以分为两大类:一 ...查看


  • 数学建模论文摘要.论文.正文的写作方法
  • <数学建模>论文 摘要.论文正文的写作方法 我们知道,在数学建模比赛中,评定参赛队的成绩好坏.高低,获奖级别,数模论文,是唯一依据.所以,写好数学建模论文,对于整个比赛的成败与否,非常的关键.现在我结合阅卷中的一些实际,对数模论 ...查看


  • 计算机算法分析与设计+++论文2
  • 河北科技师范学院 欧美学院 算法设计与分析个人总结 指导教师 院 系 班 级 学生姓名 学 号 引言:对于计算机科学来说,算法分析与设计是至关重要的.在一个大型软件系统的开发中,设计出有效的算法将起到决定性的作用.通俗的讲,算法是解决问题的 ...查看


  • 粒子滤波算法综述
  • 第20卷第4期 Vol.20No.4 控 制 与 决 策 Controland Decision 2005年4月 Apr.2005 文章编号:1001-0920(2005)04-0361-05 粒子滤波算法综述 胡士强,敬忠良 1,2 1 ...查看


  • 信息技术课程教学设计2
  • 信息技术课程中算法一课的教学设计 作者:王爱胜 新的<中小学信息技术课程指导纲要>对高中信息技术课程中程序设计方法的学习提出了更高的要求,其中关于算法的要求也更多了.如何让学生更容易地理解算法的概念,如何让学生尽快掌握算法的设计 ...查看


  • 我对智能优化算法的认识
  • 我对智能优化算法的认识 20世纪70年代以来,随着仿生学.遗传学和人工智能科学的发列展,形成了一系列新的优化算法--智能优化算法.智能优化算法是通过模拟某一自然现象或过程而建立起来的,他们具有适于高度并行.自组织.自学习与自适应等特征,为解 ...查看


热门内容