108 年 國立成功大學電腦與通信工程研究所甲組《資料結構》
第 1 題
Which of the following statements is(are) true?
(A) The best case time complexity of Bubble Sort is .
(B) Quick Sort sorts in place.
(C) The worst case time complexity of Quick Sort is .
(D) To HEAPIFY a max-heap runs in time.
(E) Heap Sort cannot sort in place.
登入後即可作答並保存紀錄。
核心觀念
本題考查各種排序法的:
- 最佳、最壞時間複雜度
- 是否為原地排序(in-place)
- Heapify 與 Build-Heap 的時間複雜度
- Big-O 與 Big-Omega 的意義
常見結論如下:
| 排序法/操作 | 最佳情況 | 最壞情況 | 是否原地 |
|---|---|---|---|
| Bubble Sort(具提前停止最佳化) | 是 | ||
| Quick Sort | 是 | ||
| Heap Sort | 是 | ||
MAX-HEAPIFY | — | — | |
BUILD-MAX-HEAP | — | — |
其中, 表示漸近上界, 表示漸近下界, 表示同時具有上下界。
解題方法
逐一檢查每個敘述是否符合上述定義與定理:
- 判斷 Bubble Sort 最佳情況的實際執行成本。
- 判斷 Quick Sort 的額外空間需求與分割方式。
- 使用 Quick Sort 最壞情況的遞迴式。
- 區分單一節點的
HEAPIFY與整體建堆BUILD-HEAP。 - 判斷 Heap Sort 是否需要額外陣列。
選項分析
(A) The best case time complexity of Bubble Sort is
正確。
在已排序的輸入上,若 Bubble Sort 使用「本輪沒有交換就提前停止」的最佳化版本,只需掃描一次陣列,確認沒有逆序相鄰元素:
因此最佳情況為:
由於 必然也是 ,所以「最佳情況時間複雜度是 」成立。
補充而言,若實作未使用提前停止最佳化,最佳情況會是 ;即使如此, 仍然屬於 。因此依照一般漸近分析,選項仍為正確。
(B) Quick Sort sorts in place
正確。
Quick Sort 的 partition 通常直接在原陣列內交換元素,不需建立與輸入陣列同樣大小的額外陣列,因此屬於原地排序。
其主要額外空間來自遞迴呼叫堆疊:
- 平衡分割時:約為
- 最壞分割時:約為
雖然遞迴堆疊可能達到 ,Quick Sort 仍被歸類為 in-place sorting,因為它不需要 的額外資料陣列來存放元素。
(C) The worst case time complexity of Quick Sort is
正確。
第 2 題
Which of the following statements is(are) true?
(A) A binary tree, which can be empty, is always a tree.
(B) The degree, i.e., number of subtrees, of any node in a binary tree must not exceed two.
(C) The minimum number of levels of a binary tree with 8 nodes is 4.
(D) The maximum number of levels of a binary tree with 8 nodes is 8.
(E) For any nonempty binary tree, if NL is the number of leaf nodes and NT is the number of nodes with
degree 2, then NL=NT+2.
登入後即可作答並保存紀錄。
核心觀念
本題考查二元樹的定義、層數上下界,以及節點度數與葉節點數之間的關係。
- 二元樹是樹的特例,每個節點最多有兩棵子樹。
- 若二元樹有 個節點,其最少層數來自每層盡可能擁有最多節點。
- 其最多層數出現在退化成單鏈的情況。
- 對非空二元樹,設度數為 的節點數分別為 ,則有
解題方法
逐一檢查各選項:
- 依據二元樹與一般樹的定義判斷。
- 依據二元樹每個節點最多兩個子樹的限制判斷。
- 使用 層二元樹的最大節點數公式
- 以最不平衡的退化二元樹判斷最大層數。
- 以邊數公式推導葉節點數與度數為 的節點數關係。
選項分析
(A) 錯誤
二元樹的定義允許空二元樹;但是一般所稱的樹通常要求至少有一個根節點,因此空二元樹不被視為一棵樹。
所以「二元樹總是樹」不成立,尤其在二元樹為空時不成立。
(B) 正確
二元樹的定義就是每個節點最多有兩個子樹,因此任一節點的 degree 必須滿足
故此敘述正確。
(C) 正確
若二元樹有 層,最多可容納的節點數為
要容納 個節點,需滿足
因此
由於
第 3 題
Given an undirected graph G=(V, E), where V is a finite, nonempty set of vertices and E is a set of pairs of
vertices called edges, with no self-edge and multi-occurrence of the same edge, which of the following
statements is(are) true?
(A) The maximum number of distinct edges in E in a graph with n vertices is n(n-1).
(B) If G is a connected graph with n vertices, G must have at least n edges.
(C) The number of nodes in a spanning tree of G with n vertices is n-1.
(D) The maximum clique of a complete graph with n vertices has n nodes.
(E) A complete graph must be connected.
登入後即可作答並保存紀錄。
核心觀念
本題考查無向圖、完全圖、連通圖與生成樹的基本定義及公式:
- 無向簡單圖的邊連接兩個不同頂點,且同一條邊不重複。
- 個頂點的完全圖記為 ,任兩個不同頂點之間都有一條邊。
- 連通圖中任兩個頂點之間都存在路徑。
- 生成樹包含原圖的所有頂點,且是一棵樹。因此, 個頂點的生成樹有 條邊。
解題方法
逐一檢查各選項是否符合無向簡單圖的定義與相關定理,特別注意:
- 無向邊不分方向,因此兩個頂點形成的邊只能計算一次。
- 樹的頂點數與邊數關係為「邊數 = 頂點數 − 1」。
- 完全圖是邊數最多的簡單圖,且在通常定義下必為連通圖。
選項分析
(A) 錯誤
對於 個頂點的無向簡單圖,每條邊由兩個不同頂點組成。
若先選取兩個頂點,排列數為:
但無向邊 與 是同一條邊,因此每條邊被計算兩次,必須除以 :
因此最大邊數是 ,不是 。後者是有向圖計算邊數時的排列數。
(B) 錯誤
連通圖只需保證所有頂點彼此可達,其最少邊數為:
例如一棵含有 個頂點的樹就是連通圖,但只有 條邊。因此「至少有 條邊」並不成立。
正確敘述應為:
第 1 題5 分
What are the best-case time complexity using "O" notation to move n (n>0) plates from one of the three
Hanoi towers to another? (5 points)
登入後即可作答並保存紀錄。
核心觀念
本題考查三柱漢諾塔(Tower of Hanoi)的遞迴結構與時間複雜度。
要將 個大小不同的盤子從起始柱移到目標柱,必須遵守:
- 每次只能移動一個盤子。
- 大盤子不能放在小盤子上面。
- 可使用第三根柱子作為輔助。
令 表示移動 個盤子所需的最少移動次數。
解題方法
移動最大的第 個盤子之前,必須先將上面的 個盤子移到輔助柱,所需移動次數為 。
接著移動最大的盤子一次,所需次數為 。
最後再將 個盤子從輔助柱移到目標柱,所需次數仍為 。
因此遞迴式為:
初始條件為:
展開遞迴式:
所以最少移動次數為:
第 2 題5 分
What are the contents from Front to Rear in a stack after the following operations, [push(A), push(B),
pop(), push(C), pop(), pop(), push(D), push(E), pop(), push(F)]? (5 points)
登入後即可作答並保存紀錄。
核心觀念
堆疊(stack)遵循後進先出(LIFO, Last In First Out)原則:
push(X):將元素 放入堆疊頂端。pop():移除並回傳堆疊頂端元素。- 題目要求由 Front 到 Rear 列出內容;此處將 Front 視為堆疊頂端,也就是
pop()操作的一端。
解題方法
依序執行每個操作,記錄堆疊內容。表中由左至右皆表示 Front(頂端)到 Rear(底端)。
| 操作 | 執行結果 | 堆疊內容(Front → Rear) |
|---|---|---|
push(A) | 放入 | |
push(B) | 放入 ,位於 前方 | |
pop() | 移除頂端 | |
push(C) | 放入 |
第 3 題5 分
What is the maximum number of nodes in a full K-ray tree (degree of nodes in the tree is no more than K)
with height L? (5 points)
登入後即可作答並保存紀錄。
核心觀念
本題考查樹的高度、節點度數上限,以及等比級數求和。
- 每個節點最多有 個子節點。
- 樹的高度 定義為根節點到最深葉節點的邊數,因此共有 層。
- 要使節點總數最大,根節點至第 層的每個節點都必須恰好擁有 個子節點。
解題方法
各層最多節點數如下:
- 第 層:
- 第 層:
- 第 層:
- 第 層:
因此最大節點總數為:
這是首項為 、公比為 的等比級數。當 時:
因此,最大節點數為:
第 4 題10 分
(A) Please transform the following infix expression “ A*B-C+(D+E)*F+G/H " to the corresponding postfix
expression using the Stack or Queue data structures. Please describe your answer in details. (10 points)
(B) Please evaluate the result from the above postfix expression using the Stack or Queue data structures
if [A=8, B=7, C=6, D=5, E=4, F=3, G=2, H=1]. Please describe your answer in details. (5 points)
登入後即可作答並保存紀錄。
(A) 中序轉後序
- 設「輸出」空列,「運算子堆疊」空堆疊。
- 依左至右掃描中序式每個字元,依下表處理
| token | 動作 |
|---|---|
| operand (A‑H) | 直接加入輸出 |
| '(' | 推入堆疊 |
| ')' | 逐一彈出堆疊至遇到 '(',彈出的運算子加入輸出,丟棄 '(' |
| operator (+ – * /) | 彈出堆疊中 優先度 ≥ 當前運算子(左結合)並加入輸出,然後推入當前運算子 |
- 掃描完畢後,將堆疊中剩餘運算子全部彈出加入輸出。
執行過程(堆疊以最上層在右)
| token | 輸出 | 堆疊 |
|---|---|---|
| A | A | |
| * | A | * |
| B | A B | * |
| – | A B * | – |
| C | A B * C | – |
| + | A B * C – | + |
| ( | A B * C – | + ( |
| D | A B * C – D | + ( |
| + | A B * C – D | + ( + |
| E | A B * C – D E | + ( + |
| ) | A B * C – D E + | + |
| * | A B * C – D E + | + * |
| F | A B * C – D E + F | + * |
| + | A B * C – D E + F * | + |
第 5 題10 分
You are given an empty hash table of size 7 and bucket capacity 1 that uses open addressing. The
following sequence of keys is to be inserted: (15, 17, 8, 23, 3, 5). Insert these keys using each of the
following hash functions and approaches. Show the resulting hash table step by step. If overflow occurs, say
so, indicate the element that causes the overflow. (10 points)
(A) h(x) = x % 7; linear probing.
(B) h(x) = x % 7; double hashing with h2(x) = x / 7 + 1.
登入後即可作答並保存紀錄。
核心觀念
本題考查雜湊表的碰撞處理:
- 表格大小為 ,索引為 。
- 每個 bucket 容量為 ,因此一個位置只能存放一個元素。
- 採用 open addressing 時,發生碰撞後必須依照探測公式尋找下一個空位置。
- 線性探測公式:
- Double hashing 公式:
其中本題為:
計算出的探測位置已經連續探測 個位置仍無空位時,才算 overflow。
解題方法
依照鍵值給定的順序:
每插入一個鍵值,就先計算其初始位置;若該位置已被占用,再依指定的探測方法逐一尋找空位,並記錄每一步的表格狀態。
(A) ,線性探測
1. 插入
位置 為空,直接放入。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | — | — | — | — | — |
2. 插入
位置 為空,放入位置 。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | — | 17 | — | — | — |
3. 插入
位置 已有 ,線性探測下一格:
位置 為空,將 放入位置 。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | 8 | 17 | — | — | — |
4. 插入
探測過程:
- 位置 :已有
- 位置 :已有
- 位置 :為空
因此將 放入位置 。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | 8 | 17 | 23 | — | — |
5. 插入
探測過程:
- 位置 :已有
- 位置 :已有
- 位置 :為空
因此將 放入位置 。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | 8 | 17 | 23 | 3 | — |
6. 插入
探測過程:
- 位置 :已有
- 位置 :為空
因此將 放入位置 。
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|---|
| 內容 | — | 15 | 8 | 17 | 23 | 3 | 5 |
(A) 結果
所有鍵值皆成功插入,沒有 overflow。
(B) Double hashing
本題使用:
探測公式為:
1. 插入
初始位置為:
位置 為空,放入 。
第 6 題15 分
Please compute the all-pair shortest distances in the following graph. Please show your answer step by
step. (15 points)
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題要求計算有向加權圖中任意兩點間的最短距離,適合使用 Floyd–Warshall 全點對最短路徑演算法。
圖中的有向邊如下:
Floyd–Warshall 的遞迴公式為:
其中 表示允許經過前 個節點作為中繼點時,從 到 的最短距離。
節點順序採用:
解題方法
以 表示目前沒有路徑。初始矩陣 只填入直接邊:
經過 作為中繼點
可改善:
經過 作為中繼點
可改善:
經過 作為中繼點
因為 ,可得:
再利用 :
經過 作為中繼點
利用 ,可得:
利用 ,可得:
其餘路徑沒有比目前結果更短。
第 7 題15 分
The distance between two vectors and can be computed by the dynamic time warping (DTW for short). DTW is to find the best mapping path with the minimum distance.
An -warping path is a sequence with for , satisfying the following three conditions:
(i) Boundary condition: and .
(ii) Monotonicity condition: and .
(iii) Step size condition: for .
The total cost of a warping path between and with respect to the local cost measure is defined as:
An optimal warping path between and is a warping path having minimal total cost among all possible warping paths. The DTW distance between and is then defined as the total cost of :
Please compute the DTW distance of and using dynamic programming techniques with cost measure defined as:
Please show your answer step by step with descriptions. (15 points)
登入後即可作答並保存紀錄。
核心觀念
DTW(動態時間扭曲)要在所有符合起點、終點與步長限制的路徑中,找出累積局部成本最低的一條路徑。每一步可由上方、左方或左上方的格子前進,因此可以用動態規劃逐格計算最小累積成本。
本題的局部成本為
令 表示從 到 的最小累積成本,則遞迴式為
其中上方、左方、左上方分別對應步長 、、。第一列與第一行只能沿著邊界前進,需依序累加成本。
解題方法
,。先計算每對元素的局部成本,得到成本矩陣:
從左上角開始填入累積成本表。第一列和第一行只能沿邊界累加,例如 ,。其餘格子使用遞迴式,例如: