一、1946蒙特卡洛方法

1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis 共同发明,被称为蒙特卡洛方法。

它的具体定义是:
在广场上画一个边长1米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?
蒙特卡洛方法告诉我们,均匀的向该正方形内撒N(N是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的值越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。(撒黄豆只是一个比喻)
蒙特卡洛方法可以近似计算圆周率:
让计算机每次随机生成两个-1~1之间的数,看这两个实数是否在单位圆内。生成一系列随机点,统计单位圆内的点数与总点数,内接圆面积和正方形面积之比为PI:4,PI为圆周率。

当随机点取得越多(但即使取10的9次方个随机点时,其结果也仅在前4位与圆周率吻合)时,
其结果越接近于圆周率。
一句话:用随机数的方法求概率,以此求面积

1947单纯形法

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

这么说似乎也太太太抽象了,但在现实中能派上用场的例子可不罕见——比如对于一个公司而言,其能够投入生产的人力物力有限(“线性约束条件”),而公司的目标是利润最大化(“目标函数取最大值”),看,线性规划并不抽象吧!
线性规划作为运筹学(operation research)的一部分,成为管理科学领域的一种重要工具。
而Dantzig提出的单纯形法便是求解类似线性规划问题的一个极其有效的方法。
一句话:一种求解线性规划的方法,过去求解线性规划使用画图法求,这种方法可用于计算机

三、1950 Krylov子空间迭代法

1950年:美国国家标准局数值分析研究所的,马格努斯Hestenes,爱德华施蒂费尔和
科尼利厄斯的Lanczos,发明了Krylov子空间迭代法。
Krylov子空间迭代法是用来求解形如Ax=b 的方程,A是一个n*n 的矩阵,当n充分大时,直接计算变得非常困难,而Krylov方法则巧妙地将其变为Kxi+1=Kxi+b-Axi的迭代形式来求解。

这里的K(来源于作者俄国人Nikolai Krylov姓氏的首字母)是一个构造出来的接近于A的矩阵,
而迭代形式的算法的妙处在于,它将复杂问题化简为阶段性的易于计算的子步骤。
一句话:多维的方程求解方法

四、1957 优化的Fortran编译器

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

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

五、1959-61 计算矩阵特征值的QR算法1959-61:伦敦费伦蒂有限公司的J.G.F. Francis,找到了一种稳定的特征值的计算方法,

这就是著名的QR算法。

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

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

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

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

计算的子步骤,使得用计算机求解大规模矩阵特征值成为可能。
这个算法的作者是来自英国伦敦的J.G.F. Francis。
一句话:迭代算法,它把复杂的高次方程求根问题化简为阶段性的易于计算的子步骤,使得计算机求解大规模特征值成为可能。

七、1962 快速排序算法

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

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

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

快速排序的平均时间复杂度仅仅为O(Nlog(N)),相比于普通选择排序和冒泡排序等而言,
实在是历史性的创举。
一句话:将序列分成两半,左边一半总是"小的",右边的一半总是"大的",这一过程不断递归持续下去,直到整个序列有序

八、1965 快速傅立叶变换

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

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

日后,我会在我的经典算法研究系列,着重阐述此算法。
一句话:大学学过,傅里叶变化,现在忘记了,得好好补补

1977 整数关系探测算法

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,它并不要你懂,了解即可。?。

十、1987快速多极算法

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

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

20实际最牛逼的10大算法相关推荐

  1. 数学狂想曲(三)——统计杂谈, PID算法, 20世纪10大算法, 矩阵向量的积

    http://antkillerfarm.github.io/ 统计杂谈 统计模拟 统计模拟是数理统计中非常有用的工具之一, 它是利用计算机产生某概率模型的随机数,再通过这些随机数来模拟真实模型. 这 ...

  2. 20 世纪 10 大算法

    1. 蒙特卡洛采样算法 2. 矩阵运算相关 Krylov子空间迭代法 求解如下形式的线性方程组 Ax=bAx=b,当方阵 An×nA_{n\times n} nn 足够大时,算术解 x=A∖bx=A\ ...

  3. 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?

    来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...

  4. 编程面试的10大算法概念汇总

    编程面试的10大算法概念汇总 嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BA ...

  5. 数据挖掘10大算法(1)——PageRank

    1. 前言 这系列的文章主要讲述2006年评出的数据挖掘10大算法(见图1).文章的重点将偏向于算法的来源以及算法的主要思想,不涉及具体的实现.如果发现文中有错,希望各位指出来,一起讨论. 图1 来自 ...

  6. 细数二十世纪最伟大的10大算法

    导读:作者July总结了一篇关于计算方法的文章< 细数二十世纪最伟大的10大算法 >. 一.1946 蒙特卡洛方法 [1946: John von Neumann, Stan Ulam, ...

  7. 干货丨机器学习新手一定要掌握的10大算法

    文章来源:机器之心 本文介绍了机器学习新手需要了解的 10 大算法,包括线性回归.Logistic 回归.朴素贝叶斯.K 近邻算法等. 在机器学习中,有一种叫做「没有免费的午餐」的定理.简而言之,它指 ...

  8. 编程面试过程中最常见的10大算法

    编程面试过程中最常见的10大算法 编程语言:C/C++ 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法. toCharArray() // 获得字符串对应的char数组 A ...

  9. 代码面试最常用的10大算法

    摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序.二叉树遍历等等. 在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在 ...

最新文章

  1. 服务器端PHP多进程编程
  2. 【数据竞赛】Kaggle时序建模案例:预测水资源可用性
  3. QT的QCategoryAxis类的使用
  4. jsch 移动服务器上文件,jsch上传文件到服务器
  5. java 封闭实例_不能访问类型…的封闭实例
  6. adb shell 命令之----pm
  7. 呼吁成立中国FreeType联盟
  8. selenium自动化看网课
  9. android静态动画,Android Lottie动画实战踩坑
  10. 数组类型的修改和去重
  11. 提取文件名+复制+改名+批量创建文件程序(Excel VBA版)
  12. iptables禁止访问某个域名
  13. 就是计算机信息学竞赛,什么是信息学竞赛NOI?参加信息学竞赛有什么用?
  14. SpringBoot集成kfaka
  15. 创客匠人年度共创峰会圆满落幕
  16. 火狐(firefox)调试移动端页面
  17. 微信公众号关于百度地图和腾讯地图本地定位api的调用(js)
  18. 2022新一代设备维修管理系统助力企业降本增效
  19. 50个最精彩的 Photoshop 实例教程【绘图篇】
  20. 家用简单电线路图_如何看懂家用最简单的电路图?

热门文章

  1. 25岁阿里120W年薪架构师推荐学习的750页微服务架构深度解析文档
  2. Python应用实战案例:Python编程环境配置(Anaconda、Jupyter、GPU环境)
  3. 输出问候语(PTA厦大慕课)
  4. Lumberjack库在GCDAsyncSocket上的打印输出
  5. 全世界正在被软件占领
  6. 浙江杭州烟花爆炸事故中受伤最重者属二级烧伤-杭州-烟花爆炸-烧伤
  7. 战地2服务器2地图修改,战地2地图修改
  8. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之四Git搭建下载实例!
  9. 实现从淘宝定时抓取订单数据、打印电子面单并保存到ERP表中!
  10. ArchSummit讲师专访:EMC研究院资深研究员陶隽谈实时数据分析