20世纪十大算法,除了“快排”你还会啥?

20世纪十大算法,除了“快排”你还会啥?文章整理出在20世纪对科学和工程领域的发展产生最大影响力的十大算法。所以只好用编年顺序,依次列出了这十项算法领域人类智慧的巅峰之作——给出了一份

“编者按:

IEEE计算机社团和美国物理学会的联合刊物《科学与工程中的计算》发表了一篇《Top Ten Algorithms of the Century》。

文章整理出在20世纪对科学和工程领域的发展产生最大影响力的十大算法。当然,任何选择都是充满争议的,因为实在是没有最好的算法。

所以只好用编年顺序,依次列出了这十项算法领域人类智慧的巅峰之作——给出了一份没有排名的算法排行榜。

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 Neumann,Stan Ulam 和 Nick Metropolis共同发明,被称为蒙特卡洛方法。

蒙特卡洛方法的应用场景很多,横跨物理、金融、计算机。拿计算机科学来举例,自然语言处理中的LDA模型,hinton较早提出的深度学习模型DBN都用到了蒙特卡洛方法。

它的具体定义是:

在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(Monte Carlo)方法告诉我们,均匀的向该正方形内撒N(N 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的值便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。

蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看这两个实数是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:4,PI为圆周率),当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,其结果越接近于圆周率。

20世纪十大算法,除了“快排”你还会啥?

最后八卦一下,Monte Carlo这个名字是摩纳哥的一座以博彩业闻名的城市~

1947

单纯形法

[1947: George Dantzig, at the RAND Corporation, creates the simplex method for linear programming.]

1947年,兰德公司的,Grorge Dantzig,发明了单纯形方法。

单纯形法是一种非常实用的寻找最优基本可行解的方法。它的基本思想是:先找到一个基本可行解,然后判断其是否为最优解;如果不是,则转换到相邻且能改善当前目标函数的基本可行解,一直找到最优解为止。

在现实中能看到很多应用例子——比如对于一个公司而言,其能够投入生产的人力物力有限(“线性约束条件”),而公司的目标是利润最大化(“目标函数取最大值”),看,线性规划并不抽象吧!

线性规划作为运筹学(operation research)的一部分,成为管理科学领域的一种重要工具。

而Dantzig提出的单纯形法便是求解类似线性规划问题的一个极其有效的方法。

20世纪十大算法,除了“快排”你还会啥?

1950

Krylov子空间迭代法

[1950: Magnus Hestenes, Eduard Stiefel, 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子空间迭代法是用来求解大型方程组,在提高大型科学和工程计算效率上起着重要作用。当n充分大时,直接计算变得非常困难,而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 Householder提出,矩阵计算的分解方法。

这个算法证明了任何矩阵都可以分解为三角、对角、正交和其他特殊形式的矩阵,该算法的意义使得开发灵活的矩阵计算软件包成为可能。

1957

优化的Fortran编译器

[1957: John Backus leads a team at IBM in developing the Fortran optimizing compiler.]

1957年:约翰巴库斯领导开发的IBM的团队,创造了Fortran优化编译器。

Fortran,亦译为福传,是由Formula Translation两个字所组合而成,意思是“公式翻译”。它是世界上第一个被正式采用并流传至今的高级编程语言。这个语言现在,已经发展到了,Fortran 2008,并为人们所熟知。

1959-61

计算矩阵特征值的QR算法

[1959–61: J.G.F. Francis of Ferranti Ltd, London, finds a stable method for computingeigenvalues, known as the QR algorithm.]

1959-61:伦敦费伦蒂有限公司的J.G.F. Francis,找到了一种稳定的特征值的计算方法,这就是著名的QR算法。

这也是一个和线性代数有关的算法,学过线性代数的应该记得“矩阵的特征值”,计算特征值是矩阵计算的最核心内容之一,传统的求解方案涉及到高次方程求根,当问题规模大的时候十分困难。QR算法把矩阵分解成一个正交矩阵与一个上三角矩阵的积,是一个迭代算法,它把复杂的高次方程求根问题化简为阶段性的易于计算的子步骤,使得用计算机求解大规模矩阵特征值成为可能。

1962

快速排序算法

[1962: Tony Hoare of Elliott Brothers, Ltd., London, presents Quicksort.]

1962年:托尼埃利奥特兄弟有限公司,伦敦,霍尔提出了快速排序。

恭喜你,终于看到了可能是你第一个比较熟悉的算法了……

快速排序算法作为排序算法中的经典算法,它被应用的影子随处可见。

快速排序算法最早由Tony Hoare爵士设计,它的基本思想是将待排序列分为两半,左边的一半总是“小的”,右边的一半总是“大的”,这一过程不断递归持续下去,直到整个序列有序。说起这位Tony Hoare爵士,快速排序算法其实只是他不经意间的小小发现而已,他对于计算机贡献主要包括形式化方法理论,以及ALGOL60 编程语言的发明等,他也因这些成就获得1980 年图灵奖。

20世纪十大算法,除了“快排”你还会啥?

1965

快速傅立叶变换

[1965: James Cooley of the IBM T.J. Watson Research Center and John Tukey of PrincetonUniversity and AT&T Bell Laboratories unveil the fast Fourier transform.]

1965年:IBM 华生研究院的James Cooley,和普林斯顿大学的John Tukey,AT&T贝尔实验室共同推出了快速傅立叶变换。

快速傅立叶算法是离散傅立叶算法(这可是数字信号处理的基石)的一种快速算法,其时间复杂度仅为O(Nlog(N));比时间效率更为重要的是,快速傅立叶算法非常容易用硬件实现,因此它在电子技术领域得到极其广泛的应用。

20世纪十大算法,除了“快排”你还会啥?

1977

整数关系探测算法

[1977: Helaman Ferguson and Rodney Forcade of Brigham Young University advance an integerrelation detection algorithm.]

1977年:Helaman Ferguson和 伯明翰大学的Rodney Forcade,提出了Forcade检测算法的整数关系。

整数关系探测是个古老的问题,其历史甚至可以追溯到欧几里德的时代。具体的说:给定—组实数X1,X2,…,Xn,是否存在不全为零的整数a1,a2,…an,使得:a1 x 1 +a2 x2 + . . . + an xn =0?这一年BrighamYoung大学的Helaman Ferguson 和Rodney Forcade解决了这一问题。该算法应用于“简化量子场论中的Feynman图的计算”。

1987

快速多极算法

[1987: Leslie Greengard and Vladimir Rokhlin of Yale University invent the fast multipole algorithm.]

1987年:莱斯利的Greengard,和耶鲁大学的Rokhlin发明了快速多极算法。

这种算法克服了多粒子模拟中最大的瓶颈之一:精确计算N个粒子之间通过万有引力或静电力的相互作用(比如星系中的星体,或蛋白质中的原子)需要O(N²)的量级。快速多极算法达到了O(N)的量级。这种算法通过多极展开(空间的粒子或质量、偶极子,四重极子等等)来近似远处的粒子组对近端的局部粒子组的作用。一个递归分解的空间用来描述随距离增大的更大的组。

快速多极算法显著的优点之一是它可以任意调整精度,这个特点是很多其他方法缺少的。

—END—

看完今天的十大算法,

小伙伴们都用过哪些呢?

还有哪些经典算法

你觉得应该列入其中呢?

欢迎评论区一起聊聊~

20世纪十大算法,除了“快排”你还会啥?

今天的文章20世纪十大算法,除了“快排”你还会啥?分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8056.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注