Download presentation
1
期中考試解答 張啟中
2
1. Ackermann’s function int Ack(int m, int n) { if (m == 0)
return n+1; } else if (n==0) return Ack(m-1,1); return Ack(m-1, Ack(m, n-1));
3
2. Compute the Address of Array
由下圖可知,對於陣列元素 A[i][j][k] 而言,其位址為 α+(i-1)*200 + (j-1)*20 + (k-1) 所以 A[3][7][2] = α = α+521 A[1][1][1] A[1][1][2] A[1][1][3] ‥‥ A[1][1][19] A[1][1][20] α α+1 α+2 α+18 α+19 A[1][2][1] A[1][2][2] A[1][2][3] ‥‥ A[1][2][19] A[1][2][20] α+20 α+21 α+22 α+38 α+39 A[1][10][1] A[1][10][2] A[1][10][3] ‥‥ A[1][10][19] A[1][10][20] α+180 α+181 α+182 α+198 α+199 A[2][1][1] A[2][1][2] A[2][1][3] ‥‥ A[2][1][19] A[2][1][20] α+200 α+201 α+202 α+218 α+219
4
3. Infix Translating to Postfix(1)
A / (B – C) + D * (E – A) * C / F A / BC- + D * EA- * C / F ABC-/ + DEA-* *C /F ABC-/ + DEA-*C* /F ABC-/ + DEA-*C*F/ ABC-/DEA-*C*F/+
5
3. Infix Translating to Postfix(2) A / (B – C) + D * (E – A) * C / F
Input Token Stack Output None Empty A / ( / ( B AB - / ( - C ABC ) ABC- + ABC-/ (因為 + 小於等於 /)
6
3. Infix Translating to Postfix(2) A / (B – C) + D * (E – A) * C / F
Input Token Stack Output D + ABC-/D * + * ( + * ( E ABC-/DE - + * ( - A ABC-/DEA ) ABC-/DEA- ABC-/DEA-* (注意顏色) C ABC-/DEA-*C
7
3. Infix Translating to Postfix(2) A / (B – C) + D * (E – A) * C / F
Input Token Stack Output / + / ABC-/DEA-*C* F ABC-/DEA-*C*F None + ABC-/DEA-*C*F/ Empty ABC-/DEA-*C*F/+
8
4. Amount of Permutations of Stack
Please see book p130, exercises 2 從右邊依序輸入 1…n 的數,問總共有幾種輸出情形?有那幾種情形不可能出現? 1 …. n
9
4. Amount of Permutations of Stack
All permutations. Impossible permutations. 上面紅色的部分為不可能的組合 Recursive formula Bn = B0Bn-1 + B1Bn-2 + …. + Bn-2B1 + Bn-1B0
10
5. Queue Implementation I: Linear Array
用 Linear Array 實作 Queue,在新增時會面臨兩種最壞的情況。 解決方法:依序搬移 Queue 中的元素位置(case 2 需先刪除第一個元素),但其代價需 O(MaxSize) …… 1 2 3 4 MaxSize -1 Case 1: front = 3 rear = MaxSize-1 …… 1 2 3 4 MaxSize -1 Case 2: front = -1 rear = MaxSize-1
11
5. Queue Implementation II: Circular Array
用 circular Array 實作 Queue,會面臨無法判斷 Queue 是空的或是滿的問題。因為 front == rear 時 Queue 可能為空,也可能為滿。 如何解決? front = rear = 3 Empty front = rear = 3 Full 3 3 4 4 ● 2 ● 2 1 ● 1 ● MaxSize-1 MaxSize-1
12
5. Queue Implementation II: Circular Array
解決方法,有二種 Method 1:犧牲空間 任何時候只允許 MaxSize-1 個元素在 Queue 中 Method 2:犧牲時間 增加一個變數,記錄上一次的動作。 因為 Queue 元素的新增與刪除非常頻繁,所以我們較常採用 Method 1 既然是考試,同學最好將二種方法詳細描述!
13
6. Linked Lists (1)Singly Linked Lists (2) Circular Lists first first
BAT CAT EAT WAT first (2) Circular Lists BAT CAT EAT WAT first
14
6. Linked Lists (3) Doubly Linked Lists Head Node LeftLink data
RightLink - BAT CAT EAT
15
7. Generalized Lists A= (a, ( b, c) ) F a T A F b F c A= (a, ( b, c) )
16
7. Generalized Lists B = (a, ( b, c), (d, e), f) F d F e F a T T F f B
F a T T F f B F b F c
17
8. Failure Function 1 2 3 4 5 b a a a a b -1 -1 -1 -1 -1 1 2 3 4 5 6 7
1 2 3 4 5 b a a a a b -1 -1 -1 -1 -1 1 2 3 4 5 6 7 a b c c a b a b -1 -1 -1 -1 1 1
18
9. Time Complexity m × n × p O(n3)
1 void prod(matrix a, matrix b, matrix c, int m, int n, int p) 2 { 3 for (int i=0; i<m; i++) for(int j=0;j<p; j++) { c[i][j]=0 for (int k=0; k<n; k++) c[i][j] += a[i][k] * b[k][j]; } 10 } m × n × p O(n3)
19
10. Performance Analysis Conclusion
asymptotic 式的演算法分析技巧 ,雖可提供我們評判演算法的優劣,但是在實際運用上必須進一步分析。比方說:演算法 A 需要 103nlogn 的步驟、演算法 B 需要 n2 的步驟。分析的結果演算法 A 是 O(nlogn) ,而演算法 B 是 O(n2),但這並不是說演算法 A 一定比演算法 B 好 — 當 n 不大於103 的時候,演算法 B 就比演算法 A 有效率,因此在這個情形下,我們應該選擇演算法 B 而不是演算法 A。 換句話說,在選擇演算法時,除了考慮其 order 外,也必須考慮所處理問題的大小(即 n )。
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.