Professional Documents
Culture Documents
演算法,就是解決問題的方法,而在資訊科學中,特指能夠讓電腦來運算的一套方法;資料
結構則是在電腦中適當地存放資料,讓程式有效率地處理。某個電腦科學家曾經說過:「程
式 = 資料結構 + 演算法」,所以唯有使用好的資料結構和演算法,才能設計出好的程式。
Algorithms 演算法
演算法的的必備條件
2. 輸出(Output):至少產生一個以上的輸出。
3. 明確性(Definiteness):演算法的每個步驟必頇清楚且明確。
4. 有限性(Finiteness):能在有限的步驟內結束,即有時間複雜度的上界。
5. 有效性(Effectiveness):每個步驟都是可實行的,且能用人工推算出結果(不管時間…)
。
演算法表示法
多用虛擬碼或流程圖來表示。前者平常想必經常看到;下列則是常見的流程圖圖形:
圖片來源 http://140.111.1.12/senior/computer/ks_ks/book/algodata/algorithm/algo3.htm
時間複雜度
時間複雜度是指完成演算法所需的時間,一般為輸
入資料量 n 的函數 T(n),以「漸進式表示法」表示。
• O(Big-O):演算法時間上界。可找到 f(n)的某個
常數倍, n 大於某數時皆≧T(n),則 T(n)=O(f(n))
。
• Ω(毆買尬):演算法時間下界。可找到 f(n)的某
個
常數倍,n 大於某數時皆≦T(n),則 T(n)=Ω(f(n))
。
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
• Θ(西塔):上界+下界。n 大於某數時,f(n)某個常
數倍≦T(n),另一常數倍≧T(n)則 T(n)=Θ(f(n))。
Θ 是最為精確的表示法,但 O 較常使用,因為我們關心的是它的上限。
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)
※在此 log 以 2 為底
空間複雜度空間複雜度為演算法執行過程中瞬間使用的最大存儲空間,通常也使用漸進式表
示法。
這樣考:
(A) 3n2 – n + 16 = O(n2) (B) 3n2 = O(n3) (C) 2nlogn = O(n1.5) (D) 2n1.001 = O(nlogn) 答案:1.(A)
2.(D)
Sort 排序
詳見皮神講義,頇熟悉各種排序法,了解其時間複雜度(平均、最差、如何避免最差)、是
否穩定(Stable),並親自撰寫。看到某種排序法的虛擬碼或 Code 能推出是何種排序。
• 平均 O(n2):Bubble(氣泡/泡沫)、Insertion(插入)、Selection(選擇)、Exchange(交換)。
• 平均 O(nlogn):Quicksort(快速)、Merge(合併)、Heap(堆積)、Shell(謝爾/希爾)。
• 其他(O(n)或接近):Counting(計數)、Radix(基數)、Bucket(桶子)。
※斜體標記者為穩定排序法,排序鍵值相同時,排序後元素順序與原順序相同。
氣泡排序法平常要讓氣泡怎麼飄隨便你,但出現在題目一律如下運作(以由小到大為例):
也就是每一循環都把未排序陣列裡的最大值推到最後面(若遞減排序則為最小值)。
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
這樣考
1. 3,5,6,2,4
(A) 6,5,4,2,3 (B) 2,3,4,5,6 (C) 3,2,4,5,6 (D) 6,5,4,3,2 【95
2. ,
【93
詳見皮神講義,常考「在 n 筆資料中搜尋最多需比較幾次」。
這樣考:
96 軟設】
其他演算法可能會丟給你一些奇怪的演算法,或從虛擬碼判斷是何種演算法。
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
這樣考
1. (Monte Carlo)
1000 (A[1],A[2] A[1000]) A
Max 500 【93
Max 。
2. 【93
20
答案:1. 1/2 2. (GCD)
這樣考:
入過程中亦可 pop,則一個可能的輸出順序是 (A) 14235 (B) 42531 (C) 23154 (D) 35412 【96 北市】
設】
詳見姜神講義。資料先進先出,排隊等待(輸入串流、印表機工作等)皆屬於佇列。
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
這樣考:
AddQ D; AddQ E; DeleteQ 請問最後一個 DeleteQ 會取出何值? (A) E (B) D (C) C (D) B
答案:1.(D)
有順序的串列,每個節點包含本身的資料和指向下一個節點的指標,尾端則指向 NULL。
便於插入和刪除資料,通常使用動態配置 struct 來實作(或 STL…),走訪時只能順著鏈結移動
。
• 單向鏈結串列: 圖 片
來源:英文維基百科
• 雙向鏈結串列:
• 環狀鏈結串列:
這樣考:
(A)在鏈結指標所指節點與上一節點間插入一新的節點 (B)在鏈結指標所指節點與下一節點間插入一
h t
答案:1.(A) 2.(C)
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
Tree 樹
詳見皮神講義。長得像一棵樹的東西,不能繞圈圈,通常考的是二元樹,所以都很二元。
這樣考
1. 1024 (1) (edge)
(2) ( 0) 【94
2.下圖 A (Leftmost-Child-Right-Next-Sibling)方法,
B (1)、(2) (3)、(4)、(5) 。 【94 北市
A B A
C D E F (1) (2)
G H I G (3) E
A (4) I (5)
B
答案:1.(1)1023 (2)10 2.CBDHF
樹的走訪詳見皮神講義。前序:中→左→右;中序:左→中→右;後序:左→右→中。(中的
位置)
這樣考:
1.若一棵二元樹用中序(inorder)的方式拜訪每一個節點所得到的結果為 D、B、A、E、C、F,用前
序(preorder)拜訪的方式得到的結果為 A、B、D、C、E、F,則用後序(postorder)的方式拜訪同一棵
2.下圖顯示的二元樹(binary tree),其中序(in-order)與後序(post-order)探訪(traversal)結果分別為:
A
B C
D E
F G H
運算樹也有可能,給你的是一串算式,要你找出前序中序後序。不要慌,就跟平常的一樣,
它轉換成運算樹,再走一遍即可,記得運算樹是唯一的,且所有運算元都在葉子上喔。
亦可利用括號法,將優先順序高的運算式括起來,用運算子取代左括號為前序,放到右
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
括號即後序啦!如: 1 + 2 * 3 - 4 / 5 → ( ( 1 + ( 2 * 3 ) ) - ( 4 / 5 ) )
→前序:- + 1 * 2 3 / 4 5
→後序:1 2 3 * + 4 5 / -
這樣考:
Heap 堆積詳見姜神講義。父節點恆大於等於(Max-Heap)或小於等於(Min-Heap)子節點,便於尋找
極值。
這樣考:
詳見姜神講義。圖由點和邊所組成,要熟悉各種名詞定義及性質。
97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群
這樣考
1.
。 【93
2. (graph)
(degree) (A)奇數 (B)3 (C) (D) 【92
3. , 請問 A 點到 J ?【91 軟設
(A) 22 (B) 23 (C) 26 (D) 28
一種將資料經某函數轉換後丟到表格中的方法(碰撞時有各種處理),搜尋時十分迅速。
這樣考:
撞(collision)就往下找空間放置,請問如果輸入順序為 53,46,37,20,44,13,77,27,4,84,68,65,47,則置於
(A)雜湊值的大小通常是固定的 (B)相同資料所產生的雜湊值必相同
(C)不同資料所產生的雜湊值一定不會相同 (D)無法由所得的雜湊值反向得到原始的資料。
97 建中資訊科校內培訓講義-計算機概論-9