《程序员须知的二十世纪最伟大10大算法》由会员分享,可在线阅读,更多相关《程序员须知的二十世纪最伟大10大算法(6页珍藏版)》请在金锄头文库上搜索。
1、返回日志列表程序员须知的二十世纪最伟大10大算法2011-6-8 18:36阅读(3)赞,转载分享,评论,复制地址,举报,更多上一篇 |下一篇:程序员应该具备的.一、1946蒙特卡洛方法1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Ne
2、umann,Stan Ulam和Nick Metropolis共同发明,被称为蒙特卡洛方法。它的具体定义是:在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(Monte Carlo)方法告诉我们,均匀的向该正方形内撒N(N是一个很大的自然数)个黄豆, 随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的值便越精确。在这里我们要假定豆子都 在一个平面上,相互之间没有重叠。蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看这两个实数
3、是 否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为 PI:1,PI为圆周率),当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位 与圆周率吻合)时,其结果越接近于圆周率。二、1947单纯形法1947: George Dantzig, at the RAND Corporation, creates the simplex method for linear programming.1947年,兰德公司的,Grorge Dantzig,发明了单纯形方法。单纯形法,此后成为了线性规划学科 的重要基石。所谓线性规划,简单的说,就是给定一组线性
4、(所有变量都是一次幕)约束条件(例如 a1*x1+b1*x2+c1*x30),求一个给定的目标函数的极值。这么说似乎也太太太抽象了,但在现实中能派上用场的例子可不罕见一一比如对于一个公司而言,其 能够投入生产的人力物力有限(“线性约束条件”),而公司的目标是利润最大化(“目标函数取最 大值”),看,线性规划并不抽象吧!线性规划作为运筹学(operation research)的一部分,成为管 理科学领域的一种重要工具。而Dantzig提出的单纯形法便是求解类似线性规划问题的一个极其有效 的方法。三、1950 Krylov子空间迭代法1950: Magnus Hestenes, Eduard S
5、tiefel, and Cornelius Lanczos, all from the Institute for Numerical Analysis at the National Bureau of Standards, initiate the development of Krylov subspace iteration methods.1950年:美国国家标准局数值分析研究所的,马格努斯Hestenes,爱德华施蒂费尔和科尼利厄斯的 Lanczos,发明了 Krylov子空间迭代法。Krylov子空间迭代法是用来求解形如Ax=b的方程,A是一 个n*n的矩阵,当n充分大时,直接计
6、算变得非常困难,而Krylov方法则巧妙地将其变为 Kxi+1=Kxi+b-Axi的迭代形式来求解。这里的K(来源于作者俄国人Nikolai Krylov姓氏的首字母) 是一个构造出来的接近于A的矩阵,而迭代形式的算法的妙处在于,它将复杂问题化简为阶段性的易 于计算的子步骤。四、1951矩阵计算的分解方法1951: Alston Householder of Oak Ridge National Laboratory formalizes the decompositional approach to matrix computations.1951年,阿尔斯通橡树岭国家实验室的Alston
7、Householder提出,矩阵计算的分解方法。这个算法 证明了任何矩阵都可以分解为三角、对角、正交和其他特殊形式的矩阵,该算法的意义使得开发灵活 的矩阵计算软件包成为可能。五、1957优化的Fortran编译器1957: John Backus leads a team at IBM in developing the Fortran optimizing compiler.1957年:约翰巴库斯领导开发的IBM的团队,创造了 Fortran优化编译器。Fortran,亦译为福传, 是由Formula Translation两个字所组合而成,意思是“公式翻译”。它是世界上第一个被正式采用 并
8、流传至今的高级编程语言。这个语言现在,已经发展到了,Fortran 2008,并为人们所熟知。六、1959-61计算矩阵特征值的QR算法 1959 - 61: J.G.F. Francis of Ferranti Ltd, London, finds a stable method for computing eigenvalues, known as the QR algorithm. 1959-61:伦敦费伦蒂有限公司的J.G.F. Francis,找到了一种稳定的特征值的计算方法,这就是著 名的QR算法。这也是一个和线性代数有关的算法,学过线性代数的应该记得“矩阵的特征值”,计 算特征值
9、是矩阵计算的最核心内容之一,传统的求解方案涉及到高次方程求根,当问题规模大的时候 十分困难。QR算法把矩阵分解成一个正交矩阵(希望读此文的你,知道什么是正交矩阵。:D。)与一 个上三角矩阵的积,和前面提到的Krylov方法类似,这又是一个迭代算法,它把复杂的高次方程求 根问题化简为阶段性的易于计算的子步骤,使得用计算机求解大规模矩阵特征值成为可能。这个算法 的作者是来自英国伦敦的J.G.F. Francis。七、1962快速排序算法1962: Tony Hoare of Elliott Brothers, Ltd., London, presents Quicksort.1962年:伦敦的,托
10、尼埃利奥特兄弟有限公司,霍尔提出了快速排序。哈哈,恭喜你,终于看到了 可能是你第一个比较熟悉的算法。快速排序算法作为排序算法中的经典算法,它被应用的影子随处 可见。快速排序算法最早由Tony Hoare爵士设计,它的基本思想是将待排序列分为两半,左边的一 半总是“小的”,右边的一半总是“大的”,这一过程不断递归持续下去,直到整个序列有序。说起 这位Tony Hoare爵士,快速排序算法其实只是他不经意间的小小发现而已,他对于计算机贡献主要 包括形式化方法理论,以及ALGOL60编程语言的发明等,他也因这些成就获得1980年图灵奖。关于快速排序算法的具体认识与应用,可参考我写的一篇文章,精通八大
11、排序算法系列、一、快速排序算法:http:/ James Cooley of the IBM T.J. Watson Research Center and John Tukey of Princeton University and AT&T Bell Laboratories unveil the fast Fourier transform.1965年:IBM华生研究院的James Cooley,和普林斯顿大学的John Tukey,AT&T贝尔实验室共同 推出了快速傅立叶变换。快速傅立叶算法是离散傅立叶算法(这可是数字信号处理的基石)的一种快 速算法,其时间复杂度仅为O(Nlog(N)
12、;比时间效率更为重要的是,快速傅立叶算法非常容易用硬 件实现,因此它在电子技术领域得到极其广泛的应用。日后,我会在我的经典算法研究系列,着重阐 述此算法。九、1977整数关系探测算法1977: Helaman Ferguson and Rodney Forcade of Brigham Young University advance an integerrelation detection algorithm.1977年:Helaman Ferguson和 伯明翰大学的Rodney Forcade,提出了 Forcade检测算法的整数关 系。整数关系探测是个古老的问题,其历史甚至可以追溯到欧
13、几里德的时代。具体的说:给定一组实 数X1,X2,.,Xn,是否存在不全为零的整数a1,a2,.an,使得:a1 x 1 +a2 x2 + . . . + an x在 0?这一年BrighamYoung大学的Helaman Ferguson和Rodney Forcade解决了这一问题。该算法应用于 “简化量子场论中的Feynman图的计算”。ok,它并不要你懂,了解即可。十、1987快速多极算法1987: Leslie Greengard and Vladimir Rokhlin of Yale University invent the fast multipolealgorithm.198
14、7年:莱斯利的Greengard,和耶鲁大学的Rokhlin发明了快速多极算法。此快速多极算法用来计算“经由引力或静电力相互作用的N个粒子运动的精确计算一一例如银河系 中的星体,或者蛋白质中的原子间的相互作用”。ok,了解即可。赞转载分享评论复制地址举报更多上一篇 |下一篇:程序员应该具备的.个人日记|原创:司银龙|标签:阿尔斯通埃利奥特research普林斯顿蒙特卡 洛签名档img http:/www.51.com/show_ photo.php?user=my72
15、1521&id=67 21042/img主人的热评日志 cpu占用率高的九种可能2012-04-25 10:052011中美金融战一学着独立思考问题2012-03-07 11:20. 一个10年程序员职业发展、总结和困境2011-06-08 18:11.评论还没有人发表评论来坐第一个沙发发表评论系统正在进行升级维护中,暂不支持日志评论,敬请谅解!表情1更多功能点击这里发表评论,如果您要显.同时分享这篇文章 使用签名档|道具 请选择道具发表取消(可按Ctrl+Enter发表)分享. 分享到空间.转播到微博更多.编辑.删除.字体:大中小.权限设置.修改分类.推荐日志.设置置顶. 转为私密日志.举报. 申述 日志地址: 请用Ctrl+C复制后贴给好友。