领关注、星标嵌入式客栈,干货及时送达

[导读] 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。周末了,今天来轻松概念性总结分享一下改变世界5大算法,当然足以改变世界的算法远不止这5个。比如还有卡尔曼滤波算法啦等等,等以后有机会整理。

Metropolis算法

在统计和统计物理学中,Metropolis-Hastings算法是一种马尔可夫链蒙特卡洛(MCMC)方法,用于从难以直接采样的概率分布中获取随机样本序列。该序列可用于近似分布(例如,生成直方图)或计算积分(例如,期望值)。Metropolis-Hastings和其他MCMC算法通常用于多维分布的采样,尤其是在维数较多时。对于一维分布,通常还有其他方法(例如自适应拒绝采样)可以直接从分布中返回独立样本,并且这些方法不会出现MCMC方法固有的自相关样本问题。

Metropolis算法是一种根据Boltzmann分布生成系统状态的Markov-Chain-Monte-Carlo方法。从该算法中衍生出的更通用的Metropolis-Hastings算法可以模拟随机变量序列,更精确地模拟了期望分布为平稳分布的马尔科夫链,特别是在许多随机变量的分布无法直接模拟的情况下。

该算法以Nicholas Metropolis的名字命名,后者与Arianna W. Rosenbluth,Marshall Rosenbluth,Augusta H. Teller和Edward Teller共同撰写了1953年的文章《Equation of State Calculations by Fast Computing Machines》。

为啥这个算法牛?Metropolis算法是蒙特卡洛方法中最著名的算法,它的应用领域包括统计物理、QCD、天体物理、物理化学、数学、计算生物、人工智能等等,甚至是社会科学。

使用Metropolis-Hastings算法在Rosenbrock函数上运行的3D马尔可夫链的结果。该算法从后验概率高的区域采样,链开始在这些区域混合。

单纯形法

在数学优化中,Dantzig的单纯形算法(或单纯形方法)是用于线性规划的一种流行算法。该算法的名称源自单纯形的概念,由T. S. Motzkin提出。单纯形法(也称为单纯形算法)是用于解决线性优化问题的数值优化方法,也称为线性程序(LP)。它仅需经过有限的多个步骤即可解决此问题,或者确定其不溶性或无限性。单纯形法的基本思想是1947年由George Dantzig提出的。从那以后,通过大量改进,它们已发展成为实际中最重要的线性优化解决方案。单纯形法是枢轴法

一个线性不等式系统将一个多面体定义为一个可行域。单纯形算法从一个起始点开始,沿着多面体的边缘移动,直到到达最优解的顶点。

3D中的单纯形算法多面体:

如今线性规划的理论与算法均非常成熟,在实际问题和生产生活中的应用非常广泛;线性规划问题的诞生标志着一个新的应用数学分支———数学规划时代的到来。过去的 60 年中,数学规划已经成为一门成熟的学科。其理论与方法被应用到经济、 金融、 军事、机器学习等各个领域。数学规划领域内,其他重要分支的很多问题是在线性规划理论与算法的基础上建立起来的, 同时也是利用线性规划的理论来解决和处理的。由此可见, 线性规划问题在整个数学规划和应用数学领域中占有重要地位。因此, 研究单纯形法的产生与发展对于认识整个数学规划的发展有重大意义

快速傅立叶算法

啥是傅立叶变换?表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。最初傅立叶分析是作为热过程的解析分析的工具被提出的。通过下面几步看一下近似方波近似叠加过程:

  1. 如果一个点以恒定的速度绕圆周运动,那么它离地面的高度就是一个正弦函数。点移动的速度对应于频率,圆的半径对应于振幅。

  2. 再增加一个速率圆周运

  3. 再增加几个看看:

是不是已经很接近方波了?

而快速傅立叶变换(FFT)是用于高效计算离散傅立叶变换(DFT)的算法。它可以用于将数字信号分解为频率分量,然后可以对其进行分析。类似地,存在离散傅里叶逆快速傅里叶逆变换(IFFT)。IFFT使用相同的算法,但具有共轭系数。

下图展示一个时域信号做FFT后的谱线图:

快速傅里叶变换是1965年由J.W.库利和T.W.图基提出的。采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

James Cooley

John Tukey

计算量小的显著的优点,使得FFT在信号处理技术领域获得了广泛应用,结合高速硬件就能实现对信号的实时处理。例如,对语音信号的分析和合成,对通信系统中实现全数字化的时分制与频分制(TDM/FDM)的复用转换,在频域对信号滤波以及相关分析,通过对雷达、声纳、振动信号的频谱分析以提高对目标的搜索和跟踪的分辨率等等,都要用到FFT。可以说FFT的出现,对数字信号处理学科的发展起了重要的作用。

快速排序算法

大家熟知的快速排序是一种快速的、递归的、非稳定的排序算法,它的工作原理是部分和优势。它是在1960年左右由C.安东尼R.霍尔(C. Antony R. Hoare)开发出来的基本形式,后来经过许多研究人员的改进。该算法的优点是有一个非常短的内部循环(这大大提高了执行速度)。它不需要额外的内存(除了递归调用堆栈上需要的额外空间之外)。

这算法应用在计算机科学中大量应用自不必多说。当然也是本文几个算法相对容易理解的算法。这算法对现代软件编程影响深远,大浪淘沙,流传久远!

计算特征值的QR算法

QR算法是一种计算所有特征值和二次矩阵特征向量的数值方法。QR法或QR迭代法是在QR分解的基础上,由John G. F. Francis和Wera Nikolajewna Kublanowskaja在1961-1962年独立提出的。其前身是Heinz Rutishauser(1958)提出的LR算法,该算法稳定性较差,基于LR分解。QR算法的迭代往往收敛于矩阵的Schur形式。最初的过程相当复杂,因此,即使在今天的计算机上,对于具有数十万行和列的矩阵也是不可行的。

派生的变体,如Z. Bai和James Demmel 1989的多移位方法和K. Braman、R. Byers和R. Mathias 2002的在数值上更稳定的变体,具有实际运行时,其大小为矩阵的立方。后一种方法在数值软件库LAPACK中实现,而后者在许多计算机代数系统(CAS)中用于数值矩阵算法

系统辨识是现代控制理论的重要组成部分。对系统的结构和参数进行辨识在工程上和理论上都占有重要的地位。最小二乘法是系统参数辨识中的重要估计方法,并在众多领域和场合得到了广泛的应用。

QR分解算法在现在火热的人工智能领域更是基础算法之一,有此有其是改变世界的算法并不夸张。

END

往期精彩推荐,点击即可阅读

▲学Linux驱动:应先了解总线驱动模型

学习AI之机器学习概念篇

手把手教系列之IIR数字滤波器设计实现

聊聊改变世界的5大算法相关推荐

  1. 改变世界的9大算法--PageRank

    "PageRank"一语双关:既是网页排名的算法,也是该方法的主要发明者 拉里 ▪ 佩奇. 首先来了解一下"超链接把戏".超链接,在1945年就已经出现了,是搜 ...

  2. 扒一扒改变世界的十大算法

    Reddit有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大.这个表单并不完整,很多与我们密切相关的算法都没有提到,如机器学习和矩阵乘法,欢迎你继续补充. 如果对算法有所了 ...

  3. 改变世界的9大算法--搜索引擎索引

    搜索有两个主要阶段:匹配和排名.搜索引擎将二者组合成一个流程以实现一致性.但是这两个在概念上是独立的,我们假设在排名之前已经完成了匹配. 并且一个搜索引擎的生死由其排名的质量决定. 还是老规则,问题三 ...

  4. 阿里妈妈邀你聊聊营销与大数据

    中国云计算产业最具影响力的盛会之一--2016杭州云栖大会(https://yunqi.aliyun.com/)将在云栖小镇召开.连续举办七届的云栖大会一直是业界了解阿里云计算生态发展和应用趋势.体验 ...

  5. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)

    十大算法 1.冒泡排序 ​ (1)算法描述 ​ 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  6. java培训:Java的十大算法

    想要学好java语言,就要打好基础,java要学习的东西有很多,今天小编就来和大家说下java的十大算法. 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个 ...

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

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

  8. 统治世界的 10 大算法,你知道几个?

    原文 | The real 10 algorithms that dominate our world 作者 | George Dvorsky    编辑 | 深度学习这件小事 一篇有趣的文章< ...

  9. 编程界称霸全球的10大算法,你到底了解几个呢?

    来源:课程图谱博客 本文约2300字,建议阅读9分钟 本文带你了解编程界称霸全球的十大算法. 算法究竟是什么? 简而言之,算法代表经过明确定义的计算过程,用于将输入转化为输出. 可以这样理解,算法是用 ...

最新文章

  1. 游戏代码大全_Switch新游推荐之世界游戏大全51,茶余饭后的消遣
  2. 【网络协议】专题总结以及网络协议高频面试题汇总(8篇)
  3. UVA 10706 Number Sequence
  4. P4357-[CQOI2016]K远点对【K-Dtree】
  5. python 离散数据时间序列图_每个人都学的会的数据分析
  6. PHPnow中ZendDebugger与ZendOptimizer 共存
  7. 标准C++ 与 VC++ 区别集锦(待续)
  8. 中科院-杨力祥视频教程 07课程
  9. 情感分类介绍及发展方向
  10. php 前台模板,前台模板
  11. 眼睛干涩胀痛:得了干眼症该怎么办?
  12. 上行下行带宽什么意思?代表了什么看完你就能懂
  13. CTF-web-秋名山老司机
  14. python爬wos数据库,用Python爬行WoS
  15. 浅谈提高团队成员的工作积极性
  16. SAP JCo 3.0 下载
  17. 区间dp(含模板及例题)
  18. POJ 1061 青蛙的约会(扩展欧几里德)
  19. 知名的兴趣社群平台小打卡是如何获得5000万用户的?【黑盒研究内参第11期】...
  20. 便捷解压,轻松处理压缩文件

热门文章

  1. 什么是Flex弹性布局
  2. Bee框架,一个十分钟即可学会的ORM框架--Bee
  3. springBoot项目配置文件加载优先级及同配置覆盖问题
  4. OSChina 周六乱弹 —— 放假前期焦虑症晚期
  5. Buffer 与 拥塞控制
  6. Notepadd++推荐几款不错的主题 【离线】
  7. JavaBean封装
  8. String,Stringbuilder,Stringbuffer及正则表达式
  9. SpaceClaim meshing for CFD 1-简介
  10. gaussian用法 matlab_matlab做gaussian高斯滤波