真正支配整个世界的十种算法

前几天,我在 Reddit 上面闲逛的时候,发现了一篇有趣的文章,名为《影响我们世界的十大算法》。作者 George Dvorsky 希望通过此文解释算法在当今世界上的重要意义,以及哪些算法为我们的文明做出突出贡献。

现在,如果大家对于算法有些涉猎,那么在读过文章后的第一个想法很可能是——作者真的知道算法是什么吗?或者说 Facebook 新闻源是否属于算法?因为如果 Facebook 新闻源也是一种算法,那么我们几乎可以把一切东西都归结为算法。因此,我希望在本篇文章中解释算法的真实定义,而后探讨 10 种(或者更多)真正支配着整个世界的算法。

算法究竟是什么?

直白地讲,算法是指一切经过明确定义的计算过程,其将某个或者某组值作为输入内容,并产生某个或者某组值作为输出结果。因此,算法代表的是一系列计算步骤,用于将输入转换为输出。

资源来源:Thomas H. Cormen 与 Chales E. Leiserson (2009 年),《算法导论》第 3 版。

更简单地总结,我们可以将算法视为一系列用于解决某个任务的步骤(是的,不仅仅是计算机会使用算法,人类同样在使用算法)。就目前的标准来看,算法应当具有以下三大重要特征才被视为拥有实际效果:

  1. 应该是有限的: 算法应该在有限的时间内用有限的步骤解决掉其旨在解决的问题,也就是说算法必须在有限的时间内可以完成,要不然就没有现实意义
  2. 应该具有明确的指令: 算法中的每个步骤必须经过精确定义 ; 同时应针对每种情况做出明确说明。
  3. 应该切实有效: 算法应当能够解决其旨在解决的问题。此外,算法应该被证明可以单纯利用纸笔工具实现收敛。

此外,需要强调的是算法的应用不仅局限于计算科学,同时它也作为一种数学实体。事实上,早在公元前 1600 年就已经出现第一条记录在案的数学算法——巴比伦人发现了最早的已知算法,用于分解平方根。因此,回到文章开头我们讨论的问题,我读到的那篇文章将算法视为计算实体,但如果采取这样一个更为宽泛的定义,那么支配世界的十大算法很可能体现为算术方法(例如减法、乘法等)。

但是,如果采取我们在本文中做出的算法定义,那么问题仍然存在:支配世界的十种算法究竟有哪些?在这里,我列出一份小小的清单,排名不分先后。

1. 合并排序,快速排序与堆排序

对元素进行排序的最佳算法是什么?具体答案取决于你的实际需要,因此我把这三种比较常用的排序算法列为同一类 ; 也许你更偏爱其中一种,但事实上三者都非常重要。

其中合并排序算法是迄今为止我们所拥有的最为重要的算法之一。这是一种基于比较的排序算法,以分治的方法解决原本时间复杂度为 O(n^2) 的问题。该算法由数学家 John von Neumann 于 1945 年发明得出。

快速排序是另一种用于解决排序问题的方法,其能够实现就地分区,同样属于一类分而治之的算法。该算法的问题在于其在排序方面并不稳定,但在对基于内存的数组进行排序时表现出色。

最后是堆排序算法,其利用优先级队列来减少数据中的搜索时间。该算法同样属于就地算法,且同样不属于稳定排序。

这些算法相较于我们之前使用过的其它方法(例如冒泡排序)有了很大的改进。事实上,正是由于这些算法的出现,我们才得以迎来数据挖掘、人工智能等网络上常见的众多现代计算工具。

2. 傅利叶变换与快速傅利叶变换

整个数字世界都在使用这些简单但非常强大的算法,这些算法能够将信号从时域转换为频域,反之亦然。事实上,正是由于这些算法的存在,本篇文章才能被更多朋友所看到。

互联网、Wi-Fi、智能手机、电话、计算机、路由器以及卫星等几乎一切具有内置计算装置的设备都会以这样或者那样的方式使用这些算法以保持运行。如果不研究这些重要的算法,大家也不可能拿下电子学、计算机或者通信科学学位。

 3. 迪杰斯特拉算法(又译戴克斯特拉算法)

实事求是地讲,如果没有这种算法,互联网根本无法像今天这样保持高效运作。这种图搜索算法具有多种应用方式,能够将需要解决的问题建模为图,并在其中找到两个节点间的最短路径。

今天,虽然我们已经拥有更好的最短路径问题解决方案,但迪杰斯特拉算法仍然在强调稳定性的众多系统当中得到广泛应用。

 4. RSA 算法

如果没有加密与网络安全机制作为保障,互联网的重要程度不可能达到如今的水平。大家可能会想“胡说,国家安全局局和众多情报机构的监控早就毁掉了互联网安全”或者“互联网根本就没有安全可言,傻子才会相信这种安全宣传”; 但必须承认,大多数人仍然具有一定程度的安全信心,否则你根本就不会通过互联网进行消费。毕竟如果真的否定现有网络体系的安全性,谁会愿意在 Web 服务中输入自己的信用卡号码?

在密码学领域,有一种算法仍然是目前世界上最重要的算法之一,这就是 RSA 算法。该算法由 RSA 公司的创始人们开发而成,使得密码学成果得以供世界上的每个人随意使用,甚至最终塑造了当今密码学技术的实现方式。RSA 算法希望解决的问题是如何在独立平台及最终用户之间共享公钥,从而实现加密(当然,我认为 RSA 算法并没能彻底解决这个问题,从业者们还需要在这个方向上投入更多努力)。

5. 安全哈希算法

这实际上并不是真正的算法,而是由 NIST(美国国家标准技术研究所)所开发的一系列加密散列函数。然而,该算法家族对于世界秩序的维持起到了至关重要的作用。从应用程序商店、电子邮件、防病毒软件再到常用的网络浏览器,这一切都在使用这类算法(实际上,使用的是由这类算法生成的哈希值),用以确定你所下载的是否正是你希望获得的内容,或者你是否已经成为中间人攻击或者网络钓鱼攻击的受害者。

 6. 整数分解

这是一种在计算领域被大量采用的数学算法。如果没有这种算法,密码学技术的安全水平将受到严重破坏。该算法用于将复合数的质数因子分解为较小的非零因数。这也被称为 FNP 类问题,属于 NP 类问题的扩展,且解决难度极高。

很多加密协议都以分解大型复合整数或相关问题的难度为基础——RSA 算法就是其中的典型代表。正是由于对任意整数进行因子分解的难度极高,才使得基于 RSA 的公钥加密机制拥有较高的安全性水平。

量子计算的诞生大大降低了此类问题的解决难度,并开辟出一个全新的科学研究领域——利用量子特性保障系统安全。

7. 链接分析

在互联网时代下,分析不同实体间的关系当然非常重要。从搜索引擎到社交网络再到营销分析工具,每一方都在努力发现随着时间推移而不断变化的互联网结构。

链接分析可以说是普罗大众眼中最神秘也最难以理解的算法之一。问题在于,我们可以通过多种不同方法实现链接分析,而且多种特征的存在使得每种算法间都存在着一定差异(允许对算法申请专利),但其底层基础却又高度相似。

链接分析背后的基本思路非常简单,即允许使用者以矩阵的形式表示图形,从而将其转化为特征值问题。这一特征值可以为我们提供衡量图形结构以及各节点相对重要性的好方法。该算法由 Gabriel Pinski 与 Francis Narin 于 1976 年发明得出。

那么,谁在使用这一算法?谷歌公司需要进行网页排名,Facebook 需要发布新闻提要(因此,我们将 Facebook 的新闻源服务视为算法结果,而非算法本身),Google+ 与 Facebook 的好友推荐,LinkedIn 的工作岗位与联系人推荐,Netflix 与 Hulu 的影视关联、YouTube 的相关视频等等皆属于这一类。虽然其各自拥有不同的目标与参数组合,但背后的数学原理却是相通的。

最后,我想强调一点,虽然很多人认为谷歌公司似乎是第一家使用这种算法的企业,但早在 1996 年(谷歌公司诞生的两年之前),由 Robin Li 开发的 RankDex 小型搜索引擎已经开始利用这一基本思路进行页面排名。最终,HyperSearch 的创始人 Massimo Marchiori 也开始使用这种基于单页间关系的页面排名算法。(谷歌在其申请的专利当中提到了这两位奠基者。)

8. 比例微积分算法

大家应该都体验过飞机、汽车、卫星服务或者手机网络吧?有些朋友还在工厂当中看到过机器人设备。如果是这样,那么你已经见识到了这一算法的威力。

该算法旨在利用控制回路反馈机制以最大程度控制期望输出信号与实际输出信号间的误差。其适用于一切存在信号处理需求的场景,包括以自动化方式通过电子技术控制的机械、液压或者热力系统。

也可以说,如果没有这种算法,那么我们的现代文明将无从谈起。

9. 数据压缩算法

很难确定哪种压缩算法的重要性最高,因为根据实际应用需求,大家使用的算法可能包括 zip、mp3 乃至 JPEG 以及 MPEG-2 等等。但相信大家都能清晰地感受到这些算法在各类结构中的重要作用。

除了最直观的文件压缩之外,大家还能在哪里看到压缩算法的踪影?很明显,网页会利用数据压缩技术控制你需要下载的文件体积,此外视频游戏、视频、音乐、数据存储、云计算以及数据库等也都是数据压缩算法大显身手的舞台。可以说,万事万物都离不开数据压缩,这类算法的存在使得系统能够以成本更低且效率更高的方式为用户服务。

10. 随机数生成算法

今天,我们还没有“真正的”随机数生成器,但已经拥有众多完全可以满足需求的伪随机数生成器。这些算法广泛存在于互连链接、加密、安全哈希算法、视频游戏、人工智能、优化、问题条件初始化以及财务等领域。

最后,我想补充一点:这份清单只代表一种观点,而非真正全面的列表。因为在机器学习、矩阵乘法以及分类等领域还存在着诸多堪称文明社会根基的重要算法,而我在本文中并没有明确提及。

转载https://www.huxiu.com/article/267404.html?rec=manual

原文地址:https://www.cnblogs.com/mike-mei/p/11840112.html

时间: 2024-11-08 05:05:41

真正支配整个世界的十种算法的相关文章

这十种算法撑起了整个世界

http://mp.weixin.qq.com/s?__biz=MzA3NTU2NDY0Ng==&mid=403015182&idx=1&sn=d74a8a5c21d293157827c058d933de67&scene=5&srcid=0119gF82WwCFY2jz7GuMSRWb#rd

主宰世界的十个算法--【转贴】

什么是算法? 简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值.(来源:homas H. Cormen, Chales E. Leiserson <算法导论第3版>) 可以这样理解,算法是用来解决特定问题的一系列步骤(不仅计算机需要算法,我们在日常生活中也在使用算法).算法必须具备如下3个重要特性: [1] 有穷性.执行有限步骤后,算法必须中止. [2] 确切性.算法的每个步骤都必须确切定义. [3] 可行性.特定算法须可以在特定的时间内解决特定问题, 其

有没有主宰世界的主算法?

算法日益影响着我们的生活.但是在它正常运转的大部分时间里我们却没有留意,只有在算法出问题的时候才注意到它的存在.只有在那时候我们才回想起这个世界对算法-那些统治着我们周围所有计算机的.对人类来说日益费解的规则,是如何的依赖.一旦算法出了问题,我们才会想起自己是多么的脆弱(想想天网). Pedro Domingos 花了很多时间去思考算法.他的新书,<The Master Algorithm: How the Quest for the Ultimate Learning Machine Will

LVS四种类型和十种算法

Lvs常用术语说明 术语 解释 Load balancer或director 负载调度器 RS或Real Server 真实服务器,提供服务的服务器 VIP 虚拟IP地址,客户端访问集群的地址 RIP 集群所提供应用程序的地址(HTTP,FTP) DIP 调度器的真实地址 Lvs的类型 Lvs-nat 他通过修改请求报文的目标地址为根据调度算法所挑选出的某RS的RIP来进行转发. 架构特性: (1)  Rs应该使用私有地址,即RIP应该为私有地址,各RS的网关必须执行DIP (2)  请求报文和

人工智能的常用十种算法(下)

5. 朴素贝叶斯视频 举个在 NLP 的应用 给一段文字,返回情感分类,这段文字的态度是positive,还是negative 为了解决这个问题,可以只看其中的一些单词 这段文字,将仅由一些单词和它们的计数代表 原始问题是:给你一句话,它属于哪一类 通过 bayes rules 变成一个比较简单容易求得的问题 问题变成,这一类中这句话出现的概率是多少,当然,别忘了公式里的另外两个概率 栗子:单词 love 在 positive 的情况下出现的概率是 0.1,在 negative 的情况下出现的概

数据挖掘10大算法详细介绍

想初步了解下怎样数据挖掘,看到一篇不错的文章转载过来啦~ 转自:http://blog.jobbole.com/89037/ 在一份调查问卷中,三个独立专家小组投票选出的十大最有影响力的数据挖掘算法,今天我打算用简单的语言来解释一下. 一旦你知道了这些算法是什么.怎么工作.能做什么.在哪里能找到,我希望你能把这篇博文当做一个跳板,学习更多的数据挖掘知识. 还等什么?这就开始吧! 1.C4.5算法 C4.5是做什么的?C4.5 以决策树的形式构建了一个分类器.为了做到这一点,需要给定 C4.5 表

Java数据结构和算法(一):综述

数据结构和算法能起到什么作用? 数据结构是指数据在计算机内存空间或磁盘中的组织形式.数据结构包括数组.链表.栈.二叉树.哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序. 数据结构的概述 数据结构 优点 缺点 数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定 有序数组 比无序数组查找快 删除和插入慢,大小固定 栈 提供后进先出方式的存取 存取其他项很慢 队列 提供先进先出方式的存取 存取其他项很慢 链表 插入快,删除快 查找慢 二叉

算法学习笔记(一)

有两种思想,像珠宝商放在天鹅绒上的宝石一样濯濯生辉,一个是微积分,另一个就是算法.微积分以及在微积分基础上建立起来的数学分析体系造就了现代科学,而算法则造就了现代世界.                                        --<算法的出现> 基本数据结构 1.线形数据结构 (1)    数组: "串"(如:数据串, 二进制串) (2)    链表:  单链表:数据+下一个元素的地址指针 双链表:上一个元素的地址指针+数据+下一个元素的地址指针 注:

在.NET中应用MATLAB算法

在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算.这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算.目前流行用Basic.Fortran和c语言编制计算程序, 既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧.对多数科学工作者而言,同时具备这两方面技能有一定困难.通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率.为克服上述困难,美国Mathwork公司于1967年推出了"Matrix Laborator