统治世界的十大算法

全世界有3.14 % 的人已经关注了

数据与算法之美


软件正在统治世界。而软件的核心则是算法。算法千千万万,又有哪些算法属于“皇冠上的珍珠”呢?Marcos Otero 给出了他的看法。


什么是算法?


通俗而言,算法是一个定义明确的计算过程,可以一些值或一组值作为输入并产生一些值或一组值作为输出。因此算法就是将输入转为输出的一系列计算步骤。

Thomas H. Cormen,Chales E. Leiserson,算法入门第三版


简而言之,算法就是可完成特定任务的一系列步骤,它应该具备三大特征:


1、有限

2、指令明确

3、有效


以下是 Marcos Otero 推荐的十大算法:


1、归并排序、快速排序及堆积排序


640?wx_fmt=png

最好的排序算法跟需求密切相关,很难评判。但是从使用上说,这三种的使用频率更高。


归并排序由冯•诺依曼于 1945 年发明。这是一种基于比较的排序算法,采用分而治之的办法解决问题,其阶是 O(n^2)。


快速排序可采用原地分割方法,也可采用分而治之算法。这不是一种稳定的排序算法,但对于基于 RAM(内存)的数组排序来说非常有效。


堆排序采用优先级队列来减少数据中的搜索时间。该算法也是原地算法,并非稳定排序。


这些排序算法相对于以前的冒泡排序算法等有了巨大改进,实际上我们今天的数据挖掘、人工智能、链接分析及包括 web 在内的大多数计算工具都要感谢它们。


2、傅里叶变换与快速傅里叶变换


640?wx_fmt=jpeg

我们的整个数字世界都使用这两个简单但非常强大的算法,其作用是将信号从时域转为频域或者反之。实际上,你看得到这篇文章得感谢这些算法。


互联网、你的 WiFi、智能手机、电话、计算机、路由器、卫星,几乎所有内置有计算机的东西都会以各种方式使用这两算法。如果不研究这些算法,你就拿不到电子、计算或通信方面的学位。轻松掌握算法精髓,推荐阅读《啊哈!算法》。


3、迪杰斯特拉(Dijkstra)算法


640?wx_fmt=jpeg


Dijkstra是一种图谱搜索算法。许多问题都可以建模为图谱,然后利用 Dijkstra 寻找两个节点之间的最短路径。如果没有 Dijkstra 算法,互联网的运营效率必将大大降低。虽然今天我们已经有了更好的寻找最短路径的解决方案,但出于稳定性的要求,Dijkstra 算法仍然被很多系统使用。


4、RSA算法


如果没有密码术和网络安全,互联网就不会像今天一样重要,因为电子商务和电子交易需要这些技术来确保交易安全。而RSA算法是最重要的密码学算法之一。该算法由同名公司的创始人(Ron Rivest、Adi Shamir 和 Leonard Adleman)开发,它让密码学普及到了千家万户并奠定了密码术的应用基础。


RSA 要解决的问题既简单又复杂:如何在独立平台与最终用户之间共享公钥。其解决方案是加密。RSA 加密的基础是一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。但在分布式计算和量子计算机理论日趋成熟的今天,RSA 加密安全性受到了挑战。


5、安全哈希算法(SHA)


这个实际上并不算是算法,而是由美国国家标准技术研究所开发的一系列密码杂凑函数。但是这系列函数是全世界运作的基石。应用商店,电子邮件、反病毒、浏览器等在使用SHA系列函数,SHA 函数可用来确定下载的东西是否自己想要的东西,还是说遭遇了中间人攻击或钓鱼攻击。


6、整数因子分解


这是一个在计算领域使用频繁的数学算法。如果没有这一算法,密码术就会变得不安全得多。整数因子分解是用来将一个合数分解成一系列素因子的一系列步骤。整数因子分解可被视为是 FNP 问题(FNP 是难以解决的典型 NP 问题的扩展)。


许多密码协议均基于难以分解的大型合数或相关问题。比方说前面提到的 RSA 问题。如果有算法能够有效分解任意数字,那么就会使得基于 RSA 的公钥密码系统陷入不安全的境地。


而量子计算的诞生则令此问题的解决变得容易,从而也打开了一个全新的领域,可利用量子世界的属性来令系统更加安全。


7、链接分析


640?wx_fmt=jpeg

在互联网时代,不同实体间关系的分析至关重要。从搜索引擎和社交网络到营销分析工具,每个人都想找出互联网的真正结构。


链接分析无疑是公众对算法的最大困惑与迷思之一。其问题在于进行链接分析有不同的方式,而增加一些特征就会令每一算法略有不同(从而使得算法受到专利保护),但基本上这些算法都是类似的。


链接分析算法首先由 Gabriel Pinski 和 Francis Narin 在 1976 年发明。其背后的思路很简单,即把图谱以矩阵的形式表示,从而转为特征值问题,而特征值有助于了解图谱结构及每个节点的相对重要性。


Google 的 PageRank,Facebook 展示新闻源,Google+,Facebook 朋友推荐,LinkedIn 工作及联系人推荐,Netflix 与 Hulu 的电影推荐,YouTube 视频推荐等均使用了链接分析算法。虽然每个都有不同的目标和参数,但其背后的数学是一样的。


尽管 Google 似乎是利用此类算法的第一家公司,但是实际上百度创始人李彦宏在 Google 诞生 2 两年前做的搜索引擎“RankDex”已经利用这种思路来进行搜索排名了。


8、比例积分微分算法


如果你用过飞机、汽车、微型服务或手机网络,如果你在工厂呆过或者见过机器人,那么你已经见识过这一PID算法的作用了。


该算法利用了控制回路机制来让期望输出信号与实际输出信号之间的错误降到最小。只要需要信号处理或需要电子系统来控制自动化的机械、水力或热力系统就要用到它。


因此可以说如果没有这一算法,人类的现代文明将不复存在。像小说一样有趣的算法入门书,推荐阅读《算法图解》。


9、数据压缩算法


数据压缩算法无疑是非常重要的,因为几乎在所有的结构中都要用到。除了最明显的压缩文档以外,网页下载时也会压缩,视频游戏、视频、音乐、数据存储、云计算、数据库等等也都要使用压缩算法。


可以说几乎所有应用都要使用压缩算法。压缩算法令系统更有效成本更低,但是要想确定哪一个最重要却很困难,因为应用不同,使用的压缩算法从 zip 到 mp3、JPEG 或 MPEG-2 各异。


10、随机数生成算法


很多应用都需要随机数。像 interlink connection,密码系统、视频游戏、人工智能、优化、问题的初始条件,金融等都需要生成随机数。但实际上目前我们并没有“真正”的随机数生成器,尽管有一些伪随机数生成器也是非常有效的。


via:程序猿那些事


640?wx_fmt=png精品课程推荐:

640?wx_fmt=png

640?wx_fmt=png

选购数学科普正版读物

严选“数学思维好物”

送给孩子的益智礼物   |   办公室神器

算法工程师成长阅读   |   居家高科技

理工科男女实用型礼物精选   

640?wx_fmt=png


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg


数据与算法之美

用数据解决不可能


640?wx_fmt=jpeg



长按扫码关注


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hosting in .NET Core

在.NET Core中,Host负责应用程序的启动和生命周期管理。除此之外,在Host中还可以设置日志(Logging)、配置(Configuration)和依赖关系注入(Dependency Injection)等。Host将一个常规的控制台应用程序(Console Application)变成了一个可以长时间运行的服务…

hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码

Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码王笋,徐小双(华中科技大学控制科学与工程系,武汉 430074)摘 要Hilbert曲线是一种重要的图像处理工具,在图像处理,特别是图像扫描中广泛应用.为了正确快速的生成Hilbert曲线扫描矩阵,提出了基于矩阵运算的生成Hilber…

java例程练习(一维数组)

public class Test {public static void main(String[] args) {int a[] { 3, 9, 8}; //静态初始化Date days1 [] {new Date(1, 4, 2004),new Date(2, 4, 2004),new Date(3, 4, 2004)};//动态初始化Date [] days2 new Date[3];for (int i 0; i < 3; i) {days2[i] new Da…

如何用大数据找女朋友?

全世界有3.14 % 的人已经关注了数据与算法之美导读找女朋友不仅需要好眼力&#xff0c;还需要一些技术含量。比如眼下正热的大数据&#xff0c;可以认真钻研&#xff0c;用数据分析来实现自己的“脱单计划”。小猿25岁&#xff0c;单身男&#xff0c;热衷大数据&#xff0c;并决…

ASP.NET Core 单元测试:如何 Mock HttpContext.Features.Get()

点击上方蓝字关注“汪宇杰博客”导语在 ASP.NET Core 里&#xff0c;如果你想单元测试 HttpContext.Features.Get<SomeType>()&#xff0c;这个技巧一定不要错过。问题我有个 Error 页面&#xff0c;需要取得异常的详细信息。我使用 HttpContext.Features.Get<IExcept…

php 模拟登录163邮箱,PHP模拟登陆163邮箱发邮件及获取通讯录列表的方

本文实例讲述了PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;代码如下:header("Content-Type: text/html; charsetUTF-8");error_reporting(0);/*** 登陆* $user 163用户名* $pass 密码**/function login($u…

网址收藏

http://www.xdowns.com/ 绿色软件下载转载于:https://blog.51cto.com/guailele/851308

mini api

大部分主流语言都支持web框架&#xff0c;并且实现起来相对轻便&#xff0c;简捷&#xff0c;比如&#xff1a;go的gin包package main import "github.com/gin-gonic/gin" func main() {r : gin.Default()r.GET("/ping", func(c *gin.Context) {c.JSON(200…

qt交叉编译环境搭建方法

&#xff08;一&#xff09;准备工作1、下载最新版本的Qt 4.7.2&#xff1a; http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.2.tar.gz2、安装交叉编译器4.3.3或其它版本3、编译tslib-1.4.1.tar.bz2&#xff0c;这个东西是触摸屏库&#xff0c;编译QT4.7…

edge robert matlab,哪位熟悉matlab的大神路过瞄一眼哈

cxfx(believe truth believe me)UID240430帖子100精华积分1755蛋蛋币1755 枚威望0BT积分0阅读权限60性别男在线时间125 小时注册时间2013-3-27鸵鸟蛋主楼大中小发表于 2013-5-13 21:30 只看该作者哪位熟悉matlab的大神路过瞄一眼哈求大神指点迷津那&#xff01;谁来帮着看一下这…

朋友来网易面试,挂了~

阅读本文大概需要8分钟。最近推荐一个朋友来网易面试&#xff0c;这哥们在小厂工作6年&#xff0c;研发经验非常丰富&#xff0c;但他却挂在了技术终面。事后和他约了个饭&#xff0c;深聊了一次发现他的技术成长路径还是有点问题。软件开发行业需要经验&#xff0c;需要时间来…

php 图片 3d旋转图片,html5实现图片的3D旋转效果

我们先来看一下实现效果&#xff1a;(学习视频分享&#xff1a;html视频教程)H5旋转3D相册&#xff0c;鼠标放置暂停&#xff0c;图片灰度级为0&#xff0c;有放大效果。该实例运用H5和CSS3动画效果&#xff0c;未用javascript。提高了本人对CSS3 新属性的了解及掌握。完整代码…

初级运维工程师面试题总结

该面试题结合了上海龙旗&#xff0c;土豆网&#xff0c;上海激动网络&#xff0c;风之云&#xff0c;广典集团&#xff0c;旅行者传媒等等&#xff0c;有些面试题还在进一步完善之中&#xff0c;希望给想步入运维行业的朋友们一点点帮助&#xff0c;加油!1)Linux启动大致过程&a…

数据这么多,且看R语言怎么处理!

随着科技的不断进步&#xff0c;数据处理量的不断增大&#xff0c;对数据进行处理、分析、统计建模、数据挖掘以及可视化的重要性日渐突出。如果说有一门简单易学、通俗易懂并且集上述功能为一体的编程语言让科研人员从中解脱出来&#xff0c;R语言当仁不让。作为一种统计分析软…

MYSQL数据库表大小计算,计算mysql数据库数据表的大小,不精确,只是大略的数据...

SHOW TABLE STATUS dbname返回数组&#xff1a;Name: xxx (表名)Engine: MyISAM (表引擎)Version: 10 (版本)Row_format: Dynamic (行格式)Rows: (表内总行数)Avg_row_length: (平均每行大小&#xff0c;这里是4.7K)Data_length: (该表总大小&#xff0c;单位字节)Max_data_len…

乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

Dapr是一个由微软主导的云原生开源项目&#xff0c;国内云计算巨头阿里云也积极参与其中&#xff0c;2019年10月首次发布&#xff0c;到今年2月正式发布V1.0版本。在不到一年半的时间内&#xff0c;github star数达到了1.2万&#xff0c;超过同期的kubernetes、istio、knative等…

催人泪下!一个程序员的悲惨故事

全世界有3.14 % 的人已经关注了数据与算法之美编辑&#xff1a;大数据二狗如果你喜欢这篇文章&#xff0c;就把它发给朋友看吧~精品课程推荐&#xff1a;选购数学科普正版读物严选“数学思维好物”送给孩子的益智礼物 | 办公室神器算法工程师成长阅读 | 居家高科技理工…

php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程

php session实现多级目录存放实现代码&#xff0c;phpsession当一个目录下有很多文件时&#xff0c;服务器的处理性能会变低&#xff0c;php默认的session仅仅存放在/tmp目录下&#xff0c;未进行分级&#xff0c;当有一定的访问量时&#xff0c;就存在性能问题了。首先&#x…

erlang 编译之 to_core

感谢 坚强2002 同学的推荐 http://www.it.uu.se/research/group/hipe/cerl/ main.erl-module(main). -export([start/0]).start() ->ok. c(main, to_core). 会产生中间代码文件 main.core 打开如下 main.coremodule main [module_info/0,module_info/1,start/0]attributes […

C# Action用法

Action是无返回值的泛型委托可以使用 Action<T1, T2, T3, T4> 委托以参数形式传递方法&#xff0c;而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说&#xff0c;封装的方法必须具有四个均通过值传递给它的参数&#xff0c;并且不能返…