108 年 國立中央大學資訊管理學系碩士班甲組《資料結構》
第 Question 1. 題33 分
(A) Please use the following data {33, 78, 11, 48, 20, 55, 33, 99} to build a binary search tree (6%). Based on the binary search tree, please describe the procedure of in-order traversal and show the final result.
(B) Based on the following data: 3, 2, 6, 4, 1, 5, please describe the processes and their results by using the Selection Sort (7%).
(C) Please describe the Depth-first Search (DFS) (7%) and Breadth-first Search (BFS) (7%) of Graph Traversal according to the graph shown below and show their final results.
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查二元搜尋樹的中序走訪、選擇排序,以及圖形的深度優先與廣度優先走訪。
- 二元搜尋樹(BST):左子樹鍵值小於根節點,右子樹鍵值大於或等於根節點。本題將重複的 保留為另一個節點,遇到相等鍵值時往右子樹搜尋。
- 中序走訪:依序走訪「左子樹、根節點、右子樹」。對二元搜尋樹做中序走訪,會得到由小到大的鍵值。
- 選擇排序:每一輪從尚未排序的部分找出最小值,與該部分的第一個元素交換。
- 圖形走訪:DFS 優先沿著尚未走訪的鄰點深入;BFS 則依距離起點的層次逐層走訪。
(A) 建立二元搜尋樹並做中序走訪
依序插入 :
- 為根節點。
- ,放在 的右側。
- ,放在 的左側。
- ,再比較 ;,放在 的左側。
- ,再比較 ;,放在 的右側。
- 、、,放在 的右側。
- 第二個 遇到相同鍵值時往右;依序比較 、 後,放在 的左側。
- 、,放在 的右側。
33
/ \
11 78
\ / \
20 48 99
/ \
33 55
中序走訪順序為「左子樹 → 根節點 → 右子樹」:
- 先走訪左子樹:
- 再走訪根節點:
- 最後走訪右子樹:先走訪 的左子樹 ,再走訪 、,最後走訪 、
結果:
(B) 選擇排序
待排序資料為 。每一輪從未排序區間選出最小值,與該區間的第一個元素交換。
| 輪次 | 未排序區間的最小值 | 操作後序列 |
|---|---|---|
| 初始 | — | |
| 第 1 輪 | ||
| 第 2 輪 |
第 Question 2. 題33 分
You are given a matrix A =
for the following questions.
(A) With {} and otherwise (infinity) for A, what structure in graph is represented by A? Explain your answer in detail (17%).
(B) With { if } and { if } for A, what structure in graph is represented by A? Explain your answer in detail (16%).
登入後即可作答並保存紀錄。
核心觀念
鄰接矩陣的第 列、第 行描述頂點 到頂點 的連結。非對角線項代表不同頂點間的邊;對角線項代表自環。矩陣對稱時,表示每對頂點間的連結方向相同,可用無向圖表示。加權矩陣中,有限數值記錄邊的權重, 表示沒有邊。
解題方法
依原卷圖,Question 2 給出一個 矩陣,頂點為 ;(A) 的未列數值為 ,(B) 則規定對角線為 、非對角線為 。頁面旁的圖屬於 Question 1(C),與本題無關。
逐格查看矩陣:先用對角線判斷有無自環,再查看非對角線的有限值來列出頂點間的邊。若 ,則須分別判斷兩個方向。
(A) 加權有向圖
矩陣為
依題目所用的表示方式,對角線上的 表示沒有自環;正的有限值表示該方向有邊,且數值為權重。因此,頂點 、 各有一條權重為 的自環;頂點 、 沒有自環。
非對角線的有限值給出五條有向邊:
第 Question 3. 題14 分
Let T be a 2-3 tree of height h. What is the possible number of leaves?
(A) What is the possible number of leaves? (4%)
(B) Prove your answer to (a). (10%)
登入後即可作答並保存紀錄。
核心觀念
- 2‑3 樹定義:每個內部節點的子數只能是 2(稱為 2‑node)或 3(稱為 3‑node),且所有葉子位於同一層,樹的高度 為根到葉子的邊數。
- 葉子數與分支數的關係:若把每個內部節點視為「分支因子」,則從根到任一葉子經過的分支因子乘積即為該葉子所在的子樹大小。
- 上下界:最小葉子數發生在所有內部節點皆為 2‑node,最大葉子數發生在所有內部節點皆為 3‑node。
解題方法
-
下界:
- 當每層皆為 2‑node 時,根的子樹個數為 ,其子樹再各自分成 個,如此遞迴 層。
- 因此葉子總數 。
-
上界:
- 當每層皆為 3‑node 時,根的子樹個數為 ,每層再各自分成 個,遞迴 層。
- 故葉子總數 。
-
可行範圍的完整性(任意 滿足 都可構成):
- 以歸納法證明。
- 基礎步():樹僅有根且同時是葉子,唯一葉子數 ,且 ,範圍成立。
- 歸納假設:假設對高度 的所有 2‑3 樹,葉子數可取得任意 滿足 。
- 歸納步:對高度 的樹,根可以是 2‑node 或 3‑node。
- 若根為 2‑node,則兩個子樹皆為高度 的 2‑3 樹,葉子數 ,其中 各滿足 。
第 Question 4. 題20 分
【程式設計題, 為了閱卷品質和您的得分著想, 你所寫的程式須注意可讀性, 字跡工整並適當縮排】
There are n integer elements in an array A. Write a non-recursive program in C language to find the kth small element in the array A. You are not allowed to sort the array A. (20%)
登入後即可作答並保存紀錄。
核心觀念
- 第 k 小元素:在大小為 的集合中,排序後第 個位置的元素()。
- 選擇問題 (Selection problem):在不完全排序的情況下找出第 小(大)元素。
- 分割 (Partition) 原理:與 QuickSort 相同,選取樞紐 (pivot) 後,使左側皆 ≤ 樞紐,右側皆 ≥ 樞紐。
- 迭代快速選擇:利用分割的返回位置 判斷第 小元素位於左、右或正好是樞紐,重複迭代直至找到。
解題方法
-
選擇樞紐
- 直接選取區間最右端元素 作為樞紐 (簡化實作)。
-
Partition(非遞迴)
- 設 ,遍歷 到 :若 ,則 並交換 、。
- 迴圈結束後,將樞紐與 交換,返回索引 。
-
迭代 QuickSelect
- 設 。
- 進入 while 迴圈:
- 執行 Partition 取得 。
- 若 ,則 為第 小元素,結束。
- 若 ,將搜尋區間縮至左側:。
- 若 ,將搜尋區間縮至右側:。
-
終止條件
- 迴圈必於找到 時停止,因為每次 Partition 至少排除一個不可能是第 小的元素,時間上期望 。
程式實作(非遞迴)