过去,许多巧妙的计算机算法设计改变了我们的计算技术。许多有效的功能可以通过操纵标准计算机中可用的中间运算符来生成。这些功能导致了计算机程序的复杂性和多样性,这也是当今计算机时代飞速发展的重要原因。下面,我们列举了一些改变了我们使用计算机的算法。压缩技术霍夫曼编码霍夫曼编码广泛应用于无损数据压缩。为了找到一种高效的二进制编码,霍夫曼于1951年提出了一种编码方法,如按字符频率排序的二叉树,这种方法已被证明是最有效的编码方法。因为这种方法简单高效,所以在很多压缩方式如:DEFLATE(PKZIP压缩软件中的算法),以及包括JPEG、MP3在内的很多多媒体编码中都使用了这种方法。加密公钥加密需要两个不同的密钥用于加密算法。公钥用作加密明文或验证数字签名。私钥用于解密密文,或生成数字签名。公钥加密允许用户通过公共渠道安全地传输数据。虽然这种方法发表于1997年,但它是由英国政府通信总部(GCHQ)的JamesH.Ellis、CliffordCocks和MalcolmWilliamson于1973年设计并投入使用的。搜索算法Dijkstra最短路径算法该算法由Dijkstra于1956年提出,这是一种为图设计的搜索算法。它解决了单向图中的最短路径问题,因此,它也可以用来生成最短路径树。在许多基于图的算法中,此类算法应用于路径规划或子路径选择。上图展示了使用这样的算法在单向图中寻找最短路径的过程。二分搜索算法二分搜索算法用于在已排序的数组中查找键的位置。在解释词义的词典中,词的排列基本上是有序的。在电话簿中,记录也按姓名、地址或电话号码排序。通过这样的算法,我们可以通过人名在电话簿中快速找到对应的电话号码和地址。排序算法Quicksort该算法由TonyHoare于1960年设计。该算法最初用于调整待翻译单词的顺序,使其与词典顺序更加一致,便于翻译。该算法以用作Unix系统中的默认排序算法而闻名。同时,该算法以其在C语言标准库中的函数名“qsort”命名。#p#数学方法Karatsuba快速乘法算法该算法用于更快地完成乘法的数学运算。由AnatoliiAlexeevitchKaratsuba于1962年提出。它减少了乘法所需的运算次数,并提供了一种快速进行乘法计算的方法。该算法的改进算法是Toom-Cook算法。但是,对于大数相乘,Sch?nhage–Strassen算法是一种更快的解决方案。欧氏算法(滚动除法)利用欧氏算法,可以计算出最大公约数。也就是说,两个正整数可以被其整除的数。虽然这个算法只是用减法和比较来找到最佳公约数,但它被用在许多高级算法中。Euclid被认为是该算法的创始人,Euclid的该算法被认为是欧几里德时期(公元前300年左右)最古老的算法之一。图形Bresenham直线算法的发展该算法是JackEltonBresenham于1962年在IBM工作时提出的。该算法最初用于在计算机屏幕上绘制直线。算法中使用的操作非常简单,整数加法、减法和移位操作。这是计算机图形学中非常先进的方法。在此方法的基础上,该算法又进行了一系列的扩展,如:画圆算法等。由于该算法效率高、速度快,该算法仍然非常重要,至今仍在许多硬件(如绘图仪、现代显卡等)。.倒数平方根快速算法该算法提供了一种快速计算平方根倒数的方法。这种方法广泛用于确定3D图像中的光线和投影关系,这可能需要每秒进行数千万次计算。《雷神之锤三:竞技场》的源码中就有这样一个算法,但是直到2002年才被广泛使用,这个算法是通过一系列简单的操作来解决复杂的问题。虽然很多人认为这个算法是JohnCarmack开发的,但是SGI和3dfx已经在他们的产品中应用了这个算法,而且当时应用的是GaryTarolli实现的版本。原文链接:docsity翻译:伯乐在线-programmer_lin翻译链接:http://blog.jobbole.com/61815/
