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

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

第 1 題

Items 7, 3, 11, 9, and 13 are inserted into an AVL tree. What happens when 12 is inserted?
A. No rotation is needed
B. A single rotation between some node and its left child is performed
C. A single rotation between some node and its right child is performed
D. A double rotation with a node, its left child, and a third node is performed
E. A double rotation with a node, its right child, and a third node is performed

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

這一題的完整詳解

插入順序依次為 7、3、11、9、13,得到的 AVL 樹:

      7
    /   \
   3    11
       /  \
      9   13

各節點高度 (leaf 為 1):

  • 3、9、13:1
  • 11:22 (左、右子樹皆高 1)
  • 7:33 (左子樹高 1,右子樹高 2)

插入 12
路徑:7→11→13→7 \rightarrow 11 \rightarrow 13 \rightarrow 左子 → 成為 13 的左子。

更新後高度:

🔒

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

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

免費註冊

第 2 題

Which of the following trees can have height that is not logarithmic?
A. AA tree
B. AVL tree
C. B-tree of order 4
D. Red black tree
E. All of the above trees must have logarithmic depth

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

這一題的完整詳解

核心觀念

本題考查自平衡搜尋樹(Self-Balancing Search Trees)與多元平衡樹(Multi-way Balanced Trees)的樹高(Height / Depth)上界性質。

對於包含 nn 個節點的樹狀資料結構:

  • 若最壞情況(Worst-case)下的樹高 hh 滿足 h=O(log⁡n)h = O(\log n),則稱該樹具有對數高度(Logarithmic Height)或對數深度(Logarithmic Depth)。
  • 常見的自平衡二元搜尋樹(如 AVL Tree、Red-Black Tree、AA Tree)與多路平衡樹(如 B-Tree 系列),皆透過特定的平衡機制(如旋轉、節點分裂與合併),保證在進行插入與刪除後,樹高始終維持在 O(log⁡n)O(\log n)。

解題方法

逐一檢視各樹種在含有 nn 個節點時,最壞情況下的樹高(Worst-case Height hh)之數學推導與定義:

  1. AVL Tree:
    定義任一節點的左右子樹高度差(平衡因子 Balance Factor)絕對值不大於 1。
    最壞情況下的最少節點數遞迴式為斐波那契數列型態:
    Nh=Nh−1+Nh−2+1  ⟹  h<1.4404log⁡2(n+2)=O(log⁡n)N_h = N_{h-1} + N_{h-2} + 1 \implies h < 1.4404 \log_2(n+2) = O(\log n)

  2. Red-Black Tree(紅黑樹):
    滿足紅黑性質(根與葉為黑、無連續紅節點、各路徑黑色節點數相同)。任一路徑上紅色節點數不超過黑色節點數,最長路徑至多為最短路徑的 2 倍。
    最壞高度滿足:
    h≤2log⁡2(n+1)=O(log⁡n)h \le 2 \log_2(n+1) = O(\log n)

  3. AA Tree(AA 樹):
    由 Arne Andersson 提出,為紅黑樹的簡化變形。AA 樹規定紅色節點只能作為右子節點(等價於消除了紅黑樹中的左傾紅色連結)。此限制使實作旋轉(Skew 與 Split)更為簡潔,其高度依然維持紅黑樹的漸近界限:
    h=O(log⁡n)h = O(\log n)

  4. B-tree of order 4(4 階 B 樹 / 2-3-4 樹):
    屬於多元平衡搜尋樹,規定所有外部葉節點必須嚴格落在同一深度。每個節點最多有 4 個子節點、至少有 ⌈4/2⌉=2\lceil 4/2 \rceil = 2 個子節點(根節點除外)。

🔒

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

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

免費註冊

第 3 題

The next two questions refer to the following graph:
[Image of a directed graph with vertices V0 to V6 and weighted edges]
🖼️【此處有附圖,請對照原卷】
3. If the start vertex is V4, then using the acyclic weighted shortest path algorithm, which is the last
vertex to be declared known?
A.
VO
B.
V1
C. V2
D.
E.
The graph is not acyclic, so the acyclic algorithm should not be used
None of the above

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

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

這一題的完整詳解

核心觀念

有向無環圖(DAG)的加權最短路徑演算法,會依照拓樸順序處理頂點:每個頂點都在它所有前驅頂點處理完後,才會被宣告為已知並進行邊的鬆弛。這和依目前距離由小到大選頂點的標準加權最短路徑演算法不同。

解題方法

從圖中的箭頭可讀出,從 V4V_4 出發可到達其餘所有頂點。相關邊包括 V4→V1V_4\to V_1、V4→V3V_4\to V_3、V4→V6V_4\to V_6,以及 V1→V0V_1\to V_0、V3→V0V_3\to V_0、V0→V2V_0\to V_2、V3→V2V_3\to V_2、V3→V5V_3\to V_5、V6→V5V_6\to V_5、V5→V2V_5\to V_2 等。

圖中沒有由某頂點沿箭頭繞回自身的路徑,因此是有向無環圖。V2V_2 沒有向外的邊,是唯一的匯點;而它的前驅 V0V_0、V3V_3、V5V_5 都必須先處理。因此拓樸順序中,V2V_2 必定最後處理,也就是最後被宣告為已知的頂點。

🔒

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

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

免費註冊

第 4 題

The next two questions refer to the following graph:
[Image of a directed graph with vertices V0 to V6 and weighted edges]
🖼️【此處有附圖,請對照原卷】
4. If the start vertex is V4, then using the standard weighted shortest path algorithm, which is the last
vertex to be declared known?
A.
VO
B.
V1
C. V2
D. V4
E. None of the above

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

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

這一題的完整詳解

核心觀念

本題考標準加權最短路徑演算法,也就是 Dijkstra 演算法。每一步都從尚未確定的頂點中,選出目前暫定起點距離最小者,將它標記為「已知」,再用它的出邊更新其他頂點的暫定距離。

解題方法

由圖可讀出,從 V4V_4 出發的相關有向邊為:V4→V3V_4\to V_3 權重 22、V4→V6V_4\to V_6 權重 77、V4→V1V_4\to V_1 權重 1010;另有 V3→V0V_3\to V_0 權重 11、V3→V2V_3\to V_2 權重 22、V3→V5V_3\to V_5 權重 88、V3→V6V_3\to V_6 權重 44,以及 V6→V5V_6\to V_5 權重 11。

依序選出暫定距離最小的頂點:

已知頂點暫定距離更新下一個標記為已知的頂點
V4V_4d(V3)=2, d(V6)=7, d(V1)=10d(V_3)=2,\ d(V_6)=7,\ d(V_1)=10V3V_3
V3V_3d(V0)=2+1=3, d(V2)=2+2=4, d(V5)=2+8=10, d(V6)=min⁡(7,2+4)=6d(V_0)=2+1=3,\ d(V_2)=2+2=4,\ d(V_5)=2+8=10,\ d(V_6)=\min(7,2+4)=6V0V_0
V0V_0經 V0V_0 到 V2V_2 的距離為 3+4=73+4=7,不優於目前的 44V2V_2
🔒

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

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

免費註冊

第 5 題

The next two questions relate to the tree below:
[Image of a rooted tree with nodes labeled A, B, C, D, E]
🖼️【此處有附圖,請對照原卷】
5. Which of the following is an in-order traversal of the tree?
A. ABCDE
B. ABDCE
C. BDECA
D. EDCBA
E. None of the above

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

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

這一題的完整詳解

核心觀念

中序走訪(in-order traversal)的規則是依序走訪「左子樹、根節點、右子樹」。每個子樹也按照相同規則遞迴處理。

解題方法

原圖中,A 是根節點,左子節點為 B、右子節點為 C;C 的左子節點為 D、右子節點為 E。依中序規則,先走訪 A 的左子樹 B,再走訪 A,接著走訪 C 的左子樹 D、C 本身,最後走訪 C 的右子樹 E。

因此,中序走訪結果為 BADCE,題目選項中沒有這個序列。

選項分析

  • A. ABCDE:錯誤。 B 是 A 的左子節點,必須先於 A;此選項把 A 排在 B 前面。
  • **B. ABDCE:錯誤。
🔒

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

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

免費註冊

第 6 題

The next two questions relate to the tree below:
[Image of a rooted tree with nodes labeled A, B, C, D, E]
🖼️【此處有附圖,請對照原卷】
6. Suppose the post-order iteration is performed on the tree. At the time that D is output, what symbols
are still on the stack?
A.
A only
B.
A and B, only
C.
A and C, only
D.
A, B, and C
E.
None of the above

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

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

這一題的完整詳解

核心觀念

後序走訪的順序是「左子樹、右子樹、根節點」。使用堆疊迭代時,節點會先入堆疊;等左右子樹都處理完,才彈出並輸出。某節點輸出後,便不再留在堆疊中。

解題方法

依圖中的樹,根節點為 AA;AA 的左子節點是 BB、右子節點是 CC;而 CC 的左、右子節點分別是 DD、EE。

按照後序走訪逐步處理:

  1. 先將 AA、BB 放入堆疊。BB 是葉節點,先輸出 BB 並彈出,此時堆疊只剩 AA。
  2. 接著處理 AA 的右子樹,將 CC 放入堆疊,再將 DD 放入堆疊。
  3. DD 是葉節點,輸出 DD 並彈出。此時堆疊中仍有 AA 和 CC。

因此,DD 輸出時,堆疊上仍有 AA、CC。

🔒

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

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

免費註冊

第 7 題

  1. Which of the following sorting algorithms has the lowest worst-case time complexity?
    A. Selection sort
    B. Merge sort
    C. Bubble sort
    D. Insertion sort
    E. Quick sort

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

這一題的完整詳解

核心觀念

本題考查各種排序演算法的「最壞情況時間複雜度」。設待排序資料筆數為 nn,比較各演算法在最不利輸入下的漸進複雜度:

  • O(n2)O(n^2):平方級
  • O(nlog⁡n)O(n\log n):線性對數級

當 nn 增大時,nlog⁡nn\log n 的成長速度低於 n2n^2,因此具有 O(nlog⁡n)O(n\log n) 最壞情況複雜度的演算法較佳。

此外,基於比較的排序演算法具有下界:

Ω(nlog⁡n)\Omega(n\log n)

Merge sort 能達到此下界,因此其最壞情況複雜度為 Θ(nlog⁡n)\Theta(n\log n)。

解題方法

逐一判斷各選項的最壞情況複雜度:

  • Selection sort:Θ(n2)\Theta(n^2)
  • Merge sort:Θ(nlog⁡n)\Theta(n\log n)
  • Bubble sort:Θ(n2)\Theta(n^2)
  • Insertion sort:Θ(n2)\Theta(n^2)
  • Quick sort:Θ(n2)\Theta(n^2)

比較成長率:

nlog⁡n<n2n\log n < n^2

所以最壞情況時間複雜度最低的是 Merge sort。

選項分析

A. Selection sort

Selection sort 每一回合從尚未排序的部分尋找最小值。比較次數為:

(n−1)+(n−2)+⋯+2+1=n(n−1)2=Θ(n2)(n-1)+(n-2)+\cdots+2+1 = \frac{n(n-1)}{2} = \Theta(n^2)

即使輸入資料原本已排序,仍須完成尋找最小值的掃描,因此最壞情況為 Θ(n2)\Theta(n^2)。此選項錯誤。

B. Merge sort

Merge sort 先將資料分成兩半,遞迴排序後再合併:

T(n)=2T(n2)+Θ(n)T(n)=2T\left(\frac{n}{2}\right)+\Theta(n)

其中:

  • 2T(n/2)2T(n/2):分別排序兩個子問題
  • Θ(n)\Theta(n):合併兩個已排序序列

由遞迴式可得:

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

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

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

免費註冊

第 8 題

  1. What is the height of a complete binary tree with 16384 nodes?
    A. 8192
    B. 13
    C. 14
    D. 15
    E. 16

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

這一題的完整詳解

核心觀念

完全二元樹(complete binary tree)的特性是:

  • 除了最底層外,其餘層皆填滿。
  • 最底層的節點由左至右排列。
  • 標準定義中,樹高(height)是根節點到最深葉節點的「邊數」,根節點高度為 00。

對於含有 nn 個節點的完全二元樹,其高度為:

h=⌊log⁡2n⌋h=\lfloor \log_2 n \rfloor

其中 hh 是最深節點所在的深度。

解題方法

題目給定:

n=16384=214n=16384=2^{14}

因此:

h=⌊log⁡216384⌋=⌊14⌋=14h=\lfloor \log_2 16384 \rfloor =\lfloor 14 \rfloor =14

也可以從節點排列理解:

  • 深度 00 到深度 1313 的節點數為
1+2+22+⋯+213=214−1=163831+2+2^2+\cdots+2^{13}=2^{14}-1=16383
  • 題目共有 1638416384 個節點,因此還有 11 個節點位於深度 1414。
  • 根節點到該節點的路徑包含 1414 條邊,所以樹高為 1414。

選項分析

🔒

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

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

免費註冊

第 9 題

  1. A node with key 8 has a left child with key 10. Which of the following objects could this node be
    found in?
    A. Binary search tree
    B. Max heap
    C. Min heap
    D. Two of the above
    E. None of A, B, and C

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

這一題的完整詳解

核心觀念

本題考查二元搜尋樹與堆積的結構限制:

  • Binary search tree(BST):左子樹所有鍵值必須小於節點鍵值,右子樹所有鍵值必須大於節點鍵值。
  • Max heap:每個父節點鍵值必須大於或等於子節點,即
    parent≥child\text{parent} \geq \text{child}
  • Min heap:每個父節點鍵值必須小於或等於子節點,即
    parent≤child\text{parent} \leq \text{child}

解題方法

題目給定父節點鍵值為 88,左子節點鍵值為 1010,直接比較父子節點關係:

8<108<10

再分別套用三種資料結構的規則即可。

選項分析

  • A. Binary search tree

    BST 要求左子節點的鍵值小於父節點:

    10<810<8

    此條件不成立,因此不可能是 Binary search tree。

  • B. Max heap

    Max heap 要求父節點鍵值大於或等於子節點:

    8≥108\geq 10

🔒

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

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

免費註冊

第 10 題

  1. Suppose we are implementing quadratic probing with a hash function Hash(X) = X mod 100. If an
    element with key 4592 is inserted and the first three locations attempted are already occupied, then
    the next cell that will be tried is
    A. 0
    B. 1
    C. 9
    D. 92
    E. 95

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

這一題的完整詳解

核心觀念

Quadratic probing(二次探測)用於雜湊碰撞處理。第一次嘗試原始雜湊位置,之後依序加入平方偏移量:

Index⁡i=(h(K)+i2) mod m,i=0,1,2,…\operatorname{Index}_i=(h(K)+i^2)\bmod m,\qquad i=0,1,2,\ldots

其中:

  • KK:鍵值
  • h(K)h(K):原始雜湊位置
  • mm:雜湊表大小
  • i2i^2:二次探測的偏移量

本題的雜湊表大小為 100100。

解題方法

先計算鍵值 45924592 的原始雜湊位置:

h(4592)=4592 mod 100=92h(4592)=4592\bmod 100=92

因此,二次探測的嘗試順序為:

i=0:(92+02) mod 100=92i=1:(92+12) mod 100=93i=2:(92+22) mod 100=96i=3:(92+32) mod 100=101 mod 100=1\begin{aligned} i=0 &: (92+0^2)\bmod100=92\\ i=1 &: (92+1^2)\bmod100=93\\ i=2 &: (92+2^2)\bmod100=96\\ i=3 &: (92+3^2)\bmod100=101\bmod100=1 \end{aligned}

前 3 個位置 92、93、9692、93、96 已被占用,因此下一個嘗試的位置是 11。

🔒

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

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

免費註冊

第 11 題

  1. For the array implementation of the stack, what is the worst-case cost of a single push operation if
    array doubling is used?
    A. Ο(1)
    B. O(log N)
    C. O(N)
    D. O(N log N)
    E. None of the above

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

這一題的完整詳解

核心觀念

本題考查陣列實作堆疊時,採用 array doubling 動態擴充容量後,單次 push 的最壞時間複雜度。

若目前陣列已滿,將容量由 NN 擴充為 2N2N,必須:

  1. 配置容量為 2N2N 的新陣列。
  2. 將原本 NN 個元素逐一複製到新陣列。
  3. 將新元素放入堆疊頂端。

其中複製 NN 個元素需要 Θ(N)\Theta(N) 時間,因此該次 push 的最壞成本為:

Θ(N)=O(N)\Theta(N)=O(N)

解題方法

當陣列尚有空間時,push 只需將元素放入下一個位置,成本為 O(1)O(1)。

但題目問的是「單次操作的最壞情況」。最壞情況發生在陣列已滿時:

原容量=N⟶新容量=2N\text{原容量}=N \quad\longrightarrow\quad \text{新容量}=2N

搬移原有元素的成本為:

N×O(1)=O(N)N \times O(1)=O(N)

再加上配置新陣列與插入新元素的成本,總成本仍由複製操作主導:

O(N)+O(1)=O(N)O(N)+O(1)=O(N)

因此,單次 push 的最壞時間複雜度是 O(N)O(N)。

選項分析

🔒

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

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

免費註冊

第 12 題

  1. If a header node is used in a linked list, which of the following indicates a list with one item?
    A. header != NULL
    B. header->next == NULL
    C. header != NULL && header->next == NULL
    D. header != NULL && header->next != NULL && header->next->next == NULL
    E. None of the above

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

這一題的完整詳解

核心觀念

使用 header node 的鏈結串列中,header 通常指向一個不存放實際資料的標頭節點。真正的資料節點從 header->next 開始:

  • 空串列:header->next == NULL
  • 恰有一個資料節點:header->next != NULL,且該節點的 next == NULL
  • 有兩個以上資料節點:header->next->next != NULL

恰有一個資料節點時,串列結構如下:

header→第一個資料節點→NULL\text{header} \rightarrow \text{第一個資料節點} \rightarrow NULL

因此判斷條件為:

header≠NULL∧header->next≠NULL∧header->next->next=NULL\text{header} \neq NULL \land \text{header->next} \neq NULL \land \text{header->next->next} = NULL

解題方法

先排除標頭節點本身,再觀察實際資料節點:

  1. header != NULL:確認標頭節點存在。
  2. header->next != NULL:確認至少有一個資料節點。
  3. header->next->next == NULL:確認第一個資料節點後面沒有其他資料節點。

三個條件同時成立時,代表串列中恰好只有一個資料節點。

選項分析

  • A. header != NULL
🔒

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

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

免費註冊

第 13 題

  1. Which of the following characterizes a Huffman coding tree?
    A. All items are stored at the leaves
    B. No nodes have one child
    C. The tree is balanced
    D. A and B only
    E. All three of A, B and C

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

這一題的完整詳解

核心觀念

Huffman coding tree 是用來建立最佳前綴碼(prefix code)的二元樹,目標是最小化加權外部路徑長度:

WPL=∑i=1nfidi\text{WPL}=\sum_{i=1}^{n} f_i d_i

其中 fif_i 是第 ii 個符號的出現頻率,did_i 是該符號所在葉節點的深度。

標準 Huffman tree 具有以下特徵:

  1. 每個資料符號都放在葉節點。
  2. 每個內部節點恰有兩個子節點,因此不存在只有一個子節點的節點。
  3. 樹不必平衡,形狀會依符號頻率而定。

解題方法

逐一判斷 Huffman tree 的樹結構特性即可。Huffman 演算法每次取出頻率最小的兩個節點合併,形成一個具有兩個子樹的內部節點。因此,最終樹的資料項目位於葉節點,內部節點則負責表示合併後的權重。

Huffman tree 的主要最佳化目標是降低 WPL,而不是維持樹的平衡。頻率越高的符號通常越接近根節點,頻率越低的符號可能位於較深的位置。

選項分析

  • A. All items are stored at the leaves

    正確。Huffman coding 是前綴碼,編碼對應到根節點至葉節點的路徑;資料符號必須放在葉節點,內部節點只代表子樹頻率的總和。

🔒

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

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

免費註冊

第 14 題

The next two questions apply to the following code fragment:
1 for(int i = 0; i < n; i++ )
2 for(int j = i; j <= n; j++ )
3 for (int k = i; k <= j; k++ )
4 sum++;
5
6 for(int p = 0; p < n*n; p++ )
7 sum--;
8
9. How many times is statement 4 executed?
A. O(N)
B. O(N2)
C. O(N3)
D. O(N4)
E. None of the above

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

這一題的完整詳解

核心觀念

本題考查巢狀迴圈的執行次數與漸近複雜度。關鍵在於:

  • k 迴圈的範圍會隨著 i、j 改變。
  • 迴圈上下界皆包含,因此從 i 到 j 共執行 j−i+1j-i+1 次。
  • 第 6~7 行的迴圈是在第 1~4 行之後執行,不會影響 statement 4 的執行次數。

解題方法

相關程式碼為:

for (int i = 0; i < n; i++)
    for (int j = i; j <= n; j++)
        for (int k = i; k <= j; k++)
            sum++;

固定 ii 與 jj 時,statement 4 的執行次數為:

j−i+1j-i+1

因此總執行次數為:

T(n)=∑i=0n−1∑j=in(j−i+1)T(n)=\sum_{i=0}^{n-1}\sum_{j=i}^{n}(j-i+1)

固定 ii,令 r=j−ir=j-i,則 rr 會從 00 到 n−in-i:

∑j=in(j−i+1)=∑r=0n−i(r+1)=(n−i+1)(n−i+2)2\sum_{j=i}^{n}(j-i+1) =\sum_{r=0}^{n-i}(r+1) =\frac{(n-i+1)(n-i+2)}{2}

所以:

T(n)=∑i=0n−1(n−i+1)(n−i+2)2T(n)=\sum_{i=0}^{n-1}\frac{(n-i+1)(n-i+2)}{2}

令 m=n−im=n-i,則 mm 從 nn 遞減至

🔒

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

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

免費註冊

第 15 題

  1. How many times is statement 7 executed?
    A. O(N)
    B. O(N2)
    C. O(N3)
    D. O(N4)
    E. None of the above

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

這一題的完整詳解

題目所對應的程式片段

1  for (int i = 0; i < n; i++)
2      for (int j = i; j <= n; j++)
3          for (int k = i; k <= j; k++)
4              sum++;

5  for (int p = 0; p < n*n; p++)
6      for (int q = 0; q < p; q++)
7          sum--;

第 15 題的 statement 7 是 sum--;,完整題面可見於官方試題第 3 頁:國立中山大學 109 學年度資料結構試題 PDF。

核心觀念

本題考查巢狀迴圈的執行次數分析,尤其要注意內層迴圈的上限會隨外層變數 pp 改變。

Big-O 表示成長的上界;若能求出精確次數並得到 Θ(N4)\Theta(N^4),即可判定其屬於 O(N4)O(N^4)。

解題方法

令 N=nN=n。statement 7 位於第二組巢狀迴圈中:

for (int p = 0; p < N*N; p++)
    for (int q = 0; q < p; q++)
        sum--;

外層變數 pp 的取值為

p=0,1,2,…,N2−1p=0,1,2,\ldots,N^2-1

固定某一個 pp 時,內層變數 qq 的取值為

q=0,1,2,…,p−1q=0,1,2,\ldots,p-1

因此 statement 7 對固定的 pp 會執行 pp 次。總執行次數為

🔒

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

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

免費註冊

第 16 題

  1. What is the running time of the following routine?
    bool isPrime ( int n)
    if (n == 2 || n == 3)
    return true;
    {
    if(n%2 == 0)
    return false;
    for(int i = 3; i <= squareRoot( n ); i+=2 )
    if(n% i == 0 )
    return false;
    }
    return true;
    A. 0(1)
    B. O(log N)
    C. O(N)
    D. O(N1/2)
    E. None of the above

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

這一題的完整詳解

核心觀念

本題考查:

  1. 質數判斷的基本定理。
  2. 迴圈執行次數的估算。
  3. 最壞情況時間複雜度。

若 nn 是合成數,必定存在一個因數不大於 n\sqrt{n}。因此,只需測試 33 到 n\sqrt{n} 的奇數因數,即可判斷 nn 是否為質數。


解題方法

程式的主要迴圈為:

for (int i = 3; i <= squareRoot(n); i += 2)
    if (n % i == 0)
        return false;

迴圈變數依序取:

3,5,7,…,⌊n⌋3,5,7,\ldots,\lfloor\sqrt{n}\rfloor

只檢查奇數,因此執行次數約為:

n2\frac{\sqrt{n}}{2}

忽略常數因子後:

T(n)=Θ(n)T(n)=\Theta(\sqrt{n})

也就是:

T(n)=O(n1/2)T(n)=O(n^{1/2})

最壞情況發生在 nn 為奇質數時,因為必須測試所有可能的奇數因數直到 n\sqrt{n},迴圈才結束。即使輸入是合成數,只要最小因數較大,也會執行相當多次。

前面的判斷:

if (n == 2 || n == 3)
    return true;

if (n % 2 == 0)
    return false;

都只需固定次數的運算,屬於 O(1)O(1),不影響整體最壞情況複雜度。


選項分析

  • A. O(1)O(1):錯誤
🔒

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

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

免費註冊

第 17 題

  1. Which data structure is used by the compiler to implement recursion?
    A. Map
    B. Priority queue
    C. Queue
    D. Set
    E. Stack

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

這一題的完整詳解

核心觀念

遞迴(recursion)是函式在執行過程中再次呼叫自身。每次函式呼叫都必須保存一組執行資訊,稱為 activation record(啟動記錄),內容通常包括:

  • 返回位址
  • 傳入參數
  • 區域變數
  • 暫存的執行狀態

這些記錄由系統放在呼叫堆疊(call stack)中管理。Stack 的特性是後進先出(LIFO),正好符合遞迴函式的返回順序:最後呼叫的函式,必須最先完成並返回。

解題方法

假設函式 f(n) 會遞迴呼叫 f(n-1):

  1. 呼叫 f(3),將 f(3) 的執行資訊放入 Stack。
  2. f(3) 呼叫 f(2),再將 f(2) 放入 Stack。
  3. f(2) 呼叫 f(1),再將 f(1) 放入 Stack。
  4. 遇到終止條件後,先完成 f(1),將其啟動記錄移出 Stack。
  5. 接著返回並完成 f(2)、f(3)。

堆疊內容的變化可表示為:

f(3)→f(2)→f(1)f(3) \rightarrow f(2) \rightarrow f(1)

返回時則按照:

f(1)→f(2)→f(3)f(1) \rightarrow f(2) \rightarrow f(3)
🔒

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

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

免費註冊

第 18 題

  1. What postfix expression does the expression tree below represent?
    [Image of an expression tree with operators +, -, * and operands a, b, c, d]
    🖼️【此處有附圖,請對照原卷】
🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 5 頁

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

這一題的完整詳解

核心觀念

將運算式樹轉成後序式(postfix expression),使用「左子樹、右子樹、根節點」的後序走訪順序。運算元會先輸出,運算子則在其左右運算元之後輸出。

解題方法

圖中的根節點是乘號 *。它的左子樹以加號 + 為根,左右子節點分別是 a、b;右子樹以減號 - 為根,左右子節點分別是 c、d。

依後序走訪:

  1. 左子樹輸出:a b +
  2. 右子樹輸出:c d -
  3. 最後輸出根節點:*

因此後序式為 a b + c d - *,即選項 C 的 ab+cd-*。

選項分析

🔒

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

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

免費註冊

第 19 題

  1. Which of the following represents an infix expression followed by the postfix equivalent?
    A. a+b-c and a b c - +
    B. a+bc and a b c
    +
    C. a+b
    c and a b c + *
    D. a+b
    c and a b + c

E. More than one of the above

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

這一題的完整詳解

核心觀念

本題考查中序式(infix expression)與後序式(postfix expression)的轉換,以及運算子的優先順序與結合方向。

  • 乘法 * 的優先權高於加法 + 與減法 -。
  • 加法與減法優先權相同,採由左至右結合。
  • 後序式不使用括號,運算子會放在其兩個運算元之後。

例如:

a+b∗c=a+(b∗c)a+b*c=a+(b*c)

其後序式為:

a b c ∗ +a\ b\ c\ *\ +

解題方法

可使用堆疊逐一讀取後序式:

  1. 遇到運算元便放入堆疊。
  2. 遇到運算子便取出堆疊最上方的兩個運算元。
  3. 先取出的作為右運算元,後取出的作為左運算元。
  4. 計算結果再放回堆疊。

其中 a b c * + 的處理為:

  • 讀入 a、b、c。
  • 遇到 *:取出 b、c,形成 b∗cb*c。
  • 遇到 +:取出 a、b∗cb*c,形成 a+(b∗c)a+(b*c)。

因此:

a b c ∗ +≡a+(b∗c)a\ b\ c\ *\ + \equiv a+(b*c)

選項分析

A. a+b−ca+b-c 與 a b c − +a\ b\ c\ -\ +

由於加、減法同級且由左至右結合:

a+b−c=(a+b)−ca+b-c=(a+b)-c

正確後序式應為:

a b + c −a\ b\ +\ c\ -

選項中的 a b c − +a\ b\ c\ -\ + 代表:

a+(b−c)a+(b-c)

與原中序式不相同,因此錯誤。

🔒

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

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

免費註冊

第 20 題

  1. The items 3, 6, 5, 2, 4, 7, 1 are inserted into a binary search tree. Which node is the deepest?
    A. 1
    B. 3
    C. 4
    D. 7
    E. None of the above

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

這一題的完整詳解

核心觀念

本題考查二元搜尋樹(Binary Search Tree, BST)的插入規則與節點深度。

  • 小於目前節點的鍵值,插入左子樹。
  • 大於目前節點的鍵值,插入右子樹。
  • 節點深度(depth)是該節點到根節點所經過的邊數。
  • 最深節點是深度最大的節點;深度相同時,屬於並列最深。

解題方法

依序插入 3,6,5,2,4,7,13,6,5,2,4,7,1:

  1. 33 成為根節點。
  2. 6>36>3,插入 33 的右子節點。
  3. 5>35>3 且 5<65<6,插入 66 的左子節點。
  4. 2<32<3,插入 33 的左子節點。
  5. 4>34>3、4<64<6、4<54<5,插入 55 的左子節點。
  6. 7>37>3 且 7>67>6,插入 66 的右子節點。
  7. 1<31<3 且 1<21<2,插入 22 的左子節點。

形成的二元搜尋樹如下:

        3
       / \
      2   6
     /   / \
    1   5   7
       /
      4

各節點深度為:

depth⁡(3)=0\operatorname{depth}(3)=0 depth⁡(2)=depth⁡(6)=1\operatorname{depth}(2)=\operatorname{depth}(6)=1
🔒

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

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

免費註冊

第 21 題

  1. What is the cost of the minimum spanning tree for the following graph?
    [Image of a weighted undirected graph with vertices V0 to V6]
    🖼️【此處有附圖,請對照原卷】
🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 6 頁

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

這一題的完整詳解

核心觀念

最小生成樹是在連通、無向、帶權圖中,選出能連接所有頂點且不形成迴圈的邊,使總權重最小。若圖有 nn 個頂點,生成樹必須恰有 n−1n-1 條邊。

解題方法

使用 Kruskal 演算法:將邊依權重由小到大排列,逐一加入不會形成迴圈的邊,直到選滿 7−1=67-1=6 條。

依圖中邊權重排序後,選取過程如下:

權重邊處理
1V0V3V_0V_3加入
2V0V1V_0V_1加入
3V1V3V_1V_3略過,會形成迴圈
4V0V2V_0V_2加入
5V3V6V_3V_6加入
6V3V4V_3V_4加入
🔒

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

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

免費註冊

第 22 題

  1. Approximately what is the maximum height of a binary search tree of N nodes?
    A. log N
    B. 1.38 log N
    C. 1.44 log N
    D. 2 log N
    E. None of the above

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

這一題的完整詳解

核心觀念

二元搜尋樹(Binary Search Tree, BST)只要求:

  • 左子樹所有鍵值小於根節點;
  • 右子樹所有鍵值大於根節點;
  • 每個子樹本身也符合上述規則。

一般 BST 沒有平衡限制,因此可能退化成一條鏈。

若樹高以「根到最深葉節點的邊數」計算,NN 個節點的最大高度為:

hmax⁡=N−1h_{\max}=N-1

若以「層數」計算,最大高度則為 NN。兩種定義都屬於 Θ(N)\Theta(N),而非 Θ(log⁡N)\Theta(\log N)。

解題方法

為使 BST 高度最大,讓每個節點都只有一個子節點。例如依遞增順序插入:

1,2,3,…,N1,2,3,\ldots,N

會形成完全向右的退化樹:

1→2→3→⋯→N1 \rightarrow 2 \rightarrow 3 \rightarrow \cdots \rightarrow N

從根節點 11 到最深節點 NN 共經過 N−1N-1 條邊,因此:

hmax⁡=N−1≈Nh_{\max}=N-1\approx N

所以最大高度是線性成長,不是對數成長。

選項分析

🔒

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

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

免費註冊

第 23 題

  1. Which operation is not supported in constant time by a double-ended queue?
    A. Insertion at the front or rear item
    B. Access of the front or rear item
    C. Deletion of the front or rear item
    D. Access and deletion of the minimum item
    E. All of the above are supported

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

這一題的完整詳解

核心觀念

雙端佇列(double-ended queue, deque)允許在「前端」與「後端」進行操作,標準操作及其時間複雜度如下:

  • 前端插入:O(1)O(1)
  • 後端插入:O(1)O(1)
  • 取得前端元素:O(1)O(1)
  • 取得後端元素:O(1)O(1)
  • 刪除前端元素:O(1)O(1)
  • 刪除後端元素:O(1)O(1)

deque 的核心限制是:只能保證兩端操作有效率,並不會依照元素大小排序,也不會自動維護最小值位置。

解題方法

判斷每個選項是否屬於 deque 的標準端點操作:

  1. 若操作只涉及前端或後端,通常可在常數時間完成。
  2. 若要找出最小元素,必須檢查 deque 中的元素,因為最小值可能位於任意位置。
  3. 對含有 nn 個元素的 deque,尋找最小值需要逐一比較,時間複雜度為
O(n)O(n)

因此,「取得並刪除最小元素」並非標準 deque 能保證在常數時間完成的操作。

選項分析

A. Insertion at the front or rear item

正確。deque 支援前端與後端插入。

以雙向鏈結串列實作時,只需調整前端或後端指標;以循環陣列實作時,也能透過索引移動完成。因此兩種操作皆可達到

O(1)O(1)

B. Access of the front or rear item

正確。deque 通常維護 front 與 rear 指標,取得兩端元素時可直接存取,不需走訪其他元素,時間複雜度為

O(1)O(1)
🔒

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

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

免費註冊

第 24 題

  1. Which of the following algorithm types classifies Huffman's algorithm?
    A. Backtracking algorithm
    B. Divide and conquer algorithm
    C. Dynamic programming algorithm
    D. Greedy algorithm
    E. None of the above

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

這一題的完整詳解

核心觀念

Huffman 演算法用於建立最佳前綴碼(optimal prefix code),常應用於資料壓縮。每個字元依出現頻率 fif_i 指派不同長度的二元編碼,目標是使加權平均編碼長度最小:

L=∑i=1nfiliL=\sum_{i=1}^{n} f_i l_i

其中:

  • fif_i:第 ii 個字元的出現頻率或機率
  • lil_i:該字元的編碼長度
  • LL:整體加權編碼長度

Huffman 演算法的核心規則是:每次選出目前頻率最小的兩個節點合併,將合併後的頻率重新放回集合,重複此步驟直到形成完整的二元樹。

這種「每一步都選擇當下最有利選項」的策略,正是 Greedy algorithm(貪心演算法)的特徵。

解題方法

判斷演算法類型時,觀察 Huffman 的決策方式:

  1. 將每個字元視為一個節點,權重為其出現頻率。
  2. 找出權重最小的兩個節點。
  3. 將兩者合併成新節點,新節點權重為兩者權重之和。
  4. 將新節點加入集合,繼續選取目前權重最小的兩個節點。
  5. 持續合併,直到只剩一個根節點。

例如頻率為 2,3,7,92,3,7,9:

  • 合併 22 與 33,得到 55
  • 此時集合為 5,7,95,7,9,合併 55 與 77,得到 1212
  • 此時集合為 9,129,12,合併成根節點 2121

每一步都直接選擇當下頻率最小的兩個節點,沒有列舉所有樹形,也沒有嘗試不同路徑後回溯。因此 Huffman 演算法屬於貪心法。

Huffman 演算法之所以能得到最佳結果,是因為它具有:

  • 貪心選擇性質:當下合併兩個最小頻率節點,不會破壞最佳解。
  • 最佳子結構:合併後的較小問題,其最佳解可以組成原問題的最佳解。

實作上通常使用最小堆積(min-heap)維護節點,因此時間複雜度為:

O(nlog⁡n)O(n\log n)

空間複雜度為:

O(n)O(n)

選項分析

🔒

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

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

免費註冊

第 25 題

  1. (複選)Which ones of the following are true?
    A. A full binary tree is a complete binary tree, and vice versa
    B. When using a max heap to implement a priority queue, the time complexity of both the push and
    pop operations are O(log N)
    C. The stack operations are according to the last-in first-out principle
    D. The average time complexity of finding an element in a binary search tree is O(N)
    E. The linked list operations are according to the last-in first-out principle

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

這一題的完整詳解

核心觀念

  • Full binary tree(滿二元樹):每個節點的子節點數量必為 00 或 22,不允許只有一個子節點。
  • Complete binary tree(完全二元樹):除了最底層外,其餘層皆填滿;最底層的節點必須由左至右排列。
  • Max heap(最大堆積):除了符合完全二元樹結構外,每個父節點的鍵值皆大於或等於子節點。
  • Stack(堆疊):遵循後進先出(LIFO, Last-In First-Out)。
  • Binary search tree(BST,二元搜尋樹):左子樹所有鍵值小於根節點,右子樹所有鍵值大於根節點。搜尋效率取決於樹高。
  • Linked list(鏈結串列):是一種資料儲存結構,本身不規定資料存取必須遵循 LIFO 或 FIFO。

解題方法

本題為複選題,逐一將各選項與上述定義及時間複雜度比較。

最大堆積的高度為

h=⌊log⁡2N⌋h=\lfloor \log_2 N \rfloor

因此,只要操作最多沿著樹高移動,其時間複雜度就是 O(log⁡N)O(\log N)。

選項分析

A. A full binary tree is a complete binary tree, and vice versa

錯誤。

滿二元樹與完全二元樹的定義不同,兩者不互相等價。

  • 滿二元樹要求每個節點必須有 00 或 22 個子節點。
  • 完全二元樹要求節點依層、由左至右填入,並不禁止某個節點只有一個子節點。

例如,根節點有左子節點、沒有右子節點的樹,可以是完全二元樹,但不是滿二元樹。

反過來,某些滿二元樹的形狀也不符合完全二元樹由左至右填滿的規則,因此兩者不能互相推導。

B. When using a max heap to implement a priority queue, the time complexity of both the push and pop operations are O(log N)

正確。

使用最大堆積實作優先佇列時:

  • Push(插入):新元素先放在陣列最後,再依序與父節點比較並向上調整(up-heap)。最多移動樹高 hh 層,因此為

    O(h)=O(log⁡N)O(h)=O(\log N)

🔒

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

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

免費註冊

其他考古題