原文 | The real 10 algorithms that dominate our world

作者 | George Dvorsky    编辑 | 深度学习这件小事
一篇有趣的文章《统治世界的十大算法》中,作者George Dvorsky试图解释算法之于当今世界的重要性,以及哪些算法对人类文明最为重要。

 1 排序算法  

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。
稳定的
  • 冒泡排序(bubble sort) — O(n^2)

  • 鸡尾酒排序(Cocktail sort,双向的冒泡排序) — O(n^2)

  • 插入排序(insertion sort)— O(n^2)

  • 桶排序(bucket sort)— O(n); 需要 O(k) 额外空间

  • 计数排序(counting sort) — O(n+k); 需要 O(n+k) 额外空间

  • 合并排序(merge sort)— O(nlog n);需要 O(n) 额外空间

  • 原地合并排序— O(n^2)

  • 二叉排序树排序 (Binary tree sort) — O(nlog n)期望时间;O(n^2)最坏时间;需要 O(n) 额外空间

  • 鸽巢排序(Pigeonhole sort)— O(n+k); 需要 O(k) 额外空间

  • 基数排序(radix sort)— O(n·k); 需要 O(n) 额外空间

  • Gnome 排序— O(n^2)

  • 图书馆排序— O(nlog n) withhigh probability,需要(1+ε)n额外空间

不稳定的
  • 选择排序(selection sort)— O(n^2)

  • 希尔排序(shell sort)— O(nlog n) 如果使用最佳的现在版本

  • 组合排序— O(nlog n)

  • 堆排序(heapsort)— O(nlog n)

  • 平滑排序— O(nlog n)

  • 快速排序(quicksort)— O(nlog n) 期望时间,O(n^2) 最坏情况;对于大的、乱数列表一般相信是最快的已知排序

  • Introsort—O(nlog n)

  • Patience sorting— O(nlog n+k) 最坏情况时间,需要额外的 O(n+ k) 空间,也需要找到最长的递增子串行(longest increasing subsequence)

不实用的
  • Bogo排序— O(n× n!) 期望时间,无穷的最坏情况。

  • Stupid sort— O(n^3); 递归版本需要 O(n^2)额外存储器

  • 珠排序(Bead sort) — O(n) or O(√n),但需要特别的硬件

  • Pancake sorting— O(n),但需要特别的硬件

  • stooge sort——O(n^2.7)很漂亮但是很耗时

 2 傅立叶变换与快速傅立叶变换  

傅立叶是一位法国数学家和物理学家,原名是JeanBaptiste Joseph Fourier(1768-1830), Fourier于1807年在法国科学学会上发表了一篇论文,论文里描述运用正弦曲线来描述温度分布,论文里有个在当时具有争议性的决断:任何连续周期信号都可以由一组适当的正弦曲线组合而成。
当时审查这个论文拉格朗日坚决反对此论文的发表,而后在近50年的时间里,拉格朗日坚持认为傅立叶的方法无法表示带有棱角的信号,如在方波中出现非连续变化斜率。直到拉格朗日死后15年这个论文才被发表出来。
谁是对的呢?拉格朗日是对的:正弦曲线无法组合成一个带有棱角的信号。但是,我们可以用正弦曲线来非常逼近地表示它,逼近到两种表示方法不存在能量差别,基于此,傅立叶是对的。
为什么我们要用正弦曲线来代替原来的曲线呢?如我们也还可以用方波或三角波来代替呀,分解信号的方法是无穷多的,但分解信号的目的是为了更加简单地处理原来的信号。
用正余弦来表示原信号会更加简单,因为正余弦拥有原信号所不具有的性质:正弦曲线保真度。一个正余弦曲线信号输入后,输出的仍是正余弦曲线,只有幅度和相位可能发生变化,但是频率和波的形状仍是一样的。且只有正余弦曲线才拥有这样的性质,正因如此我们才不用方波或三角波来表示。

 3 Dijkstra 算法  

Dijkstra算法是典型的算法。Dijkstra算法是很有代表性的算法。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权边。

 4 RSA算法变换  

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。

 5 安全哈希算法  

一种对输入信息(例如消息)进行摘要的算法。摘要过程能够完成下列特点:不同的输入信息绝对不会具有相同的指纹:相近输入信息经过摘要之后的输出信息具有较大的差异,同时计算上很难生产一个与给定输入具有相同指纹的输入。(即不可逆)。

 6 整数因式分解  

这是在计算机领域被大量使用的数学算法,没有这个算法,信息加密会更不安全。该算法定义了一系列步骤,得到将一合数分解为更小因子的质数分解式。这被认为是一种FNP问题,它是NP分类问题的延伸,极其难以解决。
许多加密协议(如RSA算法)都基于这样一个原理:对大的合数作因式分解是非常困难的。如果一个算法能够快速地对任意整数进行因式分解,RSA的公钥加密体系就会失去其安全性。
量子计算的诞生使我们能够更容易地解决这类问题,同时它也打开了一个全新的领域,使得我们能够利用量子世界中的特性来保证系统安全。

 7 链接分析  

链接分析,源于对Web结构中超链接的多维分析。当前其应用主要体现在网络信息检索、网络计量学、数据挖掘、Web结构建模等方山。作为Google的核心技术之一,链接分析算法应用已经显现出j惊人的商业价值。

 8 比例积分微分算法  

你是否曾经用过飞机、汽车、卫星服务或手机网络?你是否曾经在工厂工作或是看见过机器人?如果回答是肯定的,那么你应该已经见识过这个算法了。
大体上,这个算法使用一种控制回路反馈机制,将期望输出信号和实际输出信号之间的错误最小化。无论何处,只要你需要进行信号处理,或者你需要一套电子系统,用来自动化控制机械、液压或热力系统,这个算法都会有用武之地。
可以这样说,如果没有这个算法,现代文明将不复存在。

 9 数据压缩算法  

在现今的电子信息技术领域,正发生着一场有长远影响的数字化革命。由于数字化的多媒体信息尤其是数字视频、音频信号的数据量特别庞大,如果不对其进行有效的压缩就难以得到实际的应用。因此,数据压缩技术已成为当今数字通信、广播、存储和多媒体娱乐中的一项关键的共性技术。

 10 随机数生成  

在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。
- END -
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「perfect_iscas」,关注后回复「进群」或者扫描下方二维码即可进入无广告技术交流群。
扫描二维码进群↓

在看 

统治世界的 10 大算法,你知道几个?相关推荐

  1. 真正统治世界的十大算法(转)

    不久前的某一天,我在浏览Reddit发现了一篇有趣的文章<统治世界的十大算法>,作者George Dvorsky在那篇文章中试图解释算法之于当今世界的重要性,以及哪些算法对人类文明最为重要 ...

  2. 真正统治世界的十大算法

    本文由  伯乐在线  -  Justin Wu  翻译自  Marcos Otero .欢迎加入 技术翻译小组 .转载请参见文章末尾处的要求. 不久前的某一天,我在浏览Reddit发现了一篇有趣的文章 ...

  3. 统治世界的十大算法(转)

    原文:http://www.ctocio.com/ccnews/15714.html 软件正在吃掉世界,而软件的核心则是算法.算法千千万万,又有哪些算法属于"皇冠上的珍珠"呢?Ma ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Host ‘XXX‘ is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
  2. Endnote X3 出现中文乱码
  3. 库函数和系统调用的区别
  4. 【剑指offer】面试题52:两个链表的第一个公共节点(java)
  5. python怎么安装myqr_python二维码操作:对QRCode和MyQR入门详解
  6. 【bzoj3576】 Hnoi2014—江南乐
  7. Android 关于解决MediaButton学习到的media控制流程
  8. html点导航栏换图片,jQuery点击导航栏选中更换样式的实现代码
  9. 鸡蛋究竟宜不宜生吃——看阿里云计算怎么破?
  10. 14个阿里高管的研发管理实践和思考 | 凌云时刻
  11. “舱驾融合”技术发展趋势分析
  12. asp探针,用来检测Web服务器相关特性
  13. linux 日期、星期简写
  14. Win7系统无法被远程桌面连接如何解决
  15. SAEJ3061汽车信息安全指南文档
  16. 在线qq的html代码,网页QQ
  17. 社工心理学:如何让LOL找你约架的社会人给你道歉
  18. 5分钟外设学堂:耳机不响别慌,换个插头能救活!
  19. java路径是什么_什么是java路径?
  20. sqlite expert 教程

热门文章

  1. 【ACM】家喻户晓的中药店(待更)
  2. 终于有人把 Python 讲清楚了!
  3. 想学Python?快看看这个教程!收藏!
  4. ​一个参数一张Excel表,玩转Pandas的read_excel()表格读取
  5. Python三十年技术演变史
  6. 美团技术面1小时,我看出了和月薪3w的差距
  7. 太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
  8. 微服务架构之「 配置中心 」
  9. 天池供应链大赛来了!
  10. 李沐:用随机梯度下降来优化人生!