改变计算技术的 9 个伟大算法

在过去,很多巧妙的计算机算法设计,改变了我们的计算技术。通过操作标准计算机中提供的中间运算符,可以产生很多的高效函数。这些函数导致了计算机程序的复杂性和多样性,这也是今天计算机时代快速发展的重要原因。如下所示,我们列举了一些算法,它们改变了我们的计算机使用。

压缩技术

哈弗曼编码

哈弗曼编码在无损数据压缩中广泛应用。为了找到一种最高效的二进制编码,哈弗曼在1951年提出了根据字符频率排序的二叉树这样的编码方法。这种方法被证明,是最有效的编码方法。由于这种方法简单、高效,这种方法被用在很多的压缩方法中比如:DEFLATE(PKZIP压缩软件中的算法),以及很多的多媒体编码包括JPEG和MP3中。

密码学

公共秘钥加密

对于加密算法而言,需要两种不同的秘钥,公共秘钥是用来作为加密的明文或者验证数字签名。私钥则用来解密密文,或生成数字签名。公共秘钥加密使得用户可以在公共信道中安全传送数据。虽然这种方法于1997年发表,但是由英国政府通讯总部(GCHQ)的James H. Ellis, Clifford Cocks, Malcolm Williamson在1973年设计完成,并且投入使用。

搜索算法

Dijkstra 最短路径算法

这一算法由Dijkstra在1956年完成,这是一个为图设计的搜索算法。它解决了单向图中的最短路径问题,因此,也可以用来生成最短路径树。很多基于图的算法中,都应用了这样的算法来进行路径规划或是子路径选择。上图展示了在单向图中,利用这样的算法求最短路径的过程。

二分搜索算法

二分搜索算法用来在已经有序的数组中找到关键字的位置。在说明词义的字典中,词的排列基本是有序的。电话本上,记录也都按照人名、地址或是电话号码排序。通过这样的算法,我们可以由人名,很快地在电话本中找到相应的电话以及地址。

排序算法

快速排序

这种算法由Tony Hoare在1960年设计。这个算法本来用于调整待翻译单词的顺序,从而使它们与词典顺序更加一致,方便翻译。这种算法由于在Unix系统中被用作默认排序算法而声名大噪。同时,这种算法由于它在C语言标准库中的函数名“qsort”而得名。

数学方法

Karatsuba快速相乘算法

这种算法用来更快完成相乘的数学操作。由Anatolii Alexeevitch Karatsuba在1962年提出。它减少了乘法中需要操作的数字,并且提供了一个快速的相乘计算方法。这种算法的改进算法是Toom–Cook算法。然而,对于大数相乘,Schönhage–Strassen 算法则是一种更快速的解决方案。

欧几里得算法(辗转相除)

利用欧几里得算法,可以计算最大公约数。即两个正整数可以被整除的最大数。虽然这种算法只通过减法和比较来找到最大公约数,但是它被应用在了许多高级算法中。欧几里得被认为是这个算法的发明者,欧几里得的这个算法被认为是欧几里得时期(公元前300年左右)最古老的算法之一。

图形学的发展


Bresenham直线算法

这种算法由Jack Elton Bresenham在1962年,他在IBM工作期间提出。这种算法本来用于在计算机屏幕上画出直线。算法用到的操作非常简单,整数的加法,减法和移位操作。这在计算机图形学中是非常先进的方法。基于这样的方法,后来算法又有了一系列的拓展,比如:画圆算法等。由于这种算法的高效、快捷,至今在很多硬件中(比如绘图仪和现代图形卡等)这种算法仍然十分重要并且仍在使用。.

平方根倒数速算法

这种算法提供了一种快速计算平方根的倒数的方法。这种方法在3D图像中广泛应用于确定光线和投影关系,这可能需要每秒上千万次的计算速度。在《雷神之锤三:竞技场》的源代码中就有这样的算法,可是,直到2002年这种算法才被广泛应用。这个算法使用了一系列的简单操作来解决复杂问题。虽然很多人认为,这种算法由John Carmack研发,但是,SGI和3dfx早就曾在产品中应用此算法,当时应用的是Gary Tarolli实现的版本。

原文发布时间为:2015-03-28

时间: 2024-08-04 03:46:31

改变计算技术的 9 个伟大算法的相关文章

[IT技术]改变计算技术的伟大算法

在过去,很多巧妙的计算机算法设计,改变了我们的计算技术.通过操作标准计算机中提供的中间运算符,可以产生很多的高效函数.这些函数导致了计算机程序的复杂性和多样性,这也是今天计算机时代快速发展的重要原因.如下所示,我们列举了一些算法,它们改变了我们的计算机使用. 压缩技术 哈弗曼编码 哈弗曼编码在无损数据压缩中广泛应用.为了找到一种最高效的二进制编码,哈弗曼在1951年提出了根据字符频率排序的二叉树这样的编码方法.这种方法被证明,是最有效的编码方法.由于这种方法简单.高效,这种方法被用在很多的压缩方

互联网多元化的趋势下SEO应如何改变

随着互联网大会如火如荼的进行,多元化这个词语频繁出现在各大媒体,其实依附于互联网这个大环境下的seoer们也应该思考一下在这个多元化的趋势下该做出如何的改变?现今搜索引擎的频繁更新算法,让很多初入seo的人很是苦恼,刚刚了解了一些又要了解那个,可以说现今单纯的seo已经不是特别的好做,那些几天权重8的神话也如昙花一现般凋谢.那么面对多元化SEO该做出怎样的改变呢? 一.优化方式多元化 相信很多seo菜鸟以及自以为是的seo都认为网站的优化无外乎站内站外,我也曾认为是如此,但是如今的搜索引擎可以看

【算法】6 比较排序之外学习新的线性时间排序

回顾比较排序 相信阅读过前面5篇博文的童鞋们已经发现了"在排序的最终结果中,各元素的次序依赖于它们之间的比较".于是乎,这类排序算法被统称为"比较排序". 比较排序是通过一个单一且抽象的比较运算(比如"小于等于")读取列表元素,而这个比较运算则决定了每两个元素中哪一个应该先出现在最终的排序列表中. 声明:下面通过在维基百科中找到的非常完美的图示来介绍一系列比较排序. 插入排序 在该系列的[算法]1中我们便介绍了这个基本的算法,它的比较过程如下:

stl常用算法(Algorithms)介绍(stl排序算法、非变序型队列)_C 语言

算法:用来处理群集内的元素.它们可以出于不同的目的而搜寻,排序,修改,使用那些元素.是一种应用在容器上以各种方法处理其内存的行为或功能,如sort(排序),copy(拷贝)- 算法由模板函数体现,这些函数不是容器类的成员函数,是独立的函数,它们可以用于STL容器,也可以用于普通的C++数组等. 头文件:#include<algorithm> 在STL的泛型算法中有4类基本的算法: 1)变序型队列算法: 可以改变容器内的数据: 2)非变序型队列算法:处理容器内的数据而不改变他们: 3)排序值算法

《推荐系统:技术、评估及高效算法》一2.4 聚类分析

2.4 聚类分析 扩展CF分类器的最大问题是计算距离时的操作量,如发现最好的K近邻.如我们在2.2.3节中所看到那样,一种可能的解决方法是降维.但是,即使降低了特征维度,仍有许多对象要计算距离,这就是聚类算法的用武之地.基于内容的推荐系统也是这样,检索相似对象也需要计算距离.由于操作量的减少,聚类可以提高效率.但是,不像降维方法,它不太可能提高精确度.因此,在设计推荐系统时必须谨慎使用聚类,必须小心地衡量提高效率和降低精度之间的平衡. 聚类[41],也称为无监督的学习,分配物品到一个组中使得在同

大数据和实时分析的算法分类

如今,大数据技术的发展和进步开辟了收集和传输大量的数据更有效的新方式.这场革命促进了实时算法和方法的研究和发展.传统上,机器学习算法并不是专为实时处理而设计的.事实上,数据的科学竞赛(如Netflix,Kaggle)由于算法昂贵,并且不切实际的使用,并且计算量很大,这往往屡受诟病.这是植根于感知的准确性是更重要的,该算法的速度作为原始设置的数据挖掘是离线的,往往是分批计算.大数据的出现使其开始有了改变,随着越来越多的算法涌现,对一个可扩展的方式重新考虑.大多数时间的可扩展性,单独不妥协的算法的准

盘点大数据给我们带来的三大根本性改变

2009年时,全世界关于大数据的研究项目还非常有限,从2011年开始,越来越多的管理者开始意识到,大数据将是未来发展不可规避的问题,而到2012年年底,世界财富500 强企业中90%的企业都开展了大数据的项目.IDC的研究显示,到2015年,大数据市场前景将达到169亿美元的规模.当前所有企业的商业数据每隔1.2年就将递增一倍.无疑,数据信息的大爆炸不断提醒着我们,未来将会因大数据技术而改变. 那么,大数据为什么成为所有人关注的焦点?大数据带来了什么样的本质性改变?为此,我们与中国计算机学会大数

凯文•斯拉文:算法塑造世界

The Making of a Fly,这是一本1992年出版的学术书籍,受研究者喜欢.2011年4月8日,一家书商对其的售价为170万美元,另一家书商标价220万美元.如果那时你买了他,说不定还捡到便宜了,因为此后书价一直在涨,4月18日涨到直到23,698,655.94美元.当然,这还不包括3.99美元的运输费! 这本书研究苍蝇遗传学,晦涩难懂,但何以高达2370万美元?故事并非杜撰,而是加利福尼亚大学伯克利分校的进化生物学家迈克尔·艾森真切遇到的事儿. 事情真相却是,天价源于算法"价格战&

初识泛型算法

除了少数例外,标准库算法都对一个范围内的元素进行操作.我们将此元素范围称为"输入范围".接受输入范围的算法总是使用前两个参数来表示此范围,两个参数分别是指想要处理的第一个元素和尾元素之后位置的迭代器. 虽然大多数算法遍历输入范围的方式相似,但它们使用范围中元素的方式不同.理解算法的最基本的方法就是了解它们是否读取元素.改变元素.或是重排元素顺序.   1 只读算法 一些算法只会读取其输入范围内的元素,而从不改变元素.find就是这样一种算法. 另一个只读算法是accumulate,它定