You are on page 1of 9

CK6126 康秩群

計算機概論 Computer Concepts


- Algorithms, Data Structure

演算法,就是解決問題的方法,而在資訊科學中,特指能夠讓電腦來運算的一套方法;資料
結構則是在電腦中適當地存放資料,讓程式有效率地處理。某個電腦科學家曾經說過:「程
式 = 資料結構 + 演算法」,所以唯有使用好的資料結構和演算法,才能設計出好的程式。

Algorithms 演算法

演算法的的必備條件

1. 輸入(Input):接受零或數個輸入。(若輸入資料寫死於演算法中為 Output only)

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 為底

空間複雜度空間複雜度為演算法執行過程中瞬間使用的最大存儲空間,通常也使用漸進式表
示法。

這樣考:

1.請問平常一個演算法如果有 的運算時間複雜度可以用下列何者表示 【97 軟設】


(A) Θ(n4) (B) O(n3) (C) Θ(n2) (D) Θ(n5)

2.以下等式哪一項是錯的: 【95 全國】

(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(桶子)。
※斜體標記者為穩定排序法,排序鍵值相同時,排序後元素順序與原順序相同。

氣泡排序法平常要讓氣泡怎麼飄隨便你,但出現在題目一律如下運作(以由小到大為例):

for i ← 1 to length[A] do for j ← 1 to


length[A] – i do if A[j] > A[j+1] then
exchange A[j] ↔ A[j+1]
{這虛擬碼長得好像 Pascal XDD}

也就是每一循環都把未排序陣列裡的最大值推到最後面(若遞減排序則為最小值)。

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

答案:1.(C) 2. (Insertion Sort)

Binary Search 二分/二元搜尋

詳見皮神講義,常考「在 n 筆資料中搜尋最多需比較幾次」。

Ans: [log2n]+1 次 (不必背,用 1、2、3、4、5 推一下即可)

這樣考:

1.在 250 筆排序完成的資料當中,以二元搜尋法(binary search)尋找某一筆資料時,至多只要比較幾次

即可找到? (A) 6 次 (B) 7 次 (C) 8 次 (D) 9 次 【

96 軟設】

2.若某排序好的資料(sorted data)用二分搜尋法(binary search)最多比較 k 次就可以找到指定的資料,則


此排序好的資料最多會有 項。 【
93 北市】答案:1.(C) 2. 2k - 1

其他演算法可能會丟給你一些奇怪的演算法,或從虛擬碼判斷是何種演算法。

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)

Data Structure 資料結構


Stack 堆疊詳見姜神講義。資料先進後出,遞迴函數會使用系統堆疊,欲取代遞迴也使用堆疊

這樣考:

1.堆疊運作包含了 push (輸入)及 pop(輸出)兩個函數,若依序 push 1、2、3、4、5 等五個數字,輸

入過程中亦可 pop,則一個可能的輸出順序是 (A) 14235 (B) 42531 (C) 23154 (D) 35412 【96 北市】

2.已知有一堆疊的初始內容為{A, P},頂端指向 A,請問經一連串的動作【pop(), push(E),

pop(), push(B), push(R)】且無發生錯誤,最後堆疊的內容為何? 【95 軟

設】

(A) {E, B, P} (B) {R, B, P} (C) {E, B, R, P} (D) {B, R, A, P} 答案:1.(C)


2.(B)
Queue 佇列

詳見姜神講義。資料先進先出,排隊等待(輸入串流、印表機工作等)皆屬於佇列。

97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群

這樣考:

1.有一個佇列 Queue 初始時為空的,接著執行以下動作:AddQ A; AddQ B; AddQ C; DeleteQ;

AddQ D; AddQ E; DeleteQ 請問最後一個 DeleteQ 會取出何值? (A) E (B) D (C) C (D) B

答案:1.(D)

【95 軟設】 Linked List 鏈結串列

有順序的串列,每個節點包含本身的資料和指向下一個節點的指標,尾端則指向 NULL。
便於插入和刪除資料,通常使用動態配置 struct 來實作(或 STL…),走訪時只能順著鏈結移動

• 單向鏈結串列: 圖 片

來源:英文維基百科

• 雙向鏈結串列:

• 環狀鏈結串列:

這樣考:

1.對於單向鏈結串列(singly linked list)而言,下列何種操作最沒有效率? 【94 軟設】

(A)在鏈結指標所指節點與上一節點間插入一新的節點 (B)在鏈結指標所指節點與下一節點間插入一

新的節點 (C)存取目前指標所指向之節點 (D)將鏈結指標移動到下一個節點

2.考慮如下圖所示的單連結串列,其中 h 指到的是第一項,而 t 所指到的是最後一項,請問下列哪

些運算時間和整個串列的長度有關? 【91 全國】

(A)刪除第一項 (B)在第一項前面再加一項 (C)刪除最後一項 (D)在最後一項後面再加一項

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)的方式拜訪同一棵

樹所得到的結果應為 。 【95 北市】

2.下圖顯示的二元樹(binary tree),其中序(in-order)與後序(post-order)探訪(traversal)結果分別為:

中序 (1) 。後序 (2) 。 【94 北市】

A
B C

D E

F G H

I J 答案:1. D、B、E、F、C、A 2.(1) FDIGBAEJHC (2) FIGDBJHECA

運算樹也有可能,給你的是一串算式,要你找出前序中序後序。不要慌,就跟平常的一樣,

它轉換成運算樹,再走一遍即可,記得運算樹是唯一的,且所有運算元都在葉子上喔。

亦可利用括號法,將優先順序高的運算式括起來,用運算子取代左括號為前序,放到右

97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群

括號即後序啦!如: 1 + 2 * 3 - 4 / 5 → ( ( 1 + ( 2 * 3 ) ) - ( 4 / 5 ) )
→前序:- + 1 * 2 3 / 4 5
→後序:1 2 3 * + 4 5 / -

這樣考:

1.下列何者為中置式(infix expresion)A-(B+C)*(D/E)的後置式(postfix expressions)? 【95 北市】


(A) A-BC+DE/* (B) ABC+*DE/- (C) ABC+DE/*- (D) ABC+D/*E-
2.一算式的前序表示法(prefix expression)為:-a/*b+cde,請問當 a=10, b=5, c=3, d=1, e=4 時的運算結

果為何? (A) 3 (B) 4 (C) 5 (D) 6。 【92 軟設】答案:1.(C) 2.(C)

Heap 堆積詳見姜神講義。父節點恆大於等於(Max-Heap)或小於等於(Min-Heap)子節點,便於尋找
極值。

這樣考:

1.有一種資料結構其為樹狀結構且在任何位置中其父節點的值恆大於子節點的值? 【97、96 軟設】

(A)二元樹(Binary Tree) (B)二元搜尋樹(Binary Search Tree) (C)堆(Heap) (D)堆疊(Stack)。

2.將一個元素 x 加入一個具有 7 個元素的堆積(heap)至多需要幾次比較?(A)1(B)2(C)3(D)4【94 全國


3.下列資料結構何者最適合用來挑選最小(或最大)的資料 【91 軟設】

(A)堆疊(stack) (B)佇列(queue) (C)錐形結構(heap) (D)樹狀結構(tree) 答案:1.(C)


2.(C) 3.(C)
Graph 圖

詳見姜神講義。圖由點和邊所組成,要熟悉各種名詞定義及性質。

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

答案:1.5 2.(C) 3.(A)


Hash /

一種將資料經某函數轉換後丟到表格中的方法(碰撞時有各種處理),搜尋時十分迅速。

這樣考:

1.宣告一個環狀陣列 a[13],使用雜湊函數(hash function)來存放數字,函數為 h(k)=k%13,如果有碰

撞(collision)就往下找空間放置,請問如果輸入順序為 53,46,37,20,44,13,77,27,4,84,68,65,47,則置於

a[8]的數字為何? (A) 13 (B) 20 (C) 44 (D) 47 【96 全國】 2.在資訊安全技術中常用的雜湊(hash)

函數,下列敘述何者錯誤? 【96 軟設】

(A)雜湊值的大小通常是固定的 (B)相同資料所產生的雜湊值必相同

(C)不同資料所產生的雜湊值一定不會相同 (D)無法由所得的雜湊值反向得到原始的資料。

3.欲於 N 筆資料中搜尋是否有 x 存在,若採用雜湊法(Hashing),最佳狀況下,需要比對幾次才能找

到答案? (A) 1 次 (B) 2 次 (C) 3 次 (D) 4 次 【91 軟設】


97 建中資訊科校內培訓講義-計算機概論-9
CK6126 康秩群

答案:1.(B) 2.(C) 3.(A)

97 建中資訊科校內培訓講義-計算機概論-9

You might also like