演算法简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
p20-14
難解問題 (Intractable Problem)
❖ 若問題P無法以多項式時間演算法解得答案, 則問題P無法於電腦上在合理時間內求得答案, 稱問題P為難解問題,或NP-Complete問題
Example ❖ 旅行推銷員問題 (Travelling Salesman
Problem) ❖ 圖形塗色問題 (Graph-Coloring Problem) ❖ 裝箱問題 (Bin-Packing Problem)
時間複雜度為指數函數階次的演算法在資料量足 夠多時需要相當長的時間才能解得答案
p20-11
多項式時間演算法 (Polynomial-Time Algorithm)
❖ 時間複雜度是O(p(n))的演算法,其中p(n)為n的 多項式函數
電腦上可解(Tractable)的問題 ❖ 能用多項式時間演算法解得答案的問題,即能用
p20-4
時間複雜度 (cont.)
❖ 演算法 A 的最差狀況時間複雜度 (Worst-Case Time Complexity) T(Di)(1 i m)中最大者,即max1 i m { T(Di) }
❖ 演算法A的一般狀況時間複雜度 (Average-Case Time Complexity) T(Di) (1 i m)的平均值或期望值(在某機率假 設下)
為排序 D(1) 至 D(3) 的數及排序 D(5) 至 D(7) 的數的兩個子問題
❖ 待解決子問題題後,可 依序將答案組合起來, 就是原來的答案。
❖ 而分割後的子問題仍是 排序問題可再利用前一 段敘述的方法排序之
D(1) D(2) D(3) D(4) D(5) D(6) D(7) 4352671 分割
n2為n3的漸近下限。
p20-8
真正階次 (Exact Order)
❖ 若存在某固定正變數 c 及某非負整數 m 使得對所有 n m,不等式 g (n) c f (n) 都成立,則 g (n) = ( f (n)),稱 f (n) 為 g (n) 的漸近下限
Example ❖ N2+10N = (N2),因為 N2+10N = O(N2) 且 N2+10N =
O (1)
O (log2n)
p20-13
最佳演算法 (Optimal Algorithm)
❖ 若可解問題P的演算法A的時間複雜度為t,而解問題P的演 算法最少需要t時間,則稱演算法A是解問題P的最佳演算法
❖ 例如:兩兩合併排序法是最佳排序演算法 排序n個數的問題最少需要O(nlog2n)時間 兩兩合併排序法的時間複雜度是O(nlog2n)
❖ 首先觀察第一個數4在最後排序好的序列中應是第四 位﹐即應放在D(4)
❖ 如果能將不大於4的數放在D(1)至D(3)中﹐而不小於 4的數放在D(5)至D(7)中﹐則只要再分別排序好D(1) 至D(3)的數及D(5)至D(7)內的數﹐那原來排序問題 就解決了
p20-18
二分搜尋法(cont.)
方法 ❖ 令i=2﹐j =7 ❖ 從D(i)開始向右找到第一個不小於D(1)的數﹐
指數函數 (Exponential Function) ❖ 例如:f(n) = cp(n),其中c為常數,p(n)為n的
多項式函數 (Polynomial Function) (如n, n2 + 10,log2n,nlog2n) Example:2n、3n、4logn等函數 ❖ 函數值上升速度相當快
p20-24
貪婪策略-實例說明Fra bibliotek❖ 假設有5個顧客A,B,C,D, E幾乎同時到達銀行櫃檯, 其所需服務時間如表所示
❖ 銀行櫃檯將依序服務B,D, E,C,A
❖ 顧客在櫃檯等待的平均時 間為 [1 + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4) + (1 + 2 + 3 + 4 + 5) ] / 5 = 7
p20-15
20.2 個別擊破策略(Divide-andConquer Method)
❖ 將原來的問題P分解成2個或多個子問題 ❖ 待個別解決這些子問題後再經由合併 (merge) 處
理﹐整理出原來問題的答案﹐ ❖ 因為分割後的子問題是資料量較小的問題P,因此
解子問題時又可遞迴應用上述的方法﹐經由分割及 合併的過程得到解答
❖ 將不小於4的資 料放其右方
D(1) D(2) D(3) D(4) D(5) D(6) D(7)
4
3
5
2
6
7
1
i=2
D(1) D(2) D(3)
4
3
5
i=3
D(1) D(2) D(3)
4
3
1
左右搜尋
D(4) D(5) D(6)
2
6
7
交換D(7)與D(3)
D(4) D(5) D(6)
2
6
7
j=7
D(7) 1
231
4
分割
675 分割
1
2
3
4
5
6
7
合併
合併
123
4
567
合併
1234567
p20-21
快速排序法-程式
❖ QSORT副程式以快速排序法對陣列D(M)至D(N)的元素排序
14
K = D(I)
1
SUB QSORT(M,N)
15
D(I) = D(J)
2
IF M > N THEN
16
D(J) = K
3
p20-6
漸近上限 (Asymptotic Upper Bound) O階次
❖ 如果存在某固定正實數 c 及某個非負整數 m 使得 對所有的 n m,不等式 g (n) c f (n) 都 成立,則 g (n) = O ( f (n)),稱 f (n) 為 g (n) 的漸近上限
Example: ❖ N2+10N = O(N2),因為當n 10 時,N2+10N 2N2 ❖ 稱N2為N2+10N的漸進上限
❖ Example:二分搜尋法,兩兩合併排序法
p20-16
兩兩合併排序法
❖ 一開始就將資料分割成兩 部份處理,然後再遞迴細 分各資料直至不能細分為 止
❖ 接著就兩兩合併成排序的 序列,慢慢的將分割的資 料合併成排序的序列,最 後得到所有資料的排序結 果
10 6 27 17 32 4 5 56
分割
10 6 27 17
N
1 2 4 8 16 32 64 128 256 512
logn
0 0.301029996 0.602059991 0.903089987 1.204119983 1.505149978 1.806179974
2.10720997 2.408239965 2.709269961
p20-10
指數函數分析
以i記錄其陣列的索引 ❖ 從D(j)開始向左找到第一個不大於D(1)的數﹐
以j記錄其陣列索引 ❖ 若i < j ,則交換D(i)與D(j)的內容,並繼續
前述的左右搜尋; ❖ 若i j,則交換D(1)與D(j)的內容,並停止搜

p20-19
二分搜尋法(cont.)
❖ 確定4的位置
❖ 將不大於4的資 料放其左方
電腦在合理時間內求得答案 ❖ 例如:排序及搜尋等問題
p20-12
排序法及搜尋法的時間複雜度
演算法 插入排序 氣泡排序 謝耳排序 兩兩合併排序 循序搜尋 二分搜尋
時間複雜度
最好狀況
最差狀況
O (n)
O (n2)
O (n)
O (n2)
O (n)
O (n2)
O (n) O (1)
O (nlog2n) O (n)
❖ 說“演算法A的時間複雜度為C”就是指其最差狀況時 間複雜度為C
p20-5
時間複雜度 (cont.)
範例 ❖ 若問題P之輸入資料量為 N 的樣本有D1 , D2 , D3 三
種,且 T(D1)=3 , T(D2)=N , T(D3)=N3 ❖ 演算法 A 的 最好狀況時間複雜度為 3 ❖ 演算法 A 的最差狀況為 N3 ❖ 演算法 A 的一般狀況為 (3+N+N3)/3 ❖ 稱演算法 A 的時間複雜度為 N3
(N2)。
p20-9
真正階次(cont.)
❖ 當n足夠大時,2n > n3 > n2 > nlogn > n > logn
n
2n
1
2
2
4
4
16
8
256
16
65536
32 4294967296
64 1.84467E+19
128 3.40282E+38
256 1.15792E+77
512 1.3408E+154
12
LOOP UNTIL D(J) <= K
26
END IF
13
IF I < J THEN
27
END SUB
p20-22
快速排序法(cont.)
快速排序法 ❖ 最差時間複雜度為O(n2) ,其中n為資料個數 ❖ 一般狀況時間複雜度為O(nlog2n) 個別擊破策略常用於計算幾何 (Computational
顧客 A B C D E
內容
❖ 前言 ❖ 20.1 演算法分析 ❖ 20.2 個別擊破策略 ❖ 20.3 貪婪策略 ❖ 20.4 動態規劃 ❖ 20.5 刪除與搜尋策略 ❖ 20.6 課後習題 ❖ 20.7 欲罷不能
p20-1
前言
演算法 (Algorithm) ❖ 電腦上解決問題的方法 ❖ 包括明確的輸出入資料和詳細且有限的執行步驟 ❖ 了解每個演算法在不同狀況下所花的時間,而從中挑選適合
n3
1 8 64 512 4096 32768 262144 2097152 16777216 134217728
f(n)
n2
nlogn
1 4 16 64 256 1024 4096 16384 65536 262144
0 0.602059991 2.408239965 7.224719896 19.26591972 48.16479931 115.5955183 269.7228761 616.5094311 1387.14622
D2 , ... , Di , ... , Dm 共 m 種 ❖ 令 T(Di) 表示當輸入資料為 Di 時演算法 A 要執行的運
算或步驟的總次數 ❖ 演算法 A 的最好狀況時間複雜度 (Best-Case Time
Complexity) T(Di)(1 i m)中最小的值,即min1 i m { T(Di) }
32 4 5 56
分割
10 6
27 17
32 4
5 56
分割
10 6 27 17 32 4 5 56
合併
6 10
17 27
4 32
56 5
合併
6 10 17 27
4 5 32 56
合併
4 5 6 10 17 27 32 56
p20-17
二分搜尋法
❖ 假設陣列D中依序放有4, 3, 5, 2, 6, 7, 1等七個 整數,目標是將這些數依小到大順序排序
I=M
17
ELSE
4
J=N+1
18
EXIT DO
5
K=D(M)
19
END IF
6
DO
20
LOOP
7
DO
21
K = D(M)
8
I = I+1
22
D(M) = D(J)
9
LOOP UNTIL D(I) >= K
23
D(J) = K
10
DO
24
QSORT(M,J-1)
11
J=J-1
25
QSORT(J+1,N)
j=7
D(7) 5
i=3
j=7
左右搜尋
D(1) D(2) D(3) D(4) D(5) D(6) D(7)
4
3
1
2
6
7
5
j=4
i=5
交換D(1)與D(4)
D(1) D(2) D(3) D(4) D(5) D(6) D(7)
2
3
1
4
6
7
5
p20-20
快速排序法(Quick Sort)
❖ 原來的排序問題可細分
Geometry) 的應用問題
p20-23
20.3 貪婪策略(Greedy Method)
❖ 每次的決策都是朝向目前“最好”的方向前進 ❖ 櫃檯服務問題
某一個銀行出納櫃檯要服務n位顧客,銀行的目標是希望顧 客在櫃檯等待的平均時間要最少
解決之道是每次都從尚未服務的顧客中,選擇需要服務時 間最短的顧客來服務,如此就可達到預期目標
p20-7
漸近下限 (Asymptotic Lower Bound) 階次
❖ 若存在某固定正變數 c 及某非負整數 m 使得 對所有 n m,不等式 g (n) c f (n) 都 成立,則 g (n) = ( f (n)),稱 f (n) 為 g (n) 的漸近下限
Example ❖ n3 = (n2),因為當n 1時,n31 n2,所以
的演算法以迅速得到答案 ❖ 演算法設計策略
p20-2
20.1 演算法分析
在電腦上解決問題的基本架構
❖ 演算法以程式描述後在電腦上執 行,資料輸入至程式後,經過程 式對資料的運算,最後產生解答
資料
演算法 (程式)
解答 圖 20.1
p20-3
時間複雜度 (Time Complexity)
❖ 假設演算法 A 能解問題P ❖ 問題P的輸入資料量為N ❖ 假設資料量為N的資料樣本 (Data Instance) 有 D1 ,
相关文档
最新文档