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

在过去,不少巧妙的计算机算法设计,改变了咱们的计算技术。经过操做标准计算机中提供的中间运算符,能够产生不少的高效函数。这些函数致使了计算机程序的复杂性和多样性,这也是今天计算机时代快速发展的重要缘由。以下所示,咱们列举了一些算法,它们改变了咱们的计算机使用。 算法


压缩技术 数组


哈弗曼编码 安全



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


密码学 编码


公共秘钥加密 加密



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


搜索算法 翻译


Dijkstra 最短路径算法 设计


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


二分搜索算法


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


排序算法


快速排序


这种算法由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实现的版本。

相关文章
相关标签/搜索