115 年 國立成功大學工程科學系碩士班乙組《資料結構》

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

第 1 題20 分

Consider the following pseudocode:

Z=n
for x = 1 to n do
  for i = 1 to x do
    for j = 1 to x do
      if (i != j) then
        Z++;
      end if
    end
  end
end

Assume that n is a positive integer and that the variable Z is initially set to n.
The statement Z++ increases the value of Z by 1 each time it is executed.

Question:
Using n as the variable, determine the final value of Z after the algorithm terminates. Your answer should be expressed as a closed-form formula in terms of n.

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

這一題的完整詳解

核心觀念

本題旨在考驗**演算法分析(Algorithm Analysis)中的迴圈計數(Loop Counting)與離散數學的級數求和(Summation Series)**技巧。

解題時需要掌握以下核心要素:

  1. 補集計數法(Complement Counting):在固定上限的雙重迴圈中,求 i≠ji \neq j 的組合數,可利用「總組合數 (x2)\left(x^2\right)」扣除「i=ji = j 的組合數 (x)(x)」。
  2. 級數求和公式:
    • 一次方和(等差級數):∑x=1nx=n(n+1)2\sum_{x=1}^{n} x = \frac{n(n+1)}{2}
    • 平方和公式:∑x=1nx2=n(n+1)(2n+1)6\sum_{x=1}^{n} x^2 = \frac{n(n+1)(2n+1)}{6}
  3. 變數累加特性:變數 ZZ 的最終值等於「初始值」加上「敘述 Z++ 被執行的總次數」。

解題方法

步驟一:分析內層迴圈的執行次數

當最外層迴圈變數 xx 為定值時,ii 與 jj 的取值範圍皆為 1≤i,j≤x1 \le i, j \le x:

  • ii 與 jj 產生的所有二元對 (i,j)(i, j) 總數為 x×x=x2x \times x = x^2 種。
  • 其中條件 i=ji = j 的組合共有 xx 種(分別為 (1,1),(2,2),…,(x,x)(1,1), (2,2), \dots, (x,x))。
  • 因此,滿足條件 if (i != j) 的二元對個數為:
    x2−x=x(x−1)x^2 - x = x(x-1)

即對於給定的 xx,敘述 Z++ 會被執行 x2−xx^2 - x 次。

步驟二:累加外層迴圈獲得總增加量

最外層迴圈 xx 從 11 迭代至 nn,故整個演算法中 Z++ 的總執行次數為:
Total Increments=∑x=1n(x2−x)=∑x=1nx2−∑x=1nx\text{Total Increments} = \sum_{x=1}^{n} (x^2 - x) = \sum_{x=1}^{n} x^2 - \sum_{x=1}^{n} x

代入標準級數求和公式:
Total Increments=n(n+1)(2n+1)6−n(n+1)2\text{Total Increments} = \frac{n(n+1)(2n+1)}{6} - \frac{n(n+1)}{2}

提出公因式 n(n+1)2\frac{n(n+1)}{2} 進行通分與化簡:
Total Increments=n(n+1)2[2n+13−1]\text{Total Increments} = \frac{n(n+1)}{2} \left[ \frac{2n+1}{3} - 1 \right]
Total Increments=n(n+1)2[2n−23]\text{Total Increments} = \frac{n(n+1)}{2} \left[ \frac{2n-2}{3} \right]

🔒

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

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

免費註冊

第 2 題20 分

Consider a discrete memoryless source that emits the following symbols with distinct, positive frequencies:

SymbolABCDEF
Frequency4710152045

(a). (10%) Compute the Weighted Path Length (WPL) of the resulting Huffman Tree.
(b). (10%) Let LavgL_{avg} denote the average codeword length of the Huffman code. Compute LavgL_{avg} and round your answer to three decimal places.

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

這一題的完整詳解

核心觀念

  1. 霍夫曼編碼 (Huffman Coding):
    霍夫曼編碼是一種基於字元出現頻率(或機率)構建最佳前綴碼(Prefix Code)的貪婪演算法(Greedy Algorithm)。出現頻率越高的字元,其編碼長度越短,從而達到資料壓縮的效果。
  2. 帶權路徑長度 (Weighted Path Length, WPL):
    對於一棵擴充二元樹(Extended Binary Tree),其外部節點(葉節點)代表各字元。加權路徑長度 WPLWPL 定義為所有葉節點的權重(頻率 fif_i)與其從根節點到該葉節點的路徑長度(深度 did_i)的乘積之和:
    WPL=∑i=1n(fi×di)WPL = \sum_{i=1}^{n} (f_i \times d_i)
    此外,根據霍夫曼樹的性質,WPLWPL 亦等於所有內部節點(Internal Nodes)權重之總和。
  3. 平均字碼長度 (LavgL_{avg}):
    平均字碼長度代表傳輸每一個符號平均需要的位元數(Bits/Symbol),計算公式為總帶權路徑長度除以所有符號的總頻率:
    Lavg=WPL∑i=1nfi=WPLNL_{avg} = \frac{WPL}{\sum_{i=1}^{n} f_i} = \frac{WPL}{N}
    其中 N=∑i=1nfiN = \sum_{i=1}^{n} f_i 為資料源總頻率。

解題方法

第一步:構建霍夫曼樹 (Huffman Tree Construction)

將給定之符號與頻率依頻率由小到大排序並存入最小優先佇列(Min-Heap):
S={A:4,B:7,C:10,D:15,E:20,F:45}S = \{A:4, B:7, C:10, D:15, E:20, F:45\}

每次選取頻率最小的兩個節點合併為一個新的內部節點,重複此步驟直至只剩下一個根節點:

  1. 合併 A(4)A(4) 與 B(7)B(7):
    • 建立內部節點 N1=4+7=11N_1 = 4 + 7 = 11
    • 剩餘節點:{C:10,N1:11,D:15,E:20,F:45}\{C:10, N_1:11, D:15, E:20, F:45\}
  2. 合併 C(10)C(10) 與 N1(11)N_1(11):
    • 建立內部節點 N2=10+11=21N_2 = 10 + 11 = 21
    • 剩餘節點:{D:15,E:20,N2:21,F:45}\{D:15, E:20, N_2:21, F:45\}
  3. 合併 D(15)D(15) 與 E(20)E(20):
    • 建立內部節點 N3=15+20=35N_3 = 15 + 20 = 35
    • 剩餘節點:{N2:21,N3:35,F:45}\{N_2:21, N_3:35, F:45\}
  4. 合併 N2(21)N_2(21) 與 N3(35)N_3(35):
    • 建立內部節點 N4=21+35=56N_4 = 21 + 35 = 56
    • 剩餘節點:{F:45,N4:56}\{F:45, N_4:56\}
  5. 合併 F(45)F(45) 與 N4(56)N_4(56):
    • 建立根節點 N5=45+56=101N_5 = 45 + 56 = 101
    • 完成霍夫曼樹構建,總頻率 N=101N = 101。

(a) 計算霍夫曼樹的加權路徑長度 (WPL)

🔒

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

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

免費註冊

第 3 題20 分

Consider the following list of distinct integers:
[50,30,70,20,40,60,80]
The list represents the order in which elements are inserted into an initially empty Binary Search Tree (BST) using the standard BST insertion rule.

(a). (5%) Please construct a Binary Search Tree from the list.
(b). (15%) What are the pre-order, in-order, and post-order traversals of your tree for Question (a)? Please write down the sequences of the numbers.

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

這一題的完整詳解

核心觀念

本題旨在評量**二元搜尋樹(Binary Search Tree, BST)的基本建構規則以及三種常見的樹的走訪(Tree Traversals)**演算法。

  1. 二元搜尋樹(BST)之定義與插入規則:
    對於 BST 中的任意節點 xx:

    • 若其左子樹存在,則左子樹中所有節點的值皆小於 xx 的值。
    • 若其右子樹存在,則右子樹中所有節點的值皆大於 xx 的值。
    • 插入新元素 vv 時,自根節點開始比對:若 v<node.valv < \text{node.val} 則往左子樹遞迴搜尋;若 v>node.valv > \text{node.val} 則往右子樹遞迴搜尋;直至找到適當的空位(null 處)建立新節點。
  2. 樹走訪(Tree Traversals)演算法:

    • 前序走訪(Pre-order Traversal):走訪順序為 根節點(V) →\to 左子樹(L) →\to 右子樹(R)。
    • 中序走訪(In-order Traversal):走訪順序為 左子樹(L) →\to 根節點(V) →\to 右子樹(R)。
    • 後序走訪(Post-order Traversal):走訪順序為 左子樹(L) →\to 右子樹(R) →\to 根節點(V)。

解題方法

(a) 逐一插入建構二元搜尋樹(BST)

給定插入序列:[50,30,70,20,40,60,80][50, 30, 70, 20, 40, 60, 80]

  1. 插入 50:樹為空,直接作為根節點(Root)。
  2. 插入 30:30<5030 < 50,成為 5050 的左子節點。
  3. 插入 70:70>5070 > 50,成為 5050 的右子節點。
  4. 插入 20:20<5020 < 50 往左走;20<3020 < 30 往左走,成為 3030 的左子節點。
  5. 插入 40:40<5040 < 50 往左走;40>3040 > 30 往右走,成為 3030 的右子節點。
  6. 插入 60:60>5060 > 50 往右走;60<7060 < 70 往左走,成為 7070 的左子節點。
  7. 插入 80:80>5080 > 50 往右走;80>7080 > 70 往右走,成為 7070 的右子節點。

建構完成之二元搜尋樹如下圖所示:

          50
        /    \
      30      70
     /  \    /  \
    20  40  60  80

(b) 推導三種走訪序列(Pre-order, In-order, Post-order)

根據子樹結構進行遞迴追蹤:

  1. Pre-order Traversal(前序走訪:根 →\to 左 →\to 右):
    • 拜訪根節點 5050。
    • 拜訪左子樹(根為 3030):拜訪根 3030 →\to 左子節點 2020 →\to 右子節點 4040(序列:30, 20, 40)。
    • 拜訪右子樹(根為 7070):拜訪根 7070 →\to 左子節點 6060 →\to 右子節點 8080(序列:70, 60, 80)。
🔒

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

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

免費註冊

第 4 題20 分

Consider the following sorting algorithms:

  • Bubble Sort
  • Selection Sort
  • Insertion Sort
  • Merge Sort
  • Quick Sort
  • Heap Sort

(a). (12%) Indicate which of the above sorting algorithms are unstable.
(b). (8%) Among the sorting algorithms identified as unstable in part (a), indicate the algorithm(s) that have the best worst-case time complexity.

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

這一題的完整詳解

核心觀念

  1. 排序演算法的穩定度(Stability)

    • 定義:若待排序資料中存在鍵值(Key)相同的元素(例如 A[i]=A[j]A[i] = A[j] 且原順序 i<ji < j),經排序過後,A[i]A[i] 依然排在 A[j]A[j] 前面,則稱該排序演算法為穩定(Stable);反之,若相同鍵值元素的相對前後順序可能改變,則稱為不穩定(Unstable)。
    • 本質判斷:演算法在運作過程中是否包含「長距離/跨越式交換(Long-distance Swap)」或破壞相對位置的結構調整(如 Heap 下沉操作)。
  2. 最壞時間複雜度(Worst-case Time Complexity)

    • 指演算法在最不利的輸入資料分佈下,執行步驟數量的漸進上限(Asymptotic Upper Bound),以 Big-OO 記號表示。

解題方法

  • (a) 子題:針對題目列出的 6 種排序演算法(Bubble Sort、Selection Sort、Insertion Sort、Merge Sort、Quick Sort、Heap Sort),分析各自的元素搬移與交換機制,區分出穩定與不穩定的演算法。
  • (b) 子題:將 (a) 中判定為「不穩定」的演算法取出,列出各自在最壞情況下的時間複雜度,經由漸進成長率比較,選出表現最佳者(時間複雜度最快者)。

選項分析

針對題目給定的 6 種排序演算法逐一說明穩定度與最壞時間複雜度:

  1. Bubble Sort(氣泡排序)

    • 穩定度:穩定(Stable)。僅在相鄰元素滿足嚴格大於關係(A[j]>A[j+1]A[j] > A[j+1])時才進行交換,相等元素不會交換位置,相對順序不變。
    • 最壞時間複雜度:O(n2)O(n^2)。
  2. Selection Sort(選擇排序)

    • 穩定度:不穩定(Unstable)。每輪尋找未排序區間的最小值後,將其與未排序區間的第一個元素進行長距離交換。
    • 反例說明:對數列 [5a,5b,2][5_a, 5_b, 2] 進行升冪排序,第一輪找到最小值 22,將其與第一個元素 5a5_a 交換,數列變為 [2,5b,5a][2, 5_b, 5_a]。此時 5a5_a 與 5b5_b 的相對順序倒置。
    • 最壞時間複雜度:O(n2)O(n^2)。
  3. Insertion Sort(插入排序)

    • 穩定度:穩定(Stable)。未排序元素由後往前插入已排序區間時,若遇到相同鍵值的元素即停止搜尋並插入其右側,確保相對順序不變。
    • 最壞時間複雜度:O(n2)O(n^2)。
  4. Merge Sort(合併排序)

    • 穩定度:穩定(Stable)。在合併(Merge)兩個已排序子陣列時,若左右兩側元素鍵值相等,實作上規定優先取左側子陣列元素進入結果陣列,即可維護相對順序。
    • 最壞時間複雜度:O(nlog⁡n)O(n \log n)。
🔒

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

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

免費註冊

第 5 題20 分

Consider the following directed weighted graph with vertices.

🖼️【此處有附圖,請對照原卷】
(圖中節點為 A, B, C, D, E, F, G, H, I,邊及其權重如下:
A->B (4), A->D (2)
B->C (6), B->E (1)
C->F (2)
D->E (8)
E->C (5), E->F (4), E->H (1)
F->I (2)
G->D (2), G->H (3)
H->I (5)
)

(a). (5%) Determine the shortest path from vertex A to vertex H.
(b). (15%) Based on your answer in part (a), determine the total cost (sum of edge weights) of the shortest path.

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

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

這一題的完整詳解

核心觀念

這題考有向加權圖的最短路徑。路徑成本是沿途邊權重總和;由於圖中邊權重皆為非負數,可用 Dijkstra 演算法逐步確定各頂點從起點 AA 出發的最短距離。

依原圖,會影響本題的邊包括 A→DA\to D 權重 22、D→GD\to G 權重 77、G→HG\to H 權重 22。圖上的方向與權重須依箭頭判讀。

解題方法

從 AA 開始,記錄目前已知的最短距離 d(v)d(v),每次選取距離最小且尚未確定的頂點,並用它更新相鄰頂點:

確定的頂點更新結果
AAd(D)=2, d(B)=4d(D)=2,\ d(B)=4
DDd(B)=min⁡(4,2+1)=3d(B)=\min(4,2+1)=3;d(E)=10d(E)=10;d(G)=9d(G)=9
🔒

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

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

免費註冊

其他考古題