資料結構與演算法是程式設計實踐中最基本的內涵。程式能否快速而有效地完成預定的任務,取決於是否選對資料結構,而程式是否能清楚而正確地把問題解決,則取決於演算法。
演算法(algorithm)是指令的集合,是為了解決特定問題而規定的一系列操作。它是明確定義的可計算過程,以乙個資料集合作為輸入,並產生乙個資料集合作為輸出。
演算法5項特性:
1、輸入(input):0 個或多個輸入資料,這些輸入必須有清楚的描述或定義。
2、輸出(output):至少會有乙個輸出結果,不可以沒有輸出結果。
3、明確性(definiteness):每乙個指令或步驟必須是簡潔明確的。
4、有限性(finiteness):在有限步驟後一定會結束,不會產生無限迴圈。
5、有效性(effectiveness):步驟清楚且可行,能讓使用者用紙筆計算而求出答案。
對乙個程式(或演算法)效能的評估,經常是從時間與空間兩種因素來進行考慮的。時間方面是指程式的執行時間,稱為時間複雜度(time complexity)。空間方面是指程式在計算機記憶體所佔的空間大小,稱為空間複雜度(space complexity)。
在乙個完全理想狀態下的計算機中,我們定義t(n)來表示程式執行所要花費的時間,其中n代表資料輸入量。當然程式的執行時間(worse case executing time)或最大執行時間是時間複雜度的衡量標準,一般以 big-oh 表示。
由於分析演算法的時間複雜度必須考慮它的成長比率(rate of growth),往往是一種函式,而時間複雜度本身也是一種"漸近表示"(asymmetric notation)。
o(f(n))可視為某演算法在計算機中所需執行時間不會超過某一常數倍的f(n),也就是說當某演算法的執行時間t(n)的時間複雜度(time complexity)為o(f(n))(讀成big-oh of f(n)或order is f(n)),意思是存在兩個常數 c 與 n0,則若n >= n0,則 t(n)
時間複雜度只是執行次數的乙個概略的量度層級,並非真實的執行次數。
big-oh是一種用來表示最壞執行時間的表現方式,它也是最常用於描述時間複雜度的漸近式表示法。
常見的big-oh有下列幾種:
對於n >= 16 時,時間複雜度比較如下:
ω也是一種時間複雜度的漸近表示法,如果說big-oh是執行時間量度的最壞情況,那麼ω就是執行時間量度的最好狀況。
ω的定義:對f(n) = ω(g(n))(讀作big-omega of g(n)),意思是存在常數c和n0,對所有的n值而言,n>=n0時,f(n)>=cg(n)均成立。
θ是一種比big-o與ω更精確的時間複雜度漸近表示法。
θ的定義:f(n)=θ(g(n))(讀作big-theta of g(n)),意思是存在常數c1、c2、n0,對所有的n>=n0時,c1g(n)
演算法效能分析
重新學習乙個 對於乙個程式 效能來說 的評估,主要從時間和空間來進行考慮的。時間是指程式執行的時間,稱為時間複雜度,空間方面則是指程式在計算機記憶體所占用的時間大小,稱為空間複雜度。一些小技巧 少用 多層迴圈巢狀,據一同學透析他接盤的一老專案,發現了乙個套了至少五六層迴圈,且每層迴圈中 包含了 數量...
演算法效能分析
一般我們從時間複雜度和空間複雜度兩個方面對演算法的效率進行分析。一.時間複雜度 time complexity 我們通常將時間複雜度記為 t n o f n 我們將此式分為三個部分進行講述。t n 演算法的漸近時間複雜度,簡稱時間複雜度。f n 演算法中語句中執行次數最多的語句的頻度。o 計算數量級...
排序演算法效能分析
一 基於比較的排序演算法 1.插入排序法 直接插入排序,希爾排序,不常用的 tree sort library sort patience sorting 2.交換排序 氣泡排序,快速排序,計數排序 3.選擇排序 直接選擇排序,堆排序 4.歸併排序 歸併排序 二 不基於比較的排序演算法 基數排序,桶...