3 演算法設計的要求
4 演算法效率的度量方法
5 函式的逐漸增長
6 演算法時間複雜度
7 常見的時間複雜度
8 最壞情況與平均情況
9 演算法空間複雜度
總結:演算法的定義:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每一條指令表示乙個或者多個操作。
演算法的特性:輸入、輸出、有窮性、確定性、可行性。
演算法的設計要求:正確性、可讀性、健壯性、高效率和低儲存。
演算法的度量方法:事後統計方法、事前分析估算方法。
《大話資料結構》第2章閱讀筆記。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每一條指令表示乙個或者多個操作。
五大基本特性:輸入、輸出、有窮性、確定性和可行性。
演算法具有零個或者多個輸入,至少有乙個或者多個輸出。
指演算法在執行完有限的步驟後,自動結束而不會出現無限迴圈,並且每個步驟在可接受的步驟內紙箱完成。
演算法的每乙個步驟都具有確定的含義,不會出現二義性。
演算法的每一步驟都是可行的,也就是說,每一步都能通過執行有限次數完成。
演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能夠正確反映問題的需求、能夠得到問題的正確答案。
演算法設計的另一目的是為了便於閱讀、理解和交流。
當輸入資料不合法時,演算法也能作出相關處理,而不是產生異常或者莫名奇妙的結果。
設計演算法要盡量滿足時間效率高和儲存量低的需求。
在計算機程式編制前,依據統計方法對演算法進行估算。
基本操作的數量必須表示成輸入規模的函式。
超過整數n,f(n)總是大於g(n),f(n)的增長漸進快於g(n).
在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級別。
演算法的時間複雜度,也就是演算法的時間度量,記作:t(n)=o(f(n))。他表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模的n的摸個函式。
使用大寫o()來體現演算法時間複雜度的記發,稱之為大o記法。
一般情況下,隨著n的增長,t(n)增長最慢的演算法是最優演算法。
推導大o階:
用常數1以取代執行時間中的所有加法常數。
在修改後的執行次數函式中,只保留最高端項。
如果最高端項存在且不是1,則去除與這個項相乘的常數。
得到的結果就是大o階。
執行次數函式是f(n)=3,根據第一條,時間複雜度直接記為o(1)
關鍵就是分析迴圈結構的運**況。
o(n)
for
(int i =
0; i)
int count =1;
while
(count < n)
設迴圈次數為想,則2x=
n2^x=n
2x=n
--> x=l
og2n
x=log_2n
x=log2
n,所以 o(l
og2n
)o(log_2n)
o(log2
n)o(n
2)
o(n^2)
o(n2
)
int i ,j;
for(i =
0; i < m; i++
)}
&o(m x n)&
int i ,j;
for(i =
0; i < m; i++
)}
執行次數函式
階非正式術語
12
1212
o (1
)o(1)
o(1)
常數階2n+
32n+3
2n+3
o (n
)o(n)
o(n)
線性階3n2
+2n+
13n^2+2n+1
3n2+2n
+1o (n
2)
o(n^2)
o(n2
)平方階
5 lo
g2n+
205log_2n+20
5log2
n+20
o (l
ogn)
o(log n)
o(logn
)對數階
2 n+
3nlo
g2n+
192n+3nlog_2n+19
2n+3nl
og2
n+19
o (n
logn
)o(n log n)
o(nlog
n)n lo
gn
nlogn
nlogn階
6 n3
+2n2
+3n+
46n^3 + 2n^2 + 3n + 4
6n3+2n
2+3n
+4o (n
3)
o(n^3)
o(n3
)立方階
2
n2^n
2no (2
n)
o(2^n)
o(2n
)指數階
o (1
) n) n2 ) logn ) nlog n) n3 ) 2n ) n! ) nn )o(1) < o(n) < o(n^2) < o(log n) < o(n log n) < o(n^3) < o(2^n) < o(n!) < o(n^n) o(1) n)n2 )logn )nlog n)n3 )2n)n! )nn)通常提到的執行時間都是最壞情況的執行時間。 平均情況是期望的執行時間。 空間開銷換取計算時間 演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法空間複雜度的計算公式記作:s(n )=o( f(n) )s(n)=o(f(n)) s(n)=o (f(n )),其中n為問題規模,f(n)為語句關於n所佔儲存空間的函式。 寫乙個1 2 3 100求和程式int i,sum 0,n 100 執行了1次 for i 1 i n i 執行了n 1次 printf d sum 執行了1次 這樣可能不高效,高斯同學是這樣想的 int i,sum 0,n 100 執行了1次 sum 1 n n 2 執行了1次 printf d ... 僅作為筆記 串是由零個或多個字元組成的有限序列,又名字串。兩個串比較大小 給定兩個串 s a1 a2 an t b1 b2 bm 當滿足以下條件之一時,sn m,且 ai bi i 1,2,3,n 存在某個k min m,n 使得ai bi i 1,2,k 1 ak bk。串的抽象資料型別 adt ... 演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作 演算法具有五個基本特性 輸入 輸出 有窮性 確定性和可行性。2.2.1 輸入輸出 演算法有0個或多個輸入,至少有乙個或多個輸出。2.2.2 有窮性 有窮性 指演算法在執行有限的步驟之後,自動結束而不會...筆記 大話資料結構 第2章 演算法
大話資料結構 第5章 串
大話資料結構 Chapter 2 演算法