`
wx861019
  • 浏览: 500 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

细数二十世纪最伟大的10大算法(转)

阅读更多
一、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
共同发明,被称为蒙特卡洛方法。

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

蒙特卡洛方法可用于近似计算圆周率:让计算机每次随机生成两个0到1之间的数,看这两个实数是否在单位

圆内。生成一系列随机点,统计单位圆内的点数与总点数,(圆面积和正方形面积之比为PI:1,PI为圆周率

),
当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,
其结果越接近于圆周率。


二、1947 单纯形法
[1947: George Dantzig, at the RAND Corporation, creates the simplex method for linear programming.]

1947年,兰德公司的,Grorge Dantzig,发明了单纯形方法。
单纯形法,此后成为了线性规划学科的重要基石。
所谓线性规划,简单的说,就是给定一组线性(所有变量都是一次幂)约束条件
(例如a1*x1+b1*x2+c1*x3>0),求一个给定的目标函数的极值。

这么说似乎也太太太抽象了,但在现实中能派上用场的例子可不罕见——比如对于一个公司而言,其能够投

入生产的人力物力有限(“线性约束条件”),而公司的目标是利润最大化(“目标函数取最大值”),看

,线性规划并不抽象吧!

线性规划作为运筹学(operation research)的一部分,成为管理科学领域的一种重要工具。
而Dantzig提出的单纯形法便是求解类似线性规划问题的一个极其有效的方法。


三、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子空间迭代法是用来求解形如Ax=b 的方程,A是一个n*n 的矩阵,当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 computing

eigenvalues, known as the QR algorithm.]

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

这也是一个和线性代数有关的算法,学过线性代数的应该记得“矩阵的特征值”,计算特征值是矩阵计算的

最核心内容之一,传统的求解方案涉及到高次方程求根,当问题规模大的时候十分困难。

QR算法把矩阵分解成一个正交矩阵(希望读此文的你,知道什么是正交矩阵。:D。)与一个上三角矩阵的积,

和前面提到的Krylov 方法类似,这又是一个迭代算法,它把复杂的高次方程求根问题化简为阶段性的易于

计算的子步骤,使得用计算机求解大规模矩阵特征值成为可能。
这个算法的作者是来自英国伦敦的J.G.F. Francis。


七、1962 快速排序算法
[1962: Tony Hoare of Elliott Brothers, Ltd., London, presents Quicksort.]
1962年:伦敦的,托尼埃利奥特兄弟有限公司,霍尔提出了快速排序。

哈哈,恭喜你,终于看到了可能是你第一个比较熟悉的算法~。
快速排序算法作为排序算法中的经典算法,它被应用的影子随处可见。

快速排序算法最早由Tony Hoare爵士设计,它的基本思想是将待排序列分为两半,
左边的一半总是“小的”,右边的一半总是“大的”,这一过程不断递归持续下去,直到整个序列有序。
说起这位Tony Hoare爵士,快速排序算法其实只是他不经意间的小小发现而已,他对于计算机贡献主要包括

形式化方法理论,以及ALGOL60 编程语言的发明等,他也因这些成就获得1980 年图灵奖。

关于快速排序算法的具体认识与应用,请参考我写的一篇文章,
精通八大排序算法系列、一、快速排序算法:

http://blog.csdn.net/v_JULY_v/archive/2011/01/04/6116297.aspx

快速排序的平均时间复杂度仅仅为O(Nlog(N)),相比于普通选择排序和冒泡排序等而言,
实在是历史性的创举。


八、1965 快速傅立叶变换
[1965: 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));比时间效率更为重要的是,快速傅立叶算法非常容易用硬件实现,因此它在电子技术领域得到

极其广泛的应用。

日后,我会在我的经典算法研究系列,着重阐述此算法。


九、1977 整数关系探测算法
[1977: Helaman Ferguson and Rodney Forcade of Brigham Young University advance an integer

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

整数关系探测是个古老的问题,其历史甚至可以追溯到欧几里德的时代。具体的说:
给定—组实数X1,X2,...,Xn,是否存在不全为零的整数a1,a2,...an,使得:a1 x 1 +a2 x2 + . . . + an x

n =0?
这一年BrighamYoung大学的Helaman Ferguson 和Rodney Forcade解决了这一问题。
该算法应用于“简化量子场论中的Feynman图的计算”。ok,它并不要你懂,了解即可。:D。


十、1987 快速多极算法
[1987: Leslie Greengard and Vladimir Rokhlin of Yale University invent the fast multipole

algorithm.]

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

此快速多极算法用来计算“经由引力或静电力相互作用的N 个粒子运动的精确计算
——例如银河系中的星体,或者蛋白质中的原子间的相互作用”。ok,了解即可。
完。
有任何意见和问题,欢迎评论。

--------------------------------------



作者声明:
本人July对本博客所有文章和资料享有版权,转载或引用任何文章、资料请注明出处。
谢谢。July、二零一一年一月十日。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/v_JULY_v/archive/2011/01/10/6127953.aspx
分享到:
评论

相关推荐

    20世纪10个最伟大的算法

    ### 20世纪10个最伟大的算法 在20世纪,随着计算机科学与工程的发展,许多里程碑式的算法被提出并极大地推动了信息技术的进步。以下是从Computer in Science & Engineering 和 IEEE Computer Society联合评选出的20...

    遗传算法解题代码、二进制十进制相互转换代码

    二进制转十进制通常采用按权展开法,而十进制转二进制则可以使用短除法或位移法。 在压缩包中的"遗传算法解题"文件可能包含了实现上述概念的具体代码示例,这可以帮助学习者理解如何将理论应用于实践。通过分析和...

    组合最优化算法和复杂性

    第九至第十二章深入讨论了流、匹配和支撑树问题的现代快速算法,这些算法通常具有拟阵的一般形式,增强了算法的普适性和灵活性。接着,第十三和十四章转向整数规划,特别是Gorory的割平面算法,将整数规划与图论有效...

    数据挖掘18大算法实现以及其他相关经典DM算法

    PageRank算法最早产生于Google,核心思想是通过网页的入链数作为一个网页好快的判定标准,如果1个网页内部包含了多个指向外部的链接,则PR值将会被均分,PageRank算法也会遭到LinkSpan攻击。详细介绍链接 HITS HITS...

    算法系列之二十:计算中国农历

    算法系列之二十:计算中国农历

    手写数字识别的几种算法 c 源码

    MNIST是最常用的数据集,包含60,000个训练样本和10,000个测试样本。C语言项目中,数据集通常需要先进行预处理,如存储为二进制文件,便于读取。 8. **训练与优化**: 训练模型通常涉及反向传播和梯度下降等算法,...

    MATLAB 最优化算法合集

    N法、修正G-N法、L-M法、线性规划、单纯形法、修正单纯形法、大M法、变量有界单纯形法、整数规划、割平面法、分支定界法、0-1规划、二次规划、拉格朗曰法、起作用集算法、路径跟踪法、粒子群优化算法、基本粒子群...

    最优化理论与算法习题解答.pdf

    最优化理论与算法习题解答

    AHD算法的matlab实现(Bayer转RGB算法)

    在图像处理领域,色彩传感器,如Bayer滤镜,被广泛用于数字相机中,它以单色像素阵列捕获图像,然后通过特定算法恢复出全彩图像。本主题主要聚焦于一种名为"AHD"(Adaptive Homogeneity-Directed,自适应均值导向)...

    主存分配 最佳适应算法 最坏适应算法 循环首次适应算法 首次适应算法

    操作系统中利用最佳适应算法 最坏适应算法 循环首次适应算法 首次适应算法实现动态内存的分配和回收内存

    扩频通信数字基带信号处理算法及其VLSI实现 PDF

    8. 5 数字非相干双△△DLL跟踪算法及VLSI结构 8. 5. 1 非相干双△DLL跟踪算法描述 8. 5. 2 环路参数设计及部分单元部件的VLSI结构 8. 5. 3 数字式非相干双△DLL的VLSI结构 8. 6 窄相关DLL原理及性能 8. 6. 1 窄相关...

    粒子群算法、遗传算法以及两者的结合的优化算法

    粒子群算法(Particle Swarm Optimization, PSO)与遗传算法(Genetic Algorithm, GA)是两种在优化问题中广泛应用的全局搜索方法。它们都是基于自然选择和群体智能的启发式算法,能够有效地解决复杂多模态优化问题...

    模型算法大全(20+种常用算法模型+代码实现)

    模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...

    小车巡线控制算法 最经典的PID控制算法

    PID(Proportional-Integral-Derivative)控制算法是工业自动化领域中最常见、最基本的控制算法,其在小车巡线控制中也有广泛应用。PID控制器通过比例、积分和微分三个部分来调整输出,以使得系统能够准确、快速地...

    组合数学及其算法

    第十一章 组合优化算法与计算的时间复杂度理论 11.1 dijkstra算法 11.2 floyd算法 11.3 kruskal算法 11.4 求最优树的破圈法和统观法 11.5 二分图中最大匹配与最佳匹配的算法 11.6 fleury算法 11.7 ...

    清华大学-最优化理论与算法-ppt.rar

    最优化理论与算法是计算机科学、数学和工程领域中的核心学科,它研究如何在众多可能解中找到最优解,以解决复杂问题。本课程由清华大学的陈宝林教授讲授,旨在深入理解并掌握最优化的基本概念、方法和应用。 在最...

    算法 第4版.pdf

    2. 算法分类:包括排序算法(如冒泡排序、快速排序、归并排序)、搜索算法(如二分查找、广度优先搜索、深度优先搜索)等,以及动态规划、贪心算法、回溯法等通用算法思想。 3. 时间复杂度与空间复杂度:这是衡量...

    matlab遗传算法实例

    1. 二进制编码:MATLAB中的遗传算法实例将问题变量用二进制数表示,例如将一个变量x的值离散化为[0,10]区间内的二进制数。由于1023(即2^10 - 1)在二进制中可以表示为10位,因此一个10位的二进制数可以将[0,10]这个...

Global site tag (gtag.js) - Google Analytics