最近在研究算法,發(fā)現(xiàn)其實算法也并不是特別難,只要抓住算法的核心思想,再靜下心來,都可以自己實現(xiàn)的。在計算機領(lǐng)域,有一些常見的而且又經(jīng)常使用的算法,這些算法我們應(yīng)該掌握,比如常見的排序算法;還有一些算法就是特定領(lǐng)域中經(jīng)常使用的算法了,這些算法我們只有必須使用時再去學(xué)習(xí)使用就行了,比如圖像處理中的快速傅里葉變換算法。 算法定義 讓我們來看看算法的定義吧。(以下定義摘自中文維基百科)
算法的特征 以下是高德納在他的著作《計算機程序設(shè)計藝術(shù)》里對算法的特征歸納:
算法的基本要素 算法的核心是創(chuàng)建問題抽象的模型和明確求解目標(biāo),之后可以根據(jù)具體的問題選擇不同的模式和方法完成算法的設(shè)計。 說起到算法,那么怎樣衡量一個算法的好壞呢?答案是通過兩方面來考慮,一是從時間上來考慮,也就是所謂的 時間復(fù)雜度
一般來說,計算機算法是問題規(guī)模n 的函數(shù)f(n),算法的時間復(fù)雜度也因此記做 算法執(zhí)行時間的增長率與f(n) 的增長率正相關(guān),稱作漸近時間復(fù)雜度(Asymptotic Time Complexity),簡稱時間復(fù)雜度。 常見的時間復(fù)雜度有:常數(shù)階O(1),對數(shù)階O(log2n),線性階O(n), 線性對數(shù)階O(nlog2n),平方階O(n2),立方階O(n3),…, k次方階O(nk),指數(shù)階O(2n)。隨著問題規(guī)模n的不斷增大,上述時間復(fù)雜度不斷增大,算法的執(zhí)行效率越低。 空間復(fù)雜度
其計算和表示方法與時間復(fù)雜度類似,一般都用復(fù)雜度的漸近性來表示。同時間復(fù)雜度相比,空間復(fù)雜度的分析要簡單得多。
算法設(shè)計的方法 另外,對于算法的設(shè)計,通常有以下幾種方法。
這些方法在此就不深入講解了,因為每一個都可以單獨拿出長長的一大篇文章來講解,不過,我后面會繼續(xù)深入普及這方面的知識的。 算法實現(xiàn)的方法 除了了解到算法的常見設(shè)計方法,那么還有哪些常見的實現(xiàn)方法呢。
好了講了這么多理論,還是用一個例子來解釋下算法到底是什么。 求最大公約算法 問題: 求兩個自然數(shù)的最大公約數(shù) 設(shè)兩個變量M和N 解題步驟: 1.如果M <> 2.M被N除,得到余數(shù)R 3.判斷R=0,正確則N即為“最大公約數(shù)”,否則下一步 4.將N賦值給M,將R賦值給N,重做第一步。 代碼實現(xiàn) void swapi(int *x, int *y) { int tmp = *x; *x = *y; *y = tmp; }int gcd(int m, int n) { int r; do { if (m <> swapi(&m, &n); r = m % n; m = n; n = r; } while (r); return m; } 好了就講這么多了,如果有什么問題可以在下面評論或者發(fā)私信給我。 參考文章
|
|