常用的10 种算法

article/2025/9/12 17:43:58

译者:claudio

jandan.net/2014/05/31/10-algorithms.html

Reddit 有篇帖子介绍了算法对我们现在生活的重要性,以及哪些算法对现代文明所做贡献最大。如果对算法有所了解,读这篇文章时你可能会问 “作者知道算法为何物吗?”,或是“Facebook 的‘信息流’(News Feed) 算是一种算法吗?”,如果 “信息流” 是算法,那就可以把所有事物都归结为一种算法。

才疏学浅,结合那篇帖子,接下来我试着解释一下算法是什么,又是哪 10 个算法正在主导我们的世界。

什么是算法?

简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E. Leiserson 《算法导论第 3 版》)

可以这样理解,算法是用来解决特定问题的一系列步骤 (不仅计算机需要算法,我们在日常生活中也在使用算法)。算法必须具备如下 3 个重要特性:

**[1] 有穷性。**执行有限步骤后,算法必须中止。

**[2] 确切性。**算法的每个步骤都必须确切定义。

**[3] 可行性。**特定算法须可以在特定的时间内解决特定问题,

其实,算法虽然广泛应用在计算机领域,但却完全源自数学。实际上,最早的数学算法可追溯到公元前 1600 年 - Babylonians 有关求因式分解和平方根的算法。

那么又是哪 10 个计算机算法造就了我们今天的生活呢?请看下面的表单,排名不分先后:

1. 归并排序 (MERGE SORT),快速排序(QUICK SORT) 和堆积排序(HEAP SORT)

哪个排序算法效率最高?这要看情况。这也就是我把这 3 种算法放在一起讲的原因,可能你更常用其中一种,不过它们各有千秋。

归并排序算法,是目前为止最重要的算法之一,是分治法的一个典型应用,由数学家 John von Neumann 于 1945 年发明。

快速排序算法,结合了集合划分算法和分治算法,不是很稳定,但在处理随机列阵 (AM-based arrays) 时效率相当高。

堆积排序,采用优先伫列机制,减少排序时的搜索时间,同样不是很稳定。

与早期的排序算法相比 (如冒泡算法),这些算法将排序算法提上了一个大台阶。也多亏了这些算法,才有今天的数据发掘,人工智能,链接分析,以及大部分网页计算工具。

2. 傅立叶变换和快速傅立叶变换

这两种算法简单,但却相当强大,整个数字世界都离不开它们,其功能是实现时间域函数与频率域函数之间的相互转化。能看到这篇文章,也是托这些算法的福。

因特网,WIFI,智能机,座机,电脑,路由器,卫星等几乎所有与计算机相关的设备都或多或少与它们有关。不会这两种算法,你根本不可能拿到电子,计算机或者通信工程学位。(USA)

3. 代克思托演算法 (Dijkstra’s algorithm)

可以这样说,如果没有这种算法,因特网肯定没有现在的高效率。只要能以 “图” 模型表示的问题,都能用这个算法找到 “图” 中两个节点间的最短距离。

虽然如今有很多更好的方法来解决最短路径问题,但代克思托演算法的稳定性仍无法取代。

4. RSA 非对称加密算法

毫不夸张地说,如果没有这个算法对密钥学和网络安全的贡献,如今因特网的地位可能就不会如此之高。现在的网络毫无安全感,但遇到钱相关的问题时我们必需要保证有足够的安全感,如果你觉得网络不安全,肯定不会傻乎乎地在网页上输入自己的银行卡信息。

RSA 算法,密钥学领域最牛叉的算法之一,由 RSA 公司的三位创始人提出,奠定了当今的密钥研究领域。用这个算法解决的问题简单又复杂:保证安全的情况下,如何在独立平台和用户之间分享密钥。

5. 哈希安全算法 (Secure Hash Algorithm)

确切地说,这不是一种算法,而是一组加密哈希函数,由美国国家标准技术研究所首先提出。无论是你的应用商店,电子邮件和杀毒软件,还是浏览器等等,都使用这种算法来保证你正常下载,以及是否被 “中间人攻击”,或者 “网络钓鱼”。

6. 整数质因子分解算法 (Integer factorization)

这其实是一个数学算法,不过已经广泛应用与计算机领域。如果没有这个算法,加密信息也不会如此安全。通过一系列步骤将,它可以将一个合成数分解成不可再分的数因子。

很多加密协议都采用了这个算法,就比如刚提到的 RSA 算法。

7. 链接分析算法 (Link Analysis)

在因特网时代,不同入口间关系的分析至关重要。从搜索引擎和社交网站,到市场分析工具,都在不遗余力地寻找因特网的正真构造。

链接分析算法一直是这个领域最让人费解的算法之一,实现方式不一,而且其本身的特性让每个实现方式的算法发生异化,不过基本原理却很相似。

链接分析算法的机制其实很简单:你可以用矩阵表示一幅 “图“,形成本征值问题。本征值问题可以帮助你分析这个“图” 的结构,以及每个节点的权重。这个算法于 1976 年由 Gabriel Pinski 和 Francis Narin 提出。

谁会用这个算法呢?Google 的网页排名,Facebook 向你发送信息流时 (所以信息流不是算法,而是算法的结果),Google + 和 Facebook 的好友推荐功能,LinkedIn 的工作推荐,Youtube 的视频推荐,等等。

普遍认为 Google 是首先使用这类算法的机构,不过其实早在 1996 年 (Google 问世 2 年前) 李彦宏就创建的 “RankDex” 小型搜索引擎就使用了这个思路。而 Hyper Search 搜索算法建立者马西莫 · 马奇奥里也曾使用过类似的算法。这两个人都后来都成为了 Google 历史上的传奇人物。

8. 比例微积分算法 (Proportional Integral Derivative Algorithm)

飞机,汽车,电视,手机,卫星,工厂和机器人等等事物中都有这个算法的身影。

简单来讲,这个算法主要是通过 “控制回路反馈机制”,减小预设输出信号与真实输出信号间的误差。只要需要信号处理,或电子系统来控制自动化机械,液压和加热系统,都需要用到这个算个法。

没有它,就没有现代文明。

9. 数据压缩算法

数据压缩算法有很多种,哪种最好?这要取决于应用方向,压缩 mp3,JPEG 和 MPEG-2 文件都不一样。

哪里能见到它们?不仅仅是文件夹中的压缩文件。你正在看的这个网页就是使用数据压缩算法将信息下载到你的电脑上。除文字外,游戏,视频,音乐,数据储存,云计算等等都是。它让各种系统更轻松,效率更高。

10. 随机数生成算法

到如今,计算机还没有办法生成 “真正的” 随机数,但伪随机数生成算法就足够了。这些算法在许多领域都有应用,如网络连接,加密技术,安全哈希算法,网络游戏,人工智能,以及问题分析中的条件初始化。

这个表单并不完整,很多与我们密切相关的算法都没有提到,如机器学习和矩阵乘法。另外,知识有限,如有批漏,还望指正。


http://chatgpt.dhexx.cn/article/0FmF0meW.shtml

相关文章

常用的十种算法

十种算法 1、二分查找算法(非递归) 1、介绍: 1)二分查找只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 2)二分查找算法的运行时间为对数时间O&…

基础夯实:基础数据结构与算法(二)

基础夯实:基础数据结构与算法(二) 常见的10种算法1、递归算法例题1:计算n!例题2:斐波那契数列例题3:递归将整形数字转换为字符串例题4:汉诺塔例题5:猴子吃桃例题6&#x…

蓝桥杯知识点汇总:基础知识和常用算法

文章目录 JAVA基础语法:算法竞赛常用的JAVA API:算法和数据结构简单算法简单数据结构图论数学贪心动态规划 补充省赛题解待更: 此系列包含蓝桥杯(软件类)所考察的绝大部分知识点。一共分为 基础语法, 常用…

HBA的WWN号以及存储区域网络

古驰古驰巴拉巴拉,今天讲一下存储区域网络和wwn号以及查看wwn号的方法 存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道&#xf…

nsw hnsw

参考了很多该博客 https://blog.csdn.net/u011233351/article/details/85116719,感谢博主。 参考论文《Approximate nearest neighbor algorithm based on navigable small world graphs》 《Efficient and robust approximate nearest neighbor search using Hie…

思科光交MDS9710绑定WWN并激活新的wwn

第一步、查看所有的wwn号 #命令 #show flogi database 内容示例: 第二步、查看是否有发现新的wwn号 图中为新发现的wwn号 第三步、将该wwn号加入到对应的zone下 #先筋肉config模式 #再进入对应的zone zone name Zone_P11_****——** vsan 1 #新增新存在的wwn号…

www.wwwwwwwwww

复习题 一、问答题 1.Anaconda的优点有哪些? (1)开源。 (2)安装过程简单。 (3)⾼性能使⽤Python和R语⾔。 (4)免费的社区⽀持。 (5) Conda包…

NWD(2022)

A Normalized Gaussian Wasserstein Distance for Tiny Object Detection Abstract 检测微小物体是一个非常具有挑战性的问题,因为微小物体仅包含几个像素大小。我们证明,由于缺乏外观信息,最先进的检测器无法在微小物体上产生令人满意的结…

SAN环境中WWN,WWNN,WWPN的区别

存储区域网络(Storage Area Network,简称SAN)采用网状通道(Fibre Channel ,简称FC,区别与Fiber Channel光纤通道)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于…

WWN,WWNN,WWPN介绍

WWN是HBA卡用的编号吧,每一个光纤通道设备都有一个唯一的标识,称为WWN(world wide name),由IEEE负责分配。在有多台主机使用磁盘阵列时,通过WWN号来确定哪台主机正在使用指定的LUN(或者说是逻辑…

WWN,WWNN,WWPN区别

WWN: world wide number 是硬件的全球唯一标示 WWPN: world wide port number 是指端口号 WWNN: world wide node number 是指节点号 如果是光纤交换机的话wwn和wwnn是一样的,而wwpn是指每个光纤端口. 如果是HBA卡的话,若是只有一个端口则三者可能一样,若是有多个端口则和交换…

如何查看WWN号

如何查看WWN号 WWN即World Wide Name,用来标识网络上的一个连接或连接集合,主要用于FC和SAS。就像网卡的MAC地址一样,WWN是用在光纤网络的。 如何查看WWN号AIX: 1,获得AIX主机连接的光纤设备: # lsdev -Cc adapter -S a | grep fcs fcs0 Ava…

linux查看WWN号及常见问题解决

linux查看WWN号及常见问题解决 查看WWN号查看WWID号查询常见问题 查看WWN号 要查看CentOS 6.7版本的WWN号,可以执行以下步骤: 1.确保已经连接了存储设备。 lspci | grep -i fibre2.在终端中输入命令:lsscsi,然后按 Enter 键。该命…

WWN,WWNN,WWPN三者的区别

WWN: world wide number 是硬件的全球唯一标示 WWPN: world wide port number 是指端口号 WWNN: world wide node number 是指节点号 如果是光纤交换机的话wwn和wwnn是一样的,而wwpn是指每个光纤端口. 如果是HBA卡的话,若是只有一个端口则三者可能一样,若是有多个端口则和交换…

excel制作可模糊匹配的下拉框

1.整体效果: 2.设置数据有效性 在来源中输入公式:OFFSET(国籍地区!$A$1,MATCH(船舶基本资料!$F2&"*",国籍地区!$A$2:$A$246,0),,COUNTIF(国籍地区!$A$2:$A$246,船舶基本资料!$F2&"*"),) 其中“国籍地区”为一个sheet,ru如下…

关于Excel表操作-通过gensim实现模糊匹配

gensim是一个Python的自然语言处理库,能够将文档根据TF-IDF,LDA,LSI等模型转换成向量模式,此外,gensim还实现了word2vec,能够将单词转换为词向量。 gensim的一些常见概念: 语料Corpus: 一组原始…

Excel效率提升|解决不完全匹配数据整理

以各地级市(1-5线城市)人均GDP数据为例 从国家统计局或wind导出来的数据: 而我们整理后的目标sheet的匹配字段如图: 如何进行有效匹配? 观察可知:我们需要以城市名作为匹配的依据 如何将城市名批…

ExcelWPS通配符的使用方法,一招解决模糊查询!

大家好,本期和大家分享Excel通配符的使用方法! Excel 通配符一共有3个。 它们的含义如下图所示: 符号含义举例?表示任意单个字符比如要查找所有姓王的名字为2个字的人,则可以使用 【 王? 】 代替;查找所…

[Excel]vlookup的内在逻辑以及模糊检索

作为一个excel的用户,vlookup可能是使用频度最高的一个函数 但是有关这个函数当中的数学意义不知道大家具体了解多少 今天就在这里讲讲我个人的vlookup的一些用法 比一般的使用方法稍微高阶一点(求保命) 大部分人刚开始使用vlookup的时候都…

python 模糊匹配字符串 excel,python pandas模糊匹配 读取Excel后 获取指定指标的操作...

1.首先读取Excel文件 数据代表了各个城市店铺的装修和配置费用,要统计出装修和配置项的总费用并进行加和计算; 2.pandas实现过程 import pandas as pd #1.读取数据 df = pd.read_excel(r./data/pfee.xlsx) print(df) cols = list(df.columns) print(cols) #2.获取含有装修 和…