在過去,不少巧妙的計算機算法設計,改變了咱們的計算技術。經過操做標準計算機中提供的中間運算符,能夠產生不少的高效函數。這些函數致使了計算機程序的複雜性和多樣性,這也是今天計算機時代快速發展的重要緣由。以下所示,咱們列舉了一些算法,它們改變了咱們的計算機使用。 算法
壓縮技術 數組
哈弗曼編碼 安全
哈弗曼編碼在無損數據壓縮中普遍應用。爲了找到一種最高效的二進制編碼,哈弗曼在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實現的版本。