108 年 國立中央大學資訊管理學系碩士班甲組《資料結構》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 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.
🖼️【此處有附圖,請對照原卷】

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 1 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查二元搜尋樹的中序走訪、選擇排序,以及圖形的深度優先與廣度優先走訪。

  • 二元搜尋樹(BST):左子樹鍵值小於根節點,右子樹鍵值大於或等於根節點。本題將重複的 3333 保留為另一個節點,遇到相等鍵值時往右子樹搜尋。
  • 中序走訪:依序走訪「左子樹、根節點、右子樹」。對二元搜尋樹做中序走訪,會得到由小到大的鍵值。
  • 選擇排序:每一輪從尚未排序的部分找出最小值,與該部分的第一個元素交換。
  • 圖形走訪:DFS 優先沿著尚未走訪的鄰點深入;BFS 則依距離起點的層次逐層走訪。

(A) 建立二元搜尋樹並做中序走訪

依序插入 33,78,11,48,20,55,33,9933, 78, 11, 48, 20, 55, 33, 99:

  1. 3333 為根節點。
  2. 78>3378>33,放在 3333 的右側。
  3. 11<3311<33,放在 3333 的左側。
  4. 48>3348>33,再比較 7878;48<7848<78,放在 7878 的左側。
  5. 20<3320<33,再比較 1111;20>1120>11,放在 1111 的右側。
  6. 55>3355>33、55<7855<78、55>4855>48,放在 4848 的右側。
  7. 第二個 3333 遇到相同鍵值時往右;依序比較 7878、4848 後,放在 4848 的左側。
  8. 99>3399>33、99>7899>78,放在 7878 的右側。
          33
         /  \
       11    78
         \   / \
         20 48  99
            / \
           33 55

中序走訪順序為「左子樹 → 根節點 → 右子樹」:

  • 先走訪左子樹:11,2011, 20
  • 再走訪根節點:3333
  • 最後走訪右子樹:先走訪 4848 的左子樹 3333,再走訪 4848、5555,最後走訪 7878、9999

結果:

11, 20, 33, 33, 48, 55, 78, 9911,\ 20,\ 33,\ 33,\ 48,\ 55,\ 78,\ 99

(B) 選擇排序

待排序資料為 3,2,6,4,1,53, 2, 6, 4, 1, 5。每一輪從未排序區間選出最小值,與該區間的第一個元素交換。

輪次未排序區間的最小值操作後序列
初始—3,2,6,4,1,53, 2, 6, 4, 1, 5
第 1 輪111,2,6,4,3,51, 2, 6, 4, 3, 5
第 2 輪221,2,6,4,3,51, 2, 6, 4, 3, 5
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 Question 2. 題33 分

You are given a matrix A =

[x11x12x13x14x21x22x23x24x31x32x33x34x41x42x43x44]\begin{bmatrix} x_{11} & x_{12} & x_{13} & x_{14} \\ x_{21} & x_{22} & x_{23} & x_{24} \\ x_{31} & x_{32} & x_{33} & x_{34} \\ x_{41} & x_{42} & x_{43} & x_{44} \end{bmatrix}

for the following questions.

(A) With {x11=1,x12=2,x21=3,x22=0,x24=6,x33=1,x32=5,x44=0,x43=7x_{11} = 1, x_{12} = 2, x_{21} = 3, x_{22} = 0, x_{24} = 6, x_{33} = 1, x_{32} = 5, x_{44} = 0, x_{43} = 7} and otherwise xij=∞x_{ij} = \infty (infinity) for A, what structure in graph is represented by A? Explain your answer in detail (17%).

(B) With {xij=0x_{ij} = 0 if i=ji = j} and {xij=1x_{ij} = 1 if i≠ji \neq j} for A, what structure in graph is represented by A? Explain your answer in detail (16%).

🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 1 頁

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

鄰接矩陣的第 ii 列、第 jj 行描述頂點 ii 到頂點 jj 的連結。非對角線項代表不同頂點間的邊;對角線項代表自環。矩陣對稱時,表示每對頂點間的連結方向相同,可用無向圖表示。加權矩陣中,有限數值記錄邊的權重,∞\infty 表示沒有邊。

解題方法

依原卷圖,Question 2 給出一個 4×44 \times 4 矩陣,頂點為 1,2,3,41,2,3,4;(A) 的未列數值為 ∞\infty,(B) 則規定對角線為 00、非對角線為 11。頁面旁的圖屬於 Question 1(C),與本題無關。

逐格查看矩陣:先用對角線判斷有無自環,再查看非對角線的有限值來列出頂點間的邊。若 xij≠xjix_{ij} \ne x_{ji},則須分別判斷兩個方向。

(A) 加權有向圖

矩陣為

A=[12∞∞30∞6∞51∞∞∞70]A= \begin{bmatrix} 1&2&\infty&\infty\\ 3&0&\infty&6\\ \infty&5&1&\infty\\ \infty&\infty&7&0 \end{bmatrix}

依題目所用的表示方式,對角線上的 00 表示沒有自環;正的有限值表示該方向有邊,且數值為權重。因此,頂點 11、33 各有一條權重為 11 的自環;頂點 22、44 沒有自環。

非對角線的有限值給出五條有向邊:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 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),且所有葉子位於同一層,樹的高度 hh 為根到葉子的邊數。
  • 葉子數與分支數的關係:若把每個內部節點視為「分支因子」,則從根到任一葉子經過的分支因子乘積即為該葉子所在的子樹大小。
  • 上下界:最小葉子數發生在所有內部節點皆為 2‑node,最大葉子數發生在所有內部節點皆為 3‑node。

解題方法

  1. 下界:

    • 當每層皆為 2‑node 時,根的子樹個數為 22,其子樹再各自分成 22 個,如此遞迴 hh 層。
    • 因此葉子總數 Lmin⁡=2hL_{\min}=2^h。
  2. 上界:

    • 當每層皆為 3‑node 時,根的子樹個數為 33,每層再各自分成 33 個,遞迴 hh 層。
    • 故葉子總數 Lmax⁡=3hL_{\max}=3^h。
  3. 可行範圍的完整性(任意 LL 滿足 2h≤L≤3h2^h\le L\le3^h 都可構成):

    • 以歸納法證明。
    • 基礎步(h=0h=0):樹僅有根且同時是葉子,唯一葉子數 L=1L=1,且 20=30=12^0=3^0=1,範圍成立。
    • 歸納假設:假設對高度 h−1h-1 的所有 2‑3 樹,葉子數可取得任意 L′L' 滿足 2h−1≤L′≤3h−12^{h-1}\le L'\le3^{h-1}。
    • 歸納步:對高度 hh 的樹,根可以是 2‑node 或 3‑node。
      • 若根為 2‑node,則兩個子樹皆為高度 h−1h-1 的 2‑3 樹,葉子數 L=L1+L2L=L_1+L_2,其中 L1,L2L_1,L_2 各滿足 2h−1≤Li≤3h−12^{h-1}\le L_i\le3^{h-1}。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 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 小元素:在大小為 nn 的集合中,排序後第 kk 個位置的元素(1≤k≤n1\le k\le n)。
  • 選擇問題 (Selection problem):在不完全排序的情況下找出第 kk 小(大)元素。
  • 分割 (Partition) 原理:與 QuickSort 相同,選取樞紐 (pivot) 後,使左側皆 ≤ 樞紐,右側皆 ≥ 樞紐。
  • 迭代快速選擇:利用分割的返回位置 pp 判斷第 kk 小元素位於左、右或正好是樞紐,重複迭代直至找到。

解題方法

  1. 選擇樞紐

    • 直接選取區間最右端元素 A[high]A[high] 作為樞紐 (簡化實作)。
  2. Partition(非遞迴)

    • 設 i=low−1i = low-1,遍歷 j=lowj=low 到 high−1high-1:若 A[j]≤pivotA[j]\le pivot,則 i++i++ 並交換 A[i]A[i]、A[j]A[j]。
    • 迴圈結束後,將樞紐與 A[i+1]A[i+1] 交換,返回索引 p=i+1p=i+1。
  3. 迭代 QuickSelect

    • 設 low=0, high=n−1low=0,\ high=n-1。
    • 進入 while 迴圈:
      • 執行 Partition 取得 pp。
      • 若 p==k−1p == k-1,則 A[p]A[p] 為第 kk 小元素,結束。
      • 若 p>k−1p > k-1,將搜尋區間縮至左側:high=p−1high = p-1。
      • 若 p<k−1p < k-1,將搜尋區間縮至右側:low=p+1low = p+1。
  4. 終止條件

    • 迴圈必於找到 p=k−1p = k-1 時停止,因為每次 Partition 至少排除一個不可能是第 kk 小的元素,時間上期望 O(n)O(n)。

程式實作(非遞迴)

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

其他考古題