大話資料結構 第2章 演算法

2021-10-16 07:16:16 字數 3562 閱讀 7162

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所佔儲存空間的函式。

筆記 大話資料結構 第2章 演算法

寫乙個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 ...

大話資料結構 第5章 串

僅作為筆記 串是由零個或多個字元組成的有限序列,又名字串。兩個串比較大小 給定兩個串 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 ...

大話資料結構 Chapter 2 演算法

演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作 演算法具有五個基本特性 輸入 輸出 有窮性 確定性和可行性。2.2.1 輸入輸出 演算法有0個或多個輸入,至少有乙個或多個輸出。2.2.2 有窮性 有窮性 指演算法在執行有限的步驟之後,自動結束而不會...