112 年 國立中正大學資訊管理學系碩士班乙組《資料結構》

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

第 1 題10 分

  1. (10 points) Give tight asymptotic bounds for each of the following recurrences.
    (1) T(n)=2T(n2)+nT(n) = 2T(\frac{n}{2}) + n
    (2) T(n)=T(n2)+T(n4)+nT(n) = T(\frac{n}{2}) + T(\frac{n}{4}) + n
    (3) T(n)=T(3n4)+T(3n4)+nT(n) = T(\frac{3n}{4}) + T(\frac{3n}{4}) + n
    (4) T(n)=2T(n)+log⁡nT(n) = 2T(\sqrt{n}) + \log n
    (5) T(n)=2T(n2)+nlog⁡nT(n) = 2T(\frac{n}{2}) + \frac{n}{\log n}

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

這一題的完整詳解

核心觀念

假設輸入規模小於某個固定常數時,T(n)=Θ(1)T(n)=\Theta(1)。各遞迴式的緊確漸近界以 Θ\Theta 表示。

對標準形式

T(n)=aT(nb)+f(n)T(n)=aT\left(\frac{n}{b}\right)+f(n)

令臨界函數為

nlog⁡ba.n^{\log_b a}.

比較 f(n)f(n) 與此臨界函數即可使用主定理。當子問題比例不同,例如 n/2n/2 與 n/4n/4,使用 Akra–Bazzi 定理:

T(n)=Θ(np(1+∫1ng(u)up+1 du)),T(n)=\Theta\left( n^p\left(1+\int_1^n\frac{g(u)}{u^{p+1}}\,du\right) \right),

其中 pp 滿足

∑iaibip=1.\sum_i a_i b_i^p=1.

(1)T(n)=2T(n2)+nT(n)=2T\left(\frac n2\right)+n

解題方法

這是標準主定理形式,其中

a=2,b=2,f(n)=n.a=2,\qquad b=2,\qquad f(n)=n.

臨界函數為

nlog⁡22=n.n^{\log_2 2}=n.

因此遞迴額外成本 f(n)=nf(n)=n 與臨界函數相同,屬於主定理第二種情況:

T(n)=Θ(nlog⁡n).T(n)=\Theta(n\log n).

遞迴樹驗算

第 kk 層有 2k2^k 個子問題,每個子問題規模為 $n/2^k,因此該層總成本為

2k⋅n2k=n.2^k\cdot \frac{n}{2^k}=n.

遞迴深度為 Θ(log⁡n)\Theta(\log n),所以總成本為

n⋅Θ(log⁡n)=Θ(nlog⁡n).n\cdot \Theta(\log n)=\Theta(n\log n).

(2)T(n)=T(n2)+T(n4)+nT(n)=T\left(\frac n2\right)+T\left(\frac n4\right)+n

解題方法

兩個子問題的縮小比例不同,直接套用標準主定理不適合,使用 Akra–Bazzi 定理。

令 pp 滿足

(12)p+(14)p=1.\left(\frac12\right)^p+\left(\frac14\right)^p=1.

設 x=2−px=2^{-p},則

x+x2=1.x+x^2=1.

取正根:

x=5−12.x=\frac{\sqrt5-1}{2}.

因此

p=log⁡21+52<1.p=\log_2\frac{1+\sqrt5}{2}<1.

本題的非遞迴成本為 g(n)=ng(n)=n,所以

T(n)=Θ(np(1+∫1nuup+1 du))=Θ(np(1+∫1nu−p du)).\begin{aligned} T(n) &=\Theta\left( n^p\left( 1+\int_1^n\frac{u}{u^{p+1}}\,du \right)\right)\\ &=\Theta\left( n^p\left( 1+\int_1^n u^{-p}\,du \right)\right). \end{aligned}

因為 p<1p<1,

∫1nu−p du=Θ(n1−p).\int_1^n u^{-p}\,du=\Theta(n^{1-p}).

因此

T(n)=Θ(np⋅n1−p)=Θ(n).T(n)=\Theta\left(n^p\cdot n^{1-p}\right)=\Theta(n).

遞迴樹直觀理解

規模為 mm 的節點會產生總規模

m2+m4=3m4\frac m2+\frac m4=\frac{3m}{4}

的子問題,因此每層由非遞迴成本產生的總工作量至少按照幾何級數遞減:

n+3n4+(34)2n+⋯=Θ(n).n+\frac{3n}{4}+\left(\frac34\right)^2n+\cdots=\Theta(n).

根節點本身已經提供 Ω(n)\Omega(n) 的成本,故總複雜度為

Θ(n).\boxed{\Theta(n)}.

(3)T(n)=2T(3n4)+nT(n)=2T\left(\frac{3n}{4}\right)+n

解題方法

將子問題寫成標準形式:

3n4=n4/3.\frac{3n}{4}=\frac{n}{4/3}.

因此

a=2,b=43,f(n)=n.a=2,\qquad b=\frac43,\qquad f(n)=n.

臨界函數為

nlog⁡4/32.n^{\log_{4/3}2}.

由於

log⁡4/32>1,\log_{4/3}2>1,

所以 f(n)=nf(n)=n 比臨界函數低一個多項式階,符合主定理第一種情況:

T(n)=Θ(nlog⁡4/32).T(n)=\Theta\left(n^{\log_{4/3}2}\right).

遞迴樹驗算

第 kk 層有 2k2^k 個節點,每個節點的問題規模為

n(34)k.n\left(\frac34\right)^k.

因此第 $k

🔒

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

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

免費註冊

第 2 題8 分

  1. (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).

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

這一題的完整詳解

核心觀念

三維陣列 A[3][5][7]A[3][5][7] 的索引範圍為:

  • 第一維:0≤i<30 \leq i < 3
  • 第二维:0≤j<50 \leq j < 5
  • 第三維:0≤k<70 \leq k < 7

每個整數占 44 bytes,因此只要先計算 A[0][0][0]A[0][0][0] 到 A[1][2][4]A[1][2][4] 之前共有多少個元素,再乘以 44,即可得到位元組位移量。

已知:

Addr⁡(A[0][0][0])=1000\operatorname{Addr}(A[0][0][0])=1000

列優先儲存(row-major order)

列優先是指最右側的索引變化最快,因此第三維索引 kk 先連續排列。

三維陣列的線性元素位移公式為:

Offset=i(d2d3)+j(d3)+k\text{Offset} =i(d_2d_3)+j(d_3)+k

代入 d1=3d_1=3、d2=5d_2=5、d3=7d_3=7 以及 (i,j,k)=(1,2,4)(i,j,k)=(1,2,4):

Offset=1(5×7)+2(7)+4\text{Offset} =1(5\times 7)+2(7)+4 =35+14+4=53=35+14+4=53

表示 A[1][2][4]A[1][2][4] 位於起始元素之後第 5353 個元素的位置。

換算成位元組位移:

53×4=212 bytes53\times 4=212\text{ bytes}

因此其位址為:

1000+212=12121000+212=\boxed{1212}
🔒

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

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

免費註冊

第 3 題8 分

  1. (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) 中置式

a+bc−(d−e)f+g\frac{a+\displaystyle\frac{b}{c}-(d-e)}{f+g}

(2) 計算過程

🔒

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

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

免費註冊

第 4 題10 分

  1. (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;
    }

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

這一題的完整詳解

核心觀念

本題考查遞迴函式的「基本情況」與「遞迴情況」。

函式可表示為:

f(x)={0,x=1x⋅f(x−1)+x3,x≠1f(x)= \begin{cases} 0, & x=1\\ x\cdot f(x-1)+x^3, & x\ne 1 \end{cases}

計算時,必須先依序遞迴到 f(1)f(1),再由最底層往上代回。基本情況 f(1)=0f(1)=0 是遞迴停止的條件。

解題方法

先計算 f(2)f(2):

f(2)=2⋅f(1)+23=2⋅0+8=8\begin{aligned} f(2) &=2\cdot f(1)+2^3\\ &=2\cdot 0+8\\ &=8 \end{aligned}

接著計算 f(3)f(3),因為 f(4)f(4) 會用到 f(3)f(3):

f(3)=3⋅f(2)+33=3⋅8+27=51\begin{aligned} f(3) &=3\cdot f(2)+3^3\\ &=3\cdot 8+27\\ &=51 \end{aligned}

最後計算 f(4)f(4):

🔒

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

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

免費註冊

第 5 題5 分

  1. (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
🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 3 頁

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

這一題的完整詳解

核心觀念

最大堆(max-heap)必須同時滿足兩個條件:

  1. 完全二元樹:除最後一層外,每一層都必須填滿;最後一層的節點必須由左至右連續排列。
  2. 最大堆序:每個父節點的值都必須大於或等於其子節點的值。

因此,只符合父子節點的大小關係,還不足以構成最大堆。

解題方法

依原卷附圖,根節點為 5050,只有左子節點 2020,沒有右子節點;2020 的左、右子節點分別為 88 與 33,全樹共有四個節點。

先檢查最大堆序,各父子關係為:

50≥20,20≥8,20≥3.50 \ge 20,\qquad 20 \ge 8,\qquad 20 \ge 3.
🔒

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

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

免費註冊

第 6 題10 分

  1. (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(後序):左子樹 → 右子樹 → 根節點。

因此,後序走訪的最後一個節點必定是整棵樹的根。取得根節點後,再利用中序序列將其左右子樹分開,遞迴處理即可。由於節點 AA 至 FF 均不重複,兩種走訪結果可以唯一決定樹形。

解題方法

已知:

  • Inorder:BADECF
  • Postorder:BDEFCA
  1. 後序序列最後一個節點為 AA,所以根節點是 AA。

  2. 在中序序列 BADECF 中找到 AA:

    • AA 左側為 B,代表左子樹。
    • AA 右側為 DECF,代表右子樹。

    對應的後序序列依子樹節點數量切分:

    • 左子樹有 1 個節點,因此為 B。
    • 右子樹為 DEFC。
  3. 還原左子樹:

    左子樹的中序與後序皆為 B,所以 BB 是 AA 的左子節點。

  4. 還原右子樹:

    • 中序:DECF
    • 後序:DEFC

    後序最後一個節點為 CC,因此 CC 是右子樹的根。

    在中序 DECF 中:

    • CC 左側為 DE,是 CC 的左子樹。
    • CC 右側為 F,是 CC 的右子樹。
  5. 還原 CC 的左子樹:

    • 中序:DE
    • 後序:DE
🔒

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

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

免費註冊

第 7 題10 分

  1. (10 points) Which of the following digraphs is (are) strongly connected?
    (1)
    🖼️【此處有附圖,請對照原卷】
    (2)
    🖼️【此處有附圖,請對照原卷】
    (3)
    🖼️【此處有附圖,請對照原卷】
    (4)
    🖼️【此處有附圖,請對照原卷】
    (5)
    🖼️【此處有附圖,請對照原卷】
🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 3 頁

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

這一題的完整詳解

核心觀念

有向圖若對任意兩個頂點 uu、vv,都存在從 uu 到 vv 的有向路徑,且也存在從 vv 到 uu 的有向路徑,便稱為強連通。判斷時須確認每個頂點都能沿箭頭到達其他所有頂點;只看圖形相連並不足夠。

解題方法與選項分析

逐一沿箭頭檢查頂點間是否能互相到達:

  • (1)不是強連通圖。 圖中只有左側頂點指向右側頂點,右側頂點沒有路徑回到左側頂點,因此兩者不能互相到達。
  • (2)不是強連通圖。 中間與右側頂點之間有往返路徑,但左側頂點只有通往中間頂點的箭頭,沒有任何路徑能回到左側頂點。
🔒

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

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

免費註冊

第 8 題4 分

  1. (4 points) Please illustrate the update formula of Floyd-Warshall algorithm, if dij(k)d_{ij}^{(k)} 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 演算法以允許的中間頂點集合逐步擴大,計算任意兩頂點間的最短路徑。

題目定義 dij(k)d_{ij}^{(k)} 為從頂點 ii 到頂點 jj 的最短路徑權重,且所有中間頂點都必須屬於 {1,2,…,k}\{1,2,\ldots,k\}。

當加入頂點 kk 作為新的候選中間頂點時,最短路徑只有兩種情形:

  1. 路徑不經過頂點 kk。
  2. 路徑經過頂點 kk,可拆成 i→ki\to k 與 k→jk\to j 兩段。

解題方法

若最短路徑不經過 kk,其權重為:

dij(k−1)d_{ij}^{(k-1)}

若最短路徑經過 kk,則前半段 i→ki\to k 與後半段 k→jk\to j 的中間頂點只能來自 {1,…,k−1}\{1,\ldots,k-1\},因此總權重為:

dik(k−1)+dkj(k−1)d_{ik}^{(k-1)}+d_{kj}^{(k-1)}

取兩種情形中的較小值,得到 Floyd-Warshall 的更新公式:

dij(k)=min⁡{dij(k−1), dik(k−1)+dkj(k−1)}\boxed{ d_{ij}^{(k)} = \min\left\{ d_{ij}^{(k-1)}, \ d_{ik}^{(k-1)}+d_{kj}^{(k-1)} \right\} }

初始條件為:

🔒

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

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

免費註冊

第 9 題9 分

  1. (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.

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

這一題的完整詳解

核心觀念

二分搜尋法適用於已排序的資料。每次取目前搜尋範圍的中間元素與目標值比較:

  • 若目標值小於中間元素,搜尋左半部。
  • 若目標值大於中間元素,搜尋右半部。
  • 若相等,表示找到目標。

以位置 11 到 1212 表示此串列,採用下中位數:

middle=⌊top+bottom2⌋middle=\left\lfloor\frac{top+bottom}{2}\right\rfloor

解題方法

目標值為 2121,串列如下:

1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 231,\ 3,\ 5,\ 7,\ 9,\ 11,\ 13,\ 15,\ 17,\ 19,\ 21,\ 23
步驟top(位置/元素)bottom(位置/元素)middle 計算middle(位置/元素)比較結果
11/11/112/2312/23⌊(1+12)/2⌋=6\lfloor(1+12)/2\rfloor=66/116/1121>1121>11,往右半部搜尋
27/137/1312/2312/23⌊(7+12)/2⌋=9\lfloor(7+12)/2\rfloor=99/179/1721>1721>17,往右半部搜尋
🔒

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

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

免費註冊

第 10 題10 分

  1. (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)。若符號 xix_i 的頻率為 fif_i,其碼長為 ℓi\ell_i,則總成本為

C=∑ifiℓiC=\sum_i f_i\ell_i

Huffman 演算法的步驟是:

  1. 每次選出頻率最小的兩個節點。
  2. 將兩者合併成頻率總和的新節點。
  3. 重複合併,直到形成完整二元樹。
  4. 從根節點往葉節點標示 00、11,根到葉的路徑即為該符號的編碼。

Huffman 演算法可保證得到總加權碼長最小的前綴碼。

解題方法

原始頻率如下:

元素頻率
aa15
bb20
cc25
dd10
ee30

依頻率由小到大合併:

  1. 合併最小的 dd 與 aa:
10+15=2510+15=25

形成節點 (da,25)(da,25)。

  1. 合併 bb 與 cc:
20+25=4520+25=45

形成節點 (bc,45)(bc,45)。

  1. 合併 (da,25)(da,25) 與 ee:
25+30=5525+30=55

形成節點 (dae,55)(dae,55)。

  1. 合併最後兩個節點:
45+55=10045+55=100

形成根節點。

指定左分支為 00、右分支為 11,可得:

🔒

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

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

免費註冊

第 11 題8 分

  1. (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 性質:

  1. 插入 2

    • 成為根節點,BF=0BF=0。
  2. 插入 3

    • 2 的右子節點;BF2=−1BF_{2}=-1,仍平衡。
  3. 插入 5

    • 2 → 3 → 5,形成 RR 不平衡於節點 2。
    • 左旋 於 2,得到
        3
       / \
      2   5
    
    • 所有節點 BFBF 為 00。
  4. 插入 1

    • 1 成為 2 的左子節點。
    • BF2=+1,  BF3=+1BF_{2}=+1,\; BF_{3}=+1,仍平衡。
  5. 插入 4

    • 4 成為 5 的左子節點。
    • BF5=+1,  BF3=0BF_{5}=+1,\; BF_{3}=0,仍平衡。
🔒

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

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

免費註冊

第 12 題8 分

  1. (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.

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

這一題的完整詳解

核心觀念

本題考查「矩陣鏈乘法的最佳括號化」與動態規劃。

矩陣乘法具有結合律,因此:

(M1M2)M3=M1(M2M3)(M_1M_2)M_3=M_1(M_2M_3)

但不同括號化會造成不同的矩陣相乘成本。若將一個 a×ba\times b 矩陣與一個 b×cb\times c 矩陣相乘,需要進行:

abcabc

次純量乘法。

令矩陣尺寸向量為:

p0=25,p1=30,p2=15,p3=40,p4=20p_0=25,\quad p_1=30,\quad p_2=15,\quad p_3=40,\quad p_4=20

其中 MiM_i 的尺寸為 pi−1×pip_{i-1}\times p_i。

定義 m[i,j]m[i,j] 為計算 MiMi+1⋯MjM_iM_{i+1}\cdots M_j 所需的最少純量乘法次數,則:

m[i,j]=min⁡i≤k<j{m[i,k]+m[k+1,j]+pi−1pkpj}m[i,j]=\min_{i\leq k<j} \left\{ m[i,k]+m[k+1,j]+p_{i-1}p_kp_j \right\}

其中 kk 表示最後一次切割的位置,且:

m[i,i]=0m[i,i]=0

解題方法:區間動態規劃

1. 計算兩個相鄰矩陣

m[1,2]=25×30×15=11250m[1,2]=25\times30\times15=11250 m[2,3]=30×15×40=18000m[2,3]=30\times15\times40=18000 m[3,4]=15×40×20=12000m[3,4]=15\times40\times20=12000

2. 計算三個矩陣

計算 M1M2M3M_1M_2M_3

有兩種切法。

切在 k=1k=1:

M1(M2M3)M_1(M_2M_3)

成本為:

0+18000+(25×30×40)=18000+30000=480000+18000+(25\times30\times40) =18000+30000 =48000

切在 k=2k=2:

(M1M2)M3(M_1M_2)M_3

成本為:

11250+0+(25×15×40)=11250+15000=2625011250+0+(25\times15\times40) =11250+15000 =26250

因此:

m[1,3]=26250m[1,3]=26250

最佳括號化為:

(M1M2)M3(M_1M_2)M_3

計算 M2M3M4M_2M_3M_4

切在 k=2k=2:

M2(M3M4)M_2(M_3M_4)

成本為:

0+12000+(30×15×20)=12000+9000=210000+12000+(30\times15\times20) =12000+9000 =21000

切在 k=3k=3:

(M2M3)M4(M_2M_3)M_4

成本為:

18000+0+(30×40×20)=18000+24000=4200018000+0+(30\times40\times20) =18000+24000 =42000

因此:

m[2,4]=21000m[2,4]=21000

最佳括號化為:

M2(M3M4)M_2(M_3M_4)

3. 計算四個矩陣

考慮最後一次相乘的位置。

切在 k=1k=1

括號化形式為:

🔒

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

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

免費註冊

其他考古題