细数那些改变计算技术的伟大算法

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

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

压缩技术

哈弗曼编码

[[110280]]

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

密码学

公共秘钥加密

[[110278]]

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

搜索算法

Dijkstra 最短路径算法

[[110281]]

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

二分搜索算法

[[110282]]

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

排序算法

快速排序

[[110283]]

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

#p#

数学方法

Karatsuba快速相乘算法

[[110284]]

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

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

[[110285]]

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

图形学的发展

Bresenham直线算法

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

平方根倒数速算法

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

原文链接: docsity   翻译: 伯乐在线 - programmer_lin

译文链接: http://blog.jobbole.com/61815/

责任编辑:林师授 来源: 伯乐在线
相关推荐

2013-06-21 10:45:41

Windows 8.1

2013-05-29 09:59:43

Opera浏览器

2014-10-30 15:30:35

编程技术算法

2010-03-08 10:48:09

2013-02-21 10:44:03

云计算云平台云服务提供商

2020-10-26 08:00:08

云计算IT服务企业

2017-05-05 11:34:04

安防监控云计算2017年

2019-10-18 12:51:44

云计算企业高管敏捷

2010-09-02 13:29:38

云计算技术

2011-03-27 23:15:09

ibmdw云计算

2012-11-20 10:23:47

云计算效用计算网格计算

2020-08-06 17:55:28

云计算企业服务器

2010-04-02 17:59:37

云计算

2022-05-15 08:13:50

Mysql数据库Mycat

2010-03-22 13:35:49

云计算

2010-09-02 16:34:41

2010-03-31 15:03:12

云计算

2010-04-02 16:41:26

云计算

2018-05-18 10:35:56

云计算差异技术

2013-03-12 10:19:20

计算机内存芯片数据
点赞
收藏

51CTO技术栈公众号