112 年 國立中正大學資訊管理學系碩士班乙組《資料結構》
第 1 題10 分
- (10 points) Give tight asymptotic bounds for each of the following recurrences.
(1)
(2)
(3)
(4)
(5)
登入後即可作答並保存紀錄。
核心觀念
假設輸入規模小於某個固定常數時,。各遞迴式的緊確漸近界以 表示。
對標準形式
令臨界函數為
比較 與此臨界函數即可使用主定理。當子問題比例不同,例如 與 ,使用 Akra–Bazzi 定理:
其中 滿足
(1)
解題方法
這是標準主定理形式,其中
臨界函數為
因此遞迴額外成本 與臨界函數相同,屬於主定理第二種情況:
遞迴樹驗算
第 層有 個子問題,每個子問題規模為 $n/2^k,因此該層總成本為
遞迴深度為 ,所以總成本為
(2)
解題方法
兩個子問題的縮小比例不同,直接套用標準主定理不適合,使用 Akra–Bazzi 定理。
令 滿足
設 ,則
取正根:
因此
本題的非遞迴成本為 ,所以
因為 ,
因此
遞迴樹直觀理解
規模為 的節點會產生總規模
的子問題,因此每層由非遞迴成本產生的總工作量至少按照幾何級數遞減:
根節點本身已經提供 的成本,故總複雜度為
(3)
解題方法
將子問題寫成標準形式:
因此
臨界函數為
由於
所以 比臨界函數低一個多項式階,符合主定理第一種情況:
遞迴樹驗算
第 層有 個節點,每個節點的問題規模為
因此第 $k
第 2 題8 分
- (8 points) Given a 3-D integer array A[3][5][7]. The address of the first element A[0][0][0] is 1000, and
size of an integer is 4 bytes. Please find the possible addresses of A[1][2][4] (for both row-major and column-
major).
登入後即可作答並保存紀錄。
核心觀念
三維陣列 的索引範圍為:
- 第一維:
- 第二维:
- 第三維:
每個整數占 bytes,因此只要先計算 到 之前共有多少個元素,再乘以 ,即可得到位元組位移量。
已知:
列優先儲存(row-major order)
列優先是指最右側的索引變化最快,因此第三維索引 先連續排列。
三維陣列的線性元素位移公式為:
代入 、、 以及 :
表示 位於起始元素之後第 個元素的位置。
換算成位元組位移:
因此其位址為:
第 3 題8 分
- (8 points) A postfix expression is given as "abc/de -- +/fg+x". The values a, b, c, d, e, f, g are 8, 4, 2, 3,
1, 2, 1, respectively.
(1) Convert the expression to an infix expression.
(2) Evaluate the expression to get an output.
登入後即可作答並保存紀錄。
(1) 中置式
(2) 計算過程
第 4 題10 分
- (10 points) Given the following recurrence function. Please calculate f(2) and f(4).
int f (int x) {
if (x == 1)
return 0;
else
return x * f(x - 1) + x * x * x;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查遞迴函式的「基本情況」與「遞迴情況」。
函式可表示為:
計算時,必須先依序遞迴到 ,再由最底層往上代回。基本情況 是遞迴停止的條件。
解題方法
先計算 :
接著計算 ,因為 會用到 :
最後計算 :
第 5 題5 分
- (5 points) Please explain why the following binary tree is not a max-heap.
🖼️【此處有附圖,請對照原卷】
The image shows a binary tree with the following structure and values:
50
/
20 3
/
8 3
登入後即可作答並保存紀錄。
核心觀念
最大堆(max-heap)必須同時滿足兩個條件:
- 完全二元樹:除最後一層外,每一層都必須填滿;最後一層的節點必須由左至右連續排列。
- 最大堆序:每個父節點的值都必須大於或等於其子節點的值。
因此,只符合父子節點的大小關係,還不足以構成最大堆。
解題方法
依原卷附圖,根節點為 ,只有左子節點 ,沒有右子節點; 的左、右子節點分別為 與 ,全樹共有四個節點。
先檢查最大堆序,各父子關係為:
第 6 題10 分
- (10 points) (True or False) Given the binary tree where the outcome of inorder traversal is BADECF and
postorder traversal is BDEFCA. Please answer the following questions.
登入後即可作答並保存紀錄。
核心觀念
本題考查二元樹的走訪順序與由走訪結果還原樹形。
- Inorder(中序):左子樹 → 根節點 → 右子樹。
- Postorder(後序):左子樹 → 右子樹 → 根節點。
因此,後序走訪的最後一個節點必定是整棵樹的根。取得根節點後,再利用中序序列將其左右子樹分開,遞迴處理即可。由於節點 至 均不重複,兩種走訪結果可以唯一決定樹形。
解題方法
已知:
- Inorder:
BADECF - Postorder:
BDEFCA
-
後序序列最後一個節點為 ,所以根節點是 。
-
在中序序列
BADECF中找到 :- 左側為
B,代表左子樹。 - 右側為
DECF,代表右子樹。
對應的後序序列依子樹節點數量切分:
- 左子樹有 1 個節點,因此為
B。 - 右子樹為
DEFC。
- 左側為
-
還原左子樹:
左子樹的中序與後序皆為
B,所以 是 的左子節點。 -
還原右子樹:
- 中序:
DECF - 後序:
DEFC
後序最後一個節點為 ,因此 是右子樹的根。
在中序
DECF中:- 左側為
DE,是 的左子樹。 - 右側為
F,是 的右子樹。
- 中序:
-
還原 的左子樹:
- 中序:
DE - 後序:
DE
- 中序:
第 7 題10 分
- (10 points) Which of the following digraphs is (are) strongly connected?
(1)
🖼️【此處有附圖,請對照原卷】
(2)
🖼️【此處有附圖,請對照原卷】
(3)
🖼️【此處有附圖,請對照原卷】
(4)
🖼️【此處有附圖,請對照原卷】
(5)
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
有向圖若對任意兩個頂點 、,都存在從 到 的有向路徑,且也存在從 到 的有向路徑,便稱為強連通。判斷時須確認每個頂點都能沿箭頭到達其他所有頂點;只看圖形相連並不足夠。
解題方法與選項分析
逐一沿箭頭檢查頂點間是否能互相到達:
- (1)不是強連通圖。 圖中只有左側頂點指向右側頂點,右側頂點沒有路徑回到左側頂點,因此兩者不能互相到達。
- (2)不是強連通圖。 中間與右側頂點之間有往返路徑,但左側頂點只有通往中間頂點的箭頭,沒有任何路徑能回到左側頂點。
第 8 題4 分
- (4 points) Please illustrate the update formula of Floyd-Warshall algorithm, if denotes the weight of
a shortest path from vertex i to vertex j for which all intermediate vertices are in the set {1, 2, ..., k}.
登入後即可作答並保存紀錄。
核心觀念
Floyd-Warshall 演算法以允許的中間頂點集合逐步擴大,計算任意兩頂點間的最短路徑。
題目定義 為從頂點 到頂點 的最短路徑權重,且所有中間頂點都必須屬於 。
當加入頂點 作為新的候選中間頂點時,最短路徑只有兩種情形:
- 路徑不經過頂點 。
- 路徑經過頂點 ,可拆成 與 兩段。
解題方法
若最短路徑不經過 ,其權重為:
若最短路徑經過 ,則前半段 與後半段 的中間頂點只能來自 ,因此總權重為:
取兩種情形中的較小值,得到 Floyd-Warshall 的更新公式:
初始條件為:
第 9 題9 分
- (9 points) Given the following list, show the steps of locating the target '21' by binary search.
1 3 5 7 9 11 13 15 17 19 21 23
Show the top, bottom, and middle elements in each step.
登入後即可作答並保存紀錄。
核心觀念
二分搜尋法適用於已排序的資料。每次取目前搜尋範圍的中間元素與目標值比較:
- 若目標值小於中間元素,搜尋左半部。
- 若目標值大於中間元素,搜尋右半部。
- 若相等,表示找到目標。
以位置 到 表示此串列,採用下中位數:
解題方法
目標值為 ,串列如下:
| 步驟 | top(位置/元素) | bottom(位置/元素) | middle 計算 | middle(位置/元素) | 比較結果 |
|---|---|---|---|---|---|
| 1 | ,往右半部搜尋 | ||||
| 2 | ,往右半部搜尋 |
第 10 題10 分
- (10 points) What is an optimal Huffman code for the following elements with their frequencies?
a: 15, b: 20, c: 25, d: 10, e: 30
登入後即可作答並保存紀錄。
核心觀念
Huffman coding 用來建立「總加權碼長最小」的最佳前綴碼(prefix code)。若符號 的頻率為 ,其碼長為 ,則總成本為
Huffman 演算法的步驟是:
- 每次選出頻率最小的兩個節點。
- 將兩者合併成頻率總和的新節點。
- 重複合併,直到形成完整二元樹。
- 從根節點往葉節點標示 、,根到葉的路徑即為該符號的編碼。
Huffman 演算法可保證得到總加權碼長最小的前綴碼。
解題方法
原始頻率如下:
| 元素 | 頻率 |
|---|---|
| 15 | |
| 20 | |
| 25 | |
| 10 | |
| 30 |
依頻率由小到大合併:
- 合併最小的 與 :
形成節點 。
- 合併 與 :
形成節點 。
- 合併 與 :
形成節點 。
- 合併最後兩個節點:
形成根節點。
指定左分支為 、右分支為 ,可得:
第 11 題8 分
- (8 points) Construct an AVL tree by inserting 2, 3, 5, 1, 4, 6, 7, and 8 successively from a null tree.
登入後即可作答並保存紀錄。
插入順序 2、3、5、1、4、6、7、8,依序維持 AVL 性質:
-
插入 2
- 成為根節點,。
-
插入 3
- 2 的右子節點;,仍平衡。
-
插入 5
- 2 → 3 → 5,形成 RR 不平衡於節點 2。
- 左旋 於 2,得到
3 / \ 2 5- 所有節點 為 。
-
插入 1
- 1 成為 2 的左子節點。
- ,仍平衡。
-
插入 4
- 4 成為 5 的左子節點。
- ,仍平衡。
第 12 題8 分
- (8 points) Given a matrix-chain product M1 · M2 · M3 · M4. Please find the optimal parenthesization of
the matrix-chain product where the dimensions are: M1: 25 x 30 M2:30 × 15 M3: 15 x 40
and M4:40 × 20, respectively.
登入後即可作答並保存紀錄。
核心觀念
本題考查「矩陣鏈乘法的最佳括號化」與動態規劃。
矩陣乘法具有結合律,因此:
但不同括號化會造成不同的矩陣相乘成本。若將一個 矩陣與一個 矩陣相乘,需要進行:
次純量乘法。
令矩陣尺寸向量為:
其中 的尺寸為 。
定義 為計算 所需的最少純量乘法次數,則:
其中 表示最後一次切割的位置,且:
解題方法:區間動態規劃
1. 計算兩個相鄰矩陣
2. 計算三個矩陣
計算
有兩種切法。
切在 :
成本為:
切在 :
成本為:
因此:
最佳括號化為:
計算
切在 :
成本為:
切在 :
成本為:
因此:
最佳括號化為:
3. 計算四個矩陣
考慮最後一次相乘的位置。
切在
括號化形式為: