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

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

第 1 題3 分

If a list of items B, C, A, D, E are enqueued into a queue in this order, what is the item that will be extracted when dequeuing from the queue the 2nd time?
A. B
B. C
C. A
D. E
E. D

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

這一題的完整詳解

核心觀念

Queue(佇列)遵守「先進先出」原則(FIFO, First In First Out):

  • enqueue:從隊尾加入元素。
  • dequeue:從隊首取出元素。
  • 元素的取出順序與加入順序相同。

解題方法

依序加入 B、C、A、D、EB、C、A、D、E 後,佇列由隊首至隊尾為:

B→C→A→D→EB \rightarrow C \rightarrow A \rightarrow D \rightarrow E

出隊順序如下:

  1. 第 1 次出隊:取出 BB
  2. 第 2 次出隊:取出 CC

因此,第 2 次從佇列取出的元素是 CC。

選項分析

🔒

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

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

免費註冊

第 2 題3 分

Which sorting algorithm takes the most space?
A. Quicksort
B. Selection Sort
C. Insertion Sort
D. Heapsort
E. Mergesort

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

這一題的完整詳解

核心觀念

本題比較各種排序法的「額外空間複雜度」(auxiliary space complexity),也就是除了原始輸入資料外,演算法執行時額外使用的陣列、暫存區與遞迴堆疊空間。

在一般陣列排序的標準分析中:

  • In-place 排序通常只需 Θ(1)\Theta(1) 額外空間。
  • 使用額外暫存陣列合併資料時,通常需要 Θ(n)\Theta(n) 額外空間。
  • 遞迴呼叫本身會使用遞迴堆疊,常見為 Θ(log⁡n)\Theta(\log n) 或最壞 Θ(n)\Theta(n)。

Merge Sort 在合併階段需要額外的暫存陣列,因此其額外空間通常為

Θ(n)+Θ(log⁡n)=Θ(n)\Theta(n)+\Theta(\log n)=\Theta(n)

解題方法

判斷每個選項是否需要建立與輸入規模 nn 同級的額外資料結構:

  1. 若只在原陣列內交換元素,通常為 Θ(1)\Theta(1)。
  2. 若有遞迴但沒有大型暫存陣列,通常為 Θ(log⁡n)\Theta(\log n)。
  3. 若合併或複製時建立大小為 nn 的暫存陣列,則為 Θ(n)\Theta(n)。

因此,標準陣列實作下,Merge Sort 的額外空間最大。

選項分析

A. Quicksort

Quicksort 通常採用 in-place partition,在原陣列內重新排列元素,不需要大小為 nn 的暫存陣列。

其主要額外空間來自遞迴堆疊:

  • 平均情況:約 Θ(log⁡n)\Theta(\log n)。
  • 最壞情況:若每次 pivot 都造成極度不平衡的切割,遞迴深度可能為 Θ(n)\Theta(n)。

不過在一般考題的標準比較中,Quicksort 通常以平均遞迴堆疊空間 Θ(log⁡n)\Theta(\log n) 評估;即使採用最佳化遞迴,也能控制堆疊空間。因此不是本題預期答案。

B. Selection Sort

Selection Sort 每一回合尋找剩餘元素中的最小值,再與目前位置交換,整個過程直接在原陣列內進行。

額外空間為

Θ(1)\Theta(1)
🔒

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

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

免費註冊

第 3 題4 分

What is the in-order traversal of the following binary search tree?
🖼️【此處有附圖,請對照原卷】
A. 3 20 25 30 31 39 50 51 60 65
B. 50 30 20 3 25 39 31 60 51 65
C. 3 25 20 31 39 30 51 65 60 50
D. 3 25 20 31 39 30 50 51 65 60
E. 65 60 51 50 39 31 30 25 20 3

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

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

這一題的完整詳解

核心觀念

二元搜尋樹(BST)的中序走訪順序是:先走訪左子樹,再走訪根節點,最後走訪右子樹。依照 BST 的大小關係,這樣走訪會依序得到由小到大的節點值。

解題方法

依圖中的樹,從左子樹開始做中序走訪:

  • 根節點 5050 的左子樹以 3030 為根。走訪 3030 的左子樹時,先走訪 2020 的左子節點 33,再走訪 2020,接著走訪 2020 的右子節點 2525,最後回到 3030。
  • 接著走訪 3030 的右子樹:3939 的左子節點是 3131,因此順序為 31、3931、39。
  • 左子樹完成後走訪根節點 5050。
  • 最後走訪右子樹:先走訪 6060 的左子節點 5151,再走訪 6060,最後走訪右子節點 6565。

完整順序為:

3, 20, 25, 30, 31, 39, 50, 51, 60, 653,\ 20,\ 25,\ 30,\ 31,\ 39,\ 50,\ 51,\ 60,\ 65

選項分析

🔒

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

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

免費註冊

第 4 題4 分

What is the time complexity of the following code?
int aggregate = 0;
for (int i = 1; i <= N; i = i * 2){
for (int j = N; j > 0; j--){
aggregate += i+j;
}
}
A. O(1)
B. O(N)
C. O(logN)
D. O(N^2)
E. O(NlogN)

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

這一題的完整詳解

核心觀念

本題考查巢狀迴圈的時間複雜度,以及:

  • 變數每次乘以 22,迴圈次數為對數級:Θ(log⁡N)\Theta(\log N)。
  • 變數每次減少 11,迴圈次數為線性級:Θ(N)\Theta(N)。
  • 巢狀迴圈的總執行次數,通常為外層次數乘以內層次數。

解題方法

關鍵程式碼如下:

for (int i = 1; i <= N; i = i * 2) {
    for (int j = N; j > 0; j--) {
        aggregate += i + j;
    }
}

外層迴圈中,ii 的取值依序為:

1,2,4,8,…,2k1,2,4,8,\ldots,2^k

當 2k≤N2^k \leq N 時仍會執行,因此外層迴圈次數為:

⌊log⁡2N⌋+1=Θ(log⁡N)\left\lfloor \log_2 N \right\rfloor+1=\Theta(\log N)

內層迴圈中,jj 從 NN 遞減至 11,共執行 NN 次,因此:

內層迴圈次數=Θ(N)\text{內層迴圈次數}=\Theta(N)

每次執行 aggregate += i + j 都是常數時間 O(1)O(1)。由於內外層迴圈為巢狀關係,總時間為:

T(N)=Θ(log⁡N)×Θ(N)=Θ(Nlog⁡N)T(N)=\Theta(\log N)\times\Theta(N) =\Theta(N\log N)

因此其時間複雜度可寫為:

O(Nlog⁡N)O(N\log N)
🔒

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

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

免費註冊

第 5 題4 分

Which node is in the largest strongly connected component of the following directed graph represented in an adjacency list?
🖼️【此處有附圖,請對照原卷】
A. B
B. H
C. I
D. F
E. G

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

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

這一題的完整詳解

核心觀念

強連通分量(strongly connected component, SCC)是有向圖中的一組頂點,其中任意兩個頂點都能彼此到達。判斷時要確認兩個方向都存在路徑;只有單向可達不算在同一個強連通分量。

解題方法

由圖中的 adjacency list 可讀出相關有向邊:

  • A→CA\to C、A→HA\to H
  • B→AB\to A
  • C→BC\to B、C→DC\to D
  • D→CD\to C、D→AD\to A
  • E→FE\to F、F→EF\to E
  • G→DG\to D、G→IG\to I
  • H→IH\to I

頂點 A,B,C,DA,B,C,D 彼此可達。例如:

A→C→B→AA\to C\to B\to A

而 C→DC\to D,且 D→CD\to C、D→AD\to A,所以 DD 也能到達這個環中的其他頂點。故最大的強連通分量是 {A,B,C,D}\{A,B,C,D\},共有 4 個頂點。

🔒

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

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

免費註冊

第 6 題4 分

Which item is the root of a red-black tree when constructed with the items 5, 7, 20, 31, 6, 2, 8, 1, 3, 26 inserted in this order?
A. 5
B. 6
C. 7
D. 8
E. 20

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

這一題的完整詳解

紅黑樹插入步驟概覽

插入序列主要調整目前根節點
55 為根,染黑5
77 為 5 的右子,保持紅5
207、20 為連紅;利用「重新著色」把 5、7 變黑、紅 → 再把 5 重新染黑5
3131 為 20 的右子,形成「直線」紅紅 → 左旋 7,交換顏色,根仍 55
66 為 7 的左子,引發「叔叔為紅」→ 重新著色,20 變紅5
🔒

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

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

免費註冊

第 7 題4 分

For a binary search tree whose pre-order traversal is 10 5 3 2 1 7 6 8 20 15 12 16 and in-order traversal is 1 2 3 5 6 7 8 10 12 15 16 20, what would be the 5th item in its post-order traversal?

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

這一題的完整詳解

核心觀念

二元搜尋樹(Binary Search Tree, BST)具有以下性質:

  • 每個節點的左子樹所有鍵值都小於該節點。
  • 每個節點的右子樹所有鍵值都大於該節點。
  • 前序走訪(pre-order):根節點 →\rightarrow 左子樹 →\rightarrow 右子樹。
  • 中序走訪(in-order):左子樹 →\rightarrow 根節點 →\rightarrow 右子樹。
  • 後序走訪(post-order):左子樹 →\rightarrow 右子樹 →\rightarrow 根節點。

BST 的中序走訪必定呈現遞增排序,因此可利用前序與中序走訪還原樹的結構。

解題方法

前序走訪的第一個元素必為整棵樹的根節點,因此根節點為 1010。

中序走訪中,1010 左側為左子樹,右側為右子樹:

  • 左子樹:1,2,3,5,6,7,81,2,3,5,6,7,8
  • 右子樹:12,15,16,2012,15,16,20

因此前序走訪可分成:

  • 左子樹:5,3,2,1,7,6,85,3,2,1,7,6,8
  • 右子樹:20,15,12,1620,15,12,16

繼續還原左子樹:

  • 根為 55
  • 55 的左子樹由 1,2,31,2,3 組成,根為 33
  • 33 的左子樹由 1,21,2 組成,根為 22,而 22 的左子節點為 11
  • 55 的右子樹由 6,7,86,7,8 組成,根為 77,左右子節點分別為 66、88

右子樹則為:

🔒

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

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

免費註冊

第 8 題4 分

What is the postfix expression of the following infix expression?
5+(7-2)2+5/2
A. +
-+5722/52
B. ++5*-722/52
C. 57+2-252/+
D. 572-2
+52/+
E. 57+22*-52/+

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

這一題的完整詳解

先根據運算子優先權與結合性設定堆疊流程:

  1. 讀入 5 → 輸出 5
  2. 讀入 + → 推入堆疊 +
  3. 讀入 ( → 推入堆疊 (
  4. 讀入 7 → 輸出 7
  5. 讀入 - → 推入堆疊 -(在 ( 之上)
  6. 讀入 2 → 輸出 2
  7. 讀入 ) → 依序彈出堆疊至 (,輸出 -,彈除 (
  8. 讀入 * → * 優先權高於堆疊頂 +,直接推入 *
  9. 讀入 2 → 輸出 2
🔒

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

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

免費註冊

第 9 題4 分

What is the weight of the minimal spanning tree of the following graph?
🖼️【此處有附圖,請對照原卷】
A. 33
B. 34
C. 35
D. 36
E. 37

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

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

這一題的完整詳解

核心觀念

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

本題有 14 個頂點,因此最小生成樹須選 13 條邊。可用 Kruskal 演算法:依權重由小到大選邊;若加入某邊會形成迴圈,就略過。

解題方法

依圖中邊的權重排序,逐步選取不形成迴圈的邊:

權重選取的邊小計
1BF, NE, CDBF,\ NE,\ CD3
2MG, GB, GH, AIMG,\ GB,\ GH,\ AI8
3IH, HKIH,\ HK6
4FE, FL, IJFE,\ FL,\ IJ12
6EDED6
🔒

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

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

免費註冊

第 10 題4 分

Which node among the nodes in the options is the last reached in a breadth-first search of the following graph when starting at the node A?
🖼️【此處有附圖,請對照原卷】
A. D
B. C
C. M
D. B
E. K

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

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

這一題的完整詳解

此題考驗對廣度優先搜尋 (Breadth-First Search, BFS) 演算法的理解,以及如何追蹤 BFS 遍歷過程中節點的訪問順序。

廣度優先搜尋 (BFS):
BFS 是一種圖遍歷演算法,它從起始節點開始,然後一層一層地訪問節點。它使用一個佇列 (queue) 來儲存待訪問的節點。

  1. 將起始節點加入佇列,並標記為已訪問。
  2. 當佇列不為空時:
    • 從佇列頭部取出一個節點。
    • 處理該節點(在此題中,我們只需要知道訪問順序)。
    • 將該節點所有未訪問過的鄰居節點加入佇列,並標記為已訪問。

圖示分析:
題目給出了一個無向圖,並要求從節點 A 開始進行 BFS,找出選項中哪個節點是最後被訪問到的。

BFS 模擬:
起始節點:A

  1. 初始化:

    • 佇列 (Queue): [A]
    • 已訪問 (Visited): {A}
    • 訪問順序 (Traversal Order): [A]
  2. 處理 A:

    • 從佇列取出 A。
    • A 的鄰居是 B, F, H (根據圖示)。
    • 將 B, F, H 加入佇列,並標記為已訪問。
    • 佇列: [B, F, H]
    • 已訪問: {A, B, F, H}
    • 訪問順序: [A, B, F, H]
  3. 處理 B:

    • 從佇列取出 B。
    • B 的鄰居是 A, C, F。A 和 F 已訪問。
    • 將 C 加入佇列,並標記為已訪問。
    • 佇列: [F, H, C]
    • 已訪問: {A, B, F, H, C}
    • 訪問順序: [A, B, F, H, C]
  4. 處理 F:

    • 從佇列取出 F。
    • F 的鄰居是 B, E, G。B 已訪問。
    • 將 E, G 加入佇列,並標記為已訪問。
    • 佇列: [H, C, E, G]
    • 已訪問: {A, B, F, H, C, E, G}
    • 訪問順序: [A, B, F, H, C, E, G]
  5. 處理 H:

    • 從佇列取出 H。
    • H 的鄰居是 A, G, I, N。A, G 已訪問。
    • 將 I, N 加入佇列,並標記為已訪問。
    • 佇列: [C, E, G, I, N]
    • 已訪問: {A, B, F, H, C, E, G, I, N}
    • 訪問順序: [A, B, F, H, C, E, G, I, N]
  6. 處理 C:

    • 從佇列取出 C。
    • C 的鄰居是 B, D, L。B 已訪問。
    • 將 D, L 加入佇列,並標記為已訪問。
    • 佇列: [E, G, I, N, D, L]
    • 已訪問: {A, B, F, H, C, E, G, I, N, D, L}
    • 訪問順序: [A, B, F, H, C, E, G, I, N, D, L]
  7. 處理 E:

    • 從佇列取出 E。
    • E 的鄰居是 F, M。F 已訪問。
    • 將 M 加入佇列,並標記為已訪問。
🔒

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

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

免費註冊

第 11 題4 分

How many compares are needed to find 26 in a binary search tree with the following items inserted into the tree initially in this order?
10, 22, 18, 1, 5, 20, 7, 70, 12, 3, 15, 55, 43, 61, 11, 26, 22, 67
A. 2
B. 3
C. 4
D. 5
E. 6

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

這一題的完整詳解

插入順序依次構成的二元搜尋樹(BST)如下(只列出關鍵節點與方向):

  • 10 為根
  • 22 為 10 的右子
  • 18 為 22 的左子
  • 1 為 10 的左子
  • 5 為 1 的右子、3 為 5 的左子、7 為 5 的右子
  • 20 為 18 的右子、12 為 20 的左子、11 為 12 的左子、15 為 12 的右子
🔒

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

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

免費註冊

第 12 題4 分

The first step of heapsort is to build a max heap from an input array. What will the last item of the input array [8,11,2,6,10,7,3,1,15] become after running heapify to generate and store a max heap?
A. 1
B. 2
C. 3
D. 6
E. 7

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

這一題的完整詳解

先以 0 起始索引視為完全二元樹,建構 max‑heap 時從最後一個非葉節點 i=⌊n/2⌋−1=3i=\lfloor n/2\rfloor-1=3 逆向 sift‑down:

  1. i=3i=3: 子節點 7  (1)7\;(1)、8  (15)8\;(15) → 交換 6↔156\leftrightarrow15
    → [8,11,2,15,10,7,3,1,6][8,11,2,15,10,7,3,1,6]

  2. i=2i=2: 子節點 5  (7)5\;(7)、6  (3)6\;(3) → 交換 2↔72\leftrightarrow7
    → [8,11,7,15,10,2,3,1,6][8,11,7,15,10,2,3,1,6]

  3. i=1i=1: 子節點 3  (15)3\;(15)、4  (10)4\;(10) → 交換 11↔1511\leftrightarrow15
    → [8,15,7,11,10,2,3,1,6][8,15,7,11,10,2,3,1,6]

🔒

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

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

免費註冊

第 13 題4 分

What is the number of connected components in the graph represented by the adjacency matrix below?
🖼️【此處有附圖,請對照原卷】
A. 1
B. 2
C. 3
D. 4
E. 5

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

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

這一題的完整詳解

核心觀念

連通分量是圖中「彼此有路徑相連,且不能再加入其他頂點」的最大頂點集合。每個孤立頂點也各自構成一個連通分量。

依圖中的鄰接矩陣,頂點為 AA 至 JJ,矩陣對稱,代表這是無向圖。

解題方法

從矩陣中找出值為 11 的位置,可讀出邊:

  • AA 與 E、JE、J 相連,因此形成 {A,E,J}\{A,E,J\}。
  • BB 與 G、IG、I 相連,且 GG 與 II 相連,因此形成 {B,G,I}\{B,G,I\}。
  • FF 與 HH 相連,因此形成 {F,H}\{F,H\}。
  • CC 沒有連到其他頂點,是孤立頂點。
  • DD 沒有連到其他頂點,也是孤立頂點。

所以共有五個連通分量:

🔒

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

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

免費註冊

第 14 題3 分

In a height-balanced binary search tree, the heights of the left and right descendants of any node differ by at most 1. Which of the following are true of such a tree?
I. Worst-case search time is logarithmic in the number of nodes.
II. Average-case search time is logarithmic in the number of nodes.
III. Best-case search time is proportional to the height of the tree.
IV. The height of the tree is logarithmic in the number of nodes.
A. I and III only
B. II and III only
C. II and IV only
D. I, II, and IV
E. I, III, and IV

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

這一題的完整詳解

核心觀念

本題考查高度平衡二元搜尋樹(height-balanced binary search tree)的搜尋時間與樹高性質。

對任一節點,若左右子樹高度差不超過 11,則稱其符合高度平衡條件。此類樹的關鍵性質為:

h=Θ(log⁡n)h=\Theta(\log n)

其中 hh 為樹高,nn 為節點數。

二元搜尋樹搜尋一個鍵值時,從根節點開始,每次依比較結果往左子樹或右子樹前進,因此搜尋時間與搜尋路徑長度有關,最多不超過樹高。


解題方法

逐項判斷四個敘述:

  1. 先利用高度平衡樹的定理判斷樹高是否為對數級。
  2. 再由搜尋路徑長度與樹高的關係,判斷最壞與平均情況。
  3. 最佳情況須特別注意:若搜尋值位於根節點,只需比較一次,並非一定要走完整棵樹高。

高度平衡樹的最少節點數可用遞迴表示:

N(h)=N(h−1)+N(h−2)+1N(h)=N(h-1)+N(h-2)+1

其成長速度與 Fibonacci 數列相近,因此:

N(h)=Θ(φh)N(h)=\Theta(\varphi^h)

取對數可得:

h=Θ(log⁡n)h=\Theta(\log n)

選項敘述判斷

I. Worst-case search time is logarithmic in the number of nodes.

正確。

最壞情況下,搜尋路徑可能從根走到最深葉節點,所需時間為:

Tworst=Θ(h)T_{\text{worst}}=\Theta(h)

由於高度平衡樹的高度為 Θ(log⁡n)\Theta(\log n),因此:

Tworst=Θ(log⁡n)T_{\text{worst}}=\Theta(\log n)

II. Average-case search time is logarithmic in the number of nodes.

正確。

在一般假設下,各節點被搜尋的機率相近,平均搜尋時間與平均深度相關。高度平衡樹的整體高度為 Θ(log⁡n)\Theta(\log n),其平均深度也維持在對數級,因此:

🔒

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

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

免費註冊

第 15 題3 分

Which of the following choices gives the best bound for the value of f(N)f(N) where ff is a solution to the recurrence:
f(2N+1)=f(2N)=f(N)+log⁡Nfor N≥1, with f(1)=0?f(2N+1)=f(2N)=f(N)+\log N \quad\text{for }N\geq 1,\text{ with }f(1)=0?

( A ) no; (A) O(log⁡N)O(\log N)
(B) O(Nlog⁡N)O(N\log N)
(C) O(log⁡N)+O(1)O(\log N)+O(1)
(D) O((log⁡N)2)O((\log N)^2)
(E) O(N)O(N)

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

這一題的完整詳解

核心觀念

本題考「反覆縮小輸入規模的遞迴式」與漸近界。對任意 n≥2n\ge 2,令 N=⌊n/2⌋N=\lfloor n/2\rfloor,題目給的兩種情況都可寫成:

f(n)=f ⁣(⌊n2⌋)+log⁡⌊n2⌋f(n)=f\!\left(\left\lfloor\frac n2\right\rfloor\right) +\log\left\lfloor\frac n2\right\rfloor

每次遞迴會將輸入約減半,因此遞迴層數是 Θ(log⁡n)\Theta(\log n)。但每層增加的代價也會隨輸入大小改變,不能只看層數;必須把各層代價加總。

解題方法

從 nn 開始反覆取一半並向下取整,遞迴每層所加的項依序為:

log⁡⌊n2⌋,log⁡⌊n4⌋,log⁡⌊n8⌋,…\log\left\lfloor\frac n2\right\rfloor,\quad \log\left\lfloor\frac n4\right\rfloor,\quad \log\left\lfloor\frac n8\right\rfloor,\quad \ldots

當輸入縮小至 11 時,f(1)=0f(1)=0,因此:

f(n)=∑j=1⌊log⁡2n⌋log⁡⌊n2j⌋f(n)=\sum_{j=1}^{\lfloor\log_2 n\rfloor} \log\left\lfloor\frac{n}{2^j}\right\rfloor

上界方面,總共有 O(log⁡n)O(\log n) 項,每一項至多為 log⁡n\log n,所以:

f(n)=O((log⁡n)2)f(n)=O((\log n)^2)
🔒

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

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

免費註冊

第 16 題3 分

The following pseudo code solves a set of equations Lx=bLx=b, where LL is a unit lower-triangular matrix (ones on the diagonal and zeros above the diagonal):

for i:=1i := 1 to nn do
 x[i]:=b[i]x[i] := b[i];

for i:=2i := 2 to nn do
 for j:=1j := 1 to i−1i-1 do
  <statement>

The missing <statement> in the code is:

(A) x[i]:=x[i]−L[i,j]∗x[j]x[i] := x[i]-L[i,j]*x[j]
(B) x[j]:=x[j]−L[i,j]∗x[i]x[j] := x[j]-L[i,j]*x[i]
(C) x[j]:=x[j]−L[i,j]∗x[j]x[j] := x[j]-L[i,j]*x[j]
(D) x[i]:=b[i]−L[i,j]∗x[i]x[i] := b[i]-L[i,j]*x[i]
(E) x[i]:=x[i]−L[i,j]∗x[i]x[i] := x[i]-L[i,j]*x[i]

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

這一題的完整詳解

核心觀念

本題考的是前代法(forward substitution):求解 Lx=bLx=b 時,因為 LL 是下三角矩陣,可以從第一列開始,逐列利用已求出的變數,更新目前列的右側常數。

「單位下三角矩陣」表示 L[i,i]=1L[i,i]=1,且對角線上方的元素為 00。因此第 ii 列方程式為:

x[i]+∑j=1i−1L[i,j]x[j]=b[i]x[i]+\sum_{j=1}^{i-1}L[i,j]x[j]=b[i]

移項後可寫成:

x[i]=b[i]−∑j=1i−1L[i,j]x[j]x[i]=b[i]-\sum_{j=1}^{i-1}L[i,j]x[j]

解題方法

依原卷圖,第 16 題給定先將每個 x[i]x[i] 設為 b[i]b[i],再依序令 i=2,…,ni=2,\ldots,n、j=1,…,i−1j=1,\ldots,i-1。因此,每次內層迴圈都要從目前的 x[i]x[i] 扣除 L[i,j]x[j]L[i,j]x[j];已完成的 x[j]x[j] 是前面列求得的值。

逐項更新的式子是:

x[i]←x[i]−L[i,j]x[j]x[i]\leftarrow x[i]-L[i,j]x[j]

這正是選項 (A)。

選項分析

🔒

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

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

免費註冊

第 17 題3 分

Consider the following equations concerning a stack that has the operations PushPush, PopPop, TopTop, and IsEmptyIsEmpty. Which of the equations does not represent the conventional semantics of a stack?

(A) IsEmpty(Push(Stack,Elem))=trueIsEmpty(Push(Stack, Elem))=true
(B) Pop(Push(Stack,Elem))=StackPop(Push(Stack, Elem))=Stack
(C) Top(Push(Stack,Elem))=ElemTop(Push(Stack, Elem))=Elem
(D) IsEmpty(Push(Push(Stack,Elem1),Elem2))=falseIsEmpty(Push(Push(Stack, Elem1), Elem2))=false
(E) Top(Pop(Push(Push(Stack,Elem1),Elem2)))=Elem1Top(Pop(Push(Push(Stack, Elem1), Elem2)))=Elem1

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

這一題的完整詳解

核心觀念

堆疊(Stack)遵守後進先出(LIFO):最後放入的元素會最先取出。令 SS 表示原堆疊,ee 表示元素,則:

  • Push(S,e)Push(S,e):將 ee 放到堆疊頂端。
  • Pop(S)Pop(S):移除堆疊頂端元素。
  • Top(S)Top(S):取得堆疊頂端元素,但不移除。
  • IsEmpty(S)IsEmpty(S):判斷堆疊是否為空。

只要執行 Push(S,e)Push(S,e),結果堆疊就至少含有 ee,因此不會是空堆疊。

解題方法

逐一依照堆疊操作定義代入。特別注意,PushPush 後的新元素位於頂端;連續 PushPush 會使後加入的元素在前一個元素上方。接著按照 LIFO 順序判斷 PopPop 與 TopTop 的結果。

選項分析

(A) IsEmpty(Push(Stack,Elem))=trueIsEmpty(Push(Stack, Elem))=true:錯誤。
執行 PushPush 後,堆疊至少含有 ElemElem,所以它不是空堆疊:

IsEmpty(Push(Stack,Elem))=falseIsEmpty(Push(Stack, Elem))=false
🔒

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

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

免費註冊

第 18 題3 分

In the following pseudo code of binary search one can determine whether an integer xx is present in the sorted (in ascending order) array a[1..R]a[1..R].

Let M=(L+R)div2M=(L+R)\mathbin{\mathrm{div}}2.
If x=a[M]x=a[M], then terminate (success).
If x<a[M]x<a[M] and M>LM>L, use the same algorithm on a[L..M−1]a[L..M-1].
If x>a[M]x>a[M] and M<RM<R, use the same algorithm on a[M+1..R]a[M+1..R].
Otherwise terminate (failure).

Which of the following statements is (are) true about binary search in a[1..N]a[1..N], where NN is a positive integer?

I. If xx is present in a[1..N]a[1..N], then xx is always found within O(log⁡N)O(\log N) comparisons.
II. If xx is not present in a[1..N]a[1..N], then failure is always reached within O(log⁡N)O(\log N) comparisons.
III. Searching for two different values of xx, neither of which is present in a[1..N]a[1..N], always takes the same number of steps to determine failure.

(A) I only
(B) II only
(C) III only
(D) I and II
(E) II and III

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

這一題的完整詳解

核心觀念

二分搜尋每次檢查目前區間的中間位置 MM,再把搜尋範圍縮小到左半部或右半部。若目前區間長度為 nn,下一層的區間長度至多為 ⌊n/2⌋\lfloor n/2\rfloor,因此搜尋層數為 O(log⁡N)O(\log N)。

題目中的邊界條件也很重要:當 M=LM=L 或 M=RM=R 時,搜尋區間已無法再依條件往該側縮小;若此時仍未找到 xx,便以失敗結束。

解題方法

每往下一層,區間大小至多減半。經過 kk 層後,區間大小至多為 N/2kN/2^k。當區間縮小至空或單一位置時,搜尋便會結束,所以層數至多與 log⁡2N\log_2 N 成正比。

每一層只需進行固定次數的比較,例如先比較 x=a[M]x=a[M],再判斷 x<a[M]x<a[M] 或 x>a[M]x>a[M]。因此,成功與失敗搜尋的比較次數都不超過 O(log⁡N)O(\log N)。

判斷 III 則需比較不同缺值的搜尋路徑。搜尋樹各葉節點深度不一定相同,兩個缺值可能在不同層數才到達失敗條件。

選項分析

I 正確。 若 xx 存在,每次搜尋最多將區間縮小至原來的一半。搜尋層數為 O(log⁡N)O(\log N),每層比較次數為常數,因此成功搜尋最多需要 O(log⁡N)O(\log N) 次比較。

🔒

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

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

免費註冊

第 19 題3 分

A data structure is comprised of nodes each of which has exactly two pointers to other nodes, with no null pointers. The following pseudo code is to be used to count the number of nodes accessible from a given node. It uses a mark field, assumed to be initially zero for all nodes. There is a statement missing from this code.

struct test { int info, mark; struct test *p, *q; }
int nodecount(struct test *a)
{
 if (a->mark) return 0;
 return nodecount(a->p) + nodecount(a->q) + 1;
}

Which change should be made to make the code work properly?

(A) Add “a→mark=1;a\to mark=1;” as the first statement.
(B) Add “a→mark=1;a\to mark=1;” after the “if” statement.
(C) Add “a→mark=1;a\to mark=1;” as the last statement.
(D) Add “a→mark=0;a\to mark=0;” after the “if” statement.
(E) Add “a→mark=0;a\to mark=0;” as the last statement.

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

這一題的完整詳解

核心觀念

這題考查圖形走訪中的「已訪問標記」。每個節點有兩個指標,形成一張有向圖;圖中可能有環,也可能有多條路徑通往同一節點。計算可到達的節點數時,每個節點只能計算一次。

正確做法是在第一次到達節點時,先檢查標記,再立刻設為已訪問,最後才遞迴走訪兩個指標。這樣遇到環或重複路徑時,遞迴會在已訪問的節點停止。

解題方法

若節點 aa 已標記,表示它先前已被計數,因此直接回傳 00。若尚未標記,就先將 aa 標記,再走訪 a→pa\to p 與 a→qa\to q,並把本節點算入總數:

int nodecount(struct test *a)
{
    if (a->mark) return 0;
    a->mark = 1;
    return nodecount(a->p) + nodecount(a->q) + 1;
}
🔒

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

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

免費註冊

第 20 題3 分

For Tree1 and Tree2 indicated below, which traversals of Tree1 and Tree2, respectively, will produce the same sequence of node names?

🖼️【此處有附圖,請對照原卷】

(A) Preorder, postorder
(B) Postorder, inorder
(C) Postorder, postorder
(D) Postorder, preorder
(E) None of the above

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

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

這一題的完整詳解

核心觀念

二元樹的三種走訪順序為:

  • 前序:根、左子樹、右子樹。
  • 中序:左子樹、根、右子樹。
  • 後序:左子樹、右子樹、根。

本題要分別對 Tree1、Tree2 套用選項指定的走訪方式,再比較節點名稱的順序是否完全相同。

解題方法

圖中 Tree1 的根為 A;A 的左右子節點為 B、C。B 的右子節點為 D;D 的左右子節點為 E、F;E 的左右子節點為 G、H,且 H 的右子節點為 I、I 的右子節點為 J。Tree2 的根為 G,右子節點為 F;F 的左右子節點為 E、C;E 的左子節點為 I,I 的左右子節點為 J、H;C 的左右子節點為 D、A,且 D 的右子節點為 B。

先算 Tree1 的後序。依序走訪左子樹、右子樹、根:

Tree1 後序: G, J, I, H, E, F, D, B, C, A\text{Tree1 後序: } G,\ J,\ I,\ H,\ E,\ F,\ D,\ B,\ C,\ A

再算 Tree2 的中序。依序走訪左子樹、根、右子樹:

Tree2 中序: G, J, I, H, E, F, D, B, C, A\text{Tree2 中序: } G,\ J,\ I,\ H,\ E,\ F,\ D,\ B,\ C,\ A
🔒

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

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

免費註冊

第 21 題3 分

Consider the following sorting algorithms, which has a running time that is least dependent on the initial ordering of the input?

(A) Insertion sort
(B) Selection sort
(C) Quicksort
(D) Merge sort
(E) Shellsort

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

這一題的完整詳解

核心觀念

題目考的是排序演算法的執行時間會不會隨輸入資料的初始排列改變。比較時要看演算法執行了多少次比較與資料移動,而不能只看排序後的結果。

選擇排序每一趟都掃描尚未排序的部分,找出其中最小元素;無論資料原本如何排列,掃描範圍都相同。因此,它的比較次數固定為:

(n−1)+(n−2)+⋯+1=n(n−1)2(n-1)+(n-2)+\cdots+1=\frac{n(n-1)}{2}

執行時間為 Θ(n2)\Theta(n^2),且比較次數不受輸入初始順序影響。

解題方法

判斷各演算法的執行過程是否會因資料排列而改變:

  • 若比較或掃描次數會隨輸入順序改變,執行時間便較依賴初始排列。
  • 若演算法固定執行相同的比較流程,時間便較不受初始排列影響。

選擇排序每一趟都檢查完整的未排序區段,總比較次數固定。因此,在選項中,它的執行時間最不依賴初始排列。

選項分析

(A) Insertion sort:錯誤。
插入排序的執行時間會受到初始順序影響。輸入已排序時,每個元素只需少量比較,最佳情況為 Θ(n)\Theta(n);輸入反向排序時,元素需大量移動,最差情況為 Θ(n2)\Theta(n^2)。

🔒

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

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

免費註冊

第 22 題3 分

Consider a given undirected graph GG, which of the following problems is currently known to be solvable in polynomial time?

(A) Finding a shortest cycle in GG
(B) Finding a longest simple cycle in GG
(C) Finding all spanning trees of GG
(D) Finding a largest clique in GG
(E) None of the above

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

這一題的完整詳解

核心觀念

本題考的是圖論問題的計算複雜度:判斷問題能否在輸入大小的多項式時間內求解。無向圖 GG 有頂點與邊;「簡單環」是不重複經過頂點(起點與終點相同除外)的環;「生成樹」是包含所有頂點的樹;「團」則是彼此兩兩相鄰的頂點集合。

解題方法

依原卷第 22 題,題目給的是一般無向圖 GG,詢問哪一種問題已知可在多項式時間內求解;沒有指定頂點或邊的數量,也沒有提供一張特定圖要計算。逐項辨認這些問題的複雜度:最短環可用廣度優先搜尋求解;最長簡單環與最大團是 NP-hard 問題;列出所有生成樹則可能需要輸出指數多棵樹。

選項分析

  • (A) Finding a shortest cycle in GG:正確。 對每條邊 e=(u,v)e=(u,v),暫時移除 ee,再用廣度優先搜尋找 uu 到 vv 的最短路徑。若找到長度為 dd 的路徑,加回 ee 就得到長度為 d+1d+1 的環。取所有邊所形成環中的最小值,即為最短環。每條邊執行一次廣度優先搜尋,時間複雜度為 O(∣E∣(∣V∣+∣E∣))O(|E|(|V|+|E|)),是多項式時間。若圖中沒有環,則沒有最短環可回報。
🔒

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

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

免費註冊

第 23 題3 分

Consider the following data structures for a set of nn distinct integers:

I. A min-heap
II. An array of length nn sorted in increasing order
III. A balanced binary search tree

For which of the above data structures is the number of steps needed to find and remove the 7-th largest element O(log⁡n)O(\log n) in the worst case?

(A) I only
(B) II only
(C) I and II
(D) I and III
(E) II and III

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

這一題的完整詳解

核心觀念

本題比較三種資料結構中,找出並刪除「第 7 大元素」的最壞情況時間。判斷時要看結構提供的排序資訊,以及刪除指定元素後需要移動或調整多少資料。

第 7 大是固定名次。固定名次對時間複雜度很重要:即使資料結構無法直接依名次查找,若只需從最大值往前走固定 6 個元素,這段操作仍是常數時間。

解題方法

原卷第 23 題列出三種結構:min-heap、遞增排序陣列、平衡二元搜尋樹;題目問最壞情況下,找出並移除第 7 大元素是否可在 O(log⁡n)O(\log n) 內完成。

逐一看「找到」與「移除」的成本:

  • **I. Min-heap:**只保證父節點不大於子節點,沒有左右子樹或兄弟節點之間的完整大小次序。最大值所在位置不固定,找到第 7 大可能須檢查線性數量的節點,因此最壞情況是 O(n)O(n)。無法保證 O(log⁡n)O(\log n)。
  • **II. 遞增排序陣列:**第 7 大位於從陣列尾端往前數第 7 個位置,可直接定位。刪除時只須將它後方的 6 個較大元素往前移,因此查找與移除合計為 O(1)O(1),符合 O(log⁡n)O(\log n) 上界。
🔒

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

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

免費註冊

第 24 題4 分

A doubly linked list is declared as:

Element = record
 Value: integer;
 Fwd, Bwd: ↑\uparrowElement
end;

Where Fwd and Bwd represent forward and backward links to adjacent elements of the list. Which of the following codes deletes the element pointed to by XX from the doubly linked list, if it is assumed that XX points to neither the first nor the last element of the list?

(A) X↑.Bwd↑.Fwd:=X↑.Fwd;X\uparrow.Bwd\uparrow.Fwd := X\uparrow.Fwd;
  X↑.Fwd↑.Bwd:=X↑.BwdX\uparrow.Fwd\uparrow.Bwd := X\uparrow.Bwd

(B) X↑.Bwd↑.Fwd:=X↑.Bwd;X\uparrow.Bwd\uparrow.Fwd := X\uparrow.Bwd;
  X↑.Fwd↑.Bwd:=X↑.FwdX\uparrow.Fwd\uparrow.Bwd := X\uparrow.Fwd

(C) X↑.Bwd↑.Bwd:=X↑.Fwd;X\uparrow.Bwd\uparrow.Bwd := X\uparrow.Fwd;
  X↑.Fwd↑.Fwd:=X↑.BwdX\uparrow.Fwd\uparrow.Fwd := X\uparrow.Bwd

(D) X↑.Bwd↑.Bwd:=X↑.Bwd;X\uparrow.Bwd\uparrow.Bwd := X\uparrow.Bwd;
  X↑.Fwd↑.Fwd:=X↑.FwdX\uparrow.Fwd\uparrow.Fwd := X\uparrow.Fwd

(E) X↑.Bwd:=X↑.Fwd;X\uparrow.Bwd := X\uparrow.Fwd;
  X↑.Fwd:=X↑.BwdX\uparrow.Fwd := X\uparrow.Bwd

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

這一題的完整詳解

核心觀念

雙向鏈結串列的每個節點有兩個連結:

  • Fwd 指向後方相鄰節點。
  • Bwd 指向前方相鄰節點。

刪除中間節點時,必須讓它的前一個節點與後一個節點直接相連。設:

  • P=X↑.BwdP = X\uparrow.Bwd,即 XX 的前一個節點。
  • N=X↑.FwdN = X\uparrow.Fwd,即 XX 的後一個節點。

刪除 XX 後,應滿足:

P↑.Fwd=N,N↑.Bwd=PP\uparrow.Fwd = N,\qquad N\uparrow.Bwd = P

解題方法

將題目中的兩個指標更新式分別對照上述條件:

  1. 從 PP 向前走,應直接到 NN:
    X↑.Bwd↑.Fwd := X↑.Fwd
  2. 從 NN 向後走,應直接回到 PP:
    X↑.Fwd↑.Bwd := X↑.Bwd

因此,正確更新方式是:

X↑.Bwd↑.Fwd := X↑.Fwd
X↑.Fwd↑.Bwd := X↑.Bwd

這兩個更新都需要執行,才能維持串列的前向與後向連結一致。

選項分析

  • (A) 正確。 第一行將 XX 的前一個節點之 Fwd 改指向 XX 的後一個節點;第二行將 XX 的後一個節點之 Bwd 改指向 XX 的前一個節點。
🔒

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

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

免費註冊

第 25 題4 分

In the tree below, some nodes nn have an attribute Color(n)Color(n). To determine a color for a given node nn, the following pseudo code is executed.

🖼️【此處有附圖,請對照原卷】

function FindColor(n):ColorFindColor(n): Color;
begin
 if nn has attribute Color then
  FindColor:=Color(n)FindColor := Color(n)
 else
  FindColor:=FindColor(Parent(n))FindColor := FindColor(Parent(n))
end;

If FindColor(n)FindColor(n) is evaluated for each node nn, how many evaluations of FindColor(n)FindColor(n) will result in Red?

(A) 2
(B) 3
(C) 4
(D) 5
(E) 6

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

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

這一題的完整詳解

核心觀念

FindColor(n) 會從節點 nn 開始往父節點尋找:遇到第一個具有 Color 屬性的節點,就回傳該節點的顏色。因此,沒有標示顏色的節點會繼承其最近的有色祖先之顏色。

解題方法

圖中根節點標示為藍色;左子樹的上方節點標示為紅色,其右子節點標示為藍色,左側下方葉節點標示為綠色。右子樹中,根的右子節點未標色,其右子節點標示為紅色。

逐一判斷各節點回傳的顏色:

節點位置FindColor 回傳
左子樹的紅色節點紅
紅色節點的左子節點(未標色)紅
紅色節點的右子節點(藍色)藍
左側未標色節點的左葉(綠色)綠
左側未標色節點的右葉(未標色)紅
根的右子節點(未標色)藍
根右子節點的左葉(藍色)藍
🔒

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

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

免費註冊

第 26 題4 分

An independent set II of nodes of a graph GG is a collection of nodes of GG such that no two nodes of II are adjacent in GG. A maximal independent set MM of a graph GG is an independent set such that if xx is any node of GG not included in MM, then M∪{x}M\cup\{x\} is not an independent set. Which of the following is a maximal independent set of the graph in the figure?

🖼️【此處有附圖,請對照原卷】

(A) {a,e}\{a,e\}
(B) {a,g}\{a,g\}
(C) {b,e,d}\{b,e,d\}
(D) {b,e,g}\{b,e,g\}
(E) None of the above

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

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

這一題的完整詳解

核心觀念

獨立集是任兩個節點都不相鄰的節點集合。極大獨立集除了本身是獨立集外,還必須無法再加入任何一個圖中的其他節點而維持獨立。

解題方法

依圖可讀出節點為 a,b,c,d,e,f,ga,b,c,d,e,f,g,邊為 ab,bc,ae,ce,ef,ad,df,cg,fgab,bc,ae,ce,ef,ad,df,cg,fg。先檢查各選項中的節點是否彼此不相鄰,再檢查是否有未選節點能加入。

選項分析

  • (A) {a,e}\{a,e\}:錯。 aa 與 ee 由邊 aeae 相連,因此不是獨立集。
  • (B) {a,g}\{a,g\}:對。 aa 與 gg 不相鄰,所以是獨立集。未選的 b,d,eb,d,e 都與 aa 相鄰,c,fc,f 都與 gg 相鄰;
🔒

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

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

免費註冊

第 27 題4 分

Let TT denote a nonempty binary tree in which every node either is a leaf or has two children. Then:

n(T)n(T) denotes the number of non-leaf nodes of TT (where n(T)=0n(T)=0 if TT is a leaf),
h(T)h(T) denotes the height of TT (where h(T)=0h(T)=0 if TT is a leaf),
TLT_L denotes the left subtree of TT, and TRT_R denotes the right subtree of TT.

If FF is a function defined as follows:

F(T)={0if T is a leaf,F(TL)+F(TR)+min⁡(h(TL),h(TR))otherwise,F(T)= \begin{cases} 0 & \text{if }T\text{ is a leaf},\\ F(T_L)+F(T_R)+\min(h(T_L),h(T_R)) & \text{otherwise}, \end{cases}

Then F(T)=F(T)=

(A) n(T)+h(T)−1n(T)+h(T)-1
(B) n(T)+h(T)n(T)+h(T)
(C) n(T)+h(T)+1n(T)+h(T)+1
(D) n(T)−h(T)n(T)-h(T)
(E) n(T)−h(T)−1n(T)-h(T)-1

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

這一題的完整詳解

核心觀念

這題考二元樹的遞迴定義與數學歸納法。每個內部節點恰有兩個子節點,因此若 TT 不是葉節點:

n(T)=n(TL)+n(TR)+1n(T)=n(T_L)+n(T_R)+1

而樹高為:

h(T)=max⁡(h(TL),h(TR))+1h(T)=\max(h(T_L),h(T_R))+1

解題關鍵是利用:

h(TL)+h(TR)−min⁡(h(TL),h(TR))=max⁡(h(TL),h(TR))h(T_L)+h(T_R)-\min(h(T_L),h(T_R)) =\max(h(T_L),h(T_R))

解題方法

以樹的結構做歸納,證明:

F(T)=n(T)−h(T)F(T)=n(T)-h(T)

基底情形: 若 TT 是葉節點,題目定義 F(T)=0F(T)=0、n(T)=0n(T)=0、h(T)=0h(T)=0,所以:

F(T)=0=n(T)−h(T)F(T)=0=n(T)-h(T)

歸納步驟: 假設左右子樹都符合 F(T)=n(T)−h(T)F(T)=n(T)-h(T)。對非葉節點 TT:

F(T)=F(TL)+F(TR)+min⁡(h(TL),h(TR))=n(TL)−h(TL)+n(TR)−h(TR)+min⁡(h(TL),h(TR))=n(TL)+n(TR)−max⁡(h(TL),h(TR))=n(T)−h(T)\begin{aligned} F(T) &=F(T_L)+F(T_R)+\min(h(T_L),h(T_R))\\ &=n(T_L)-h(T_L)+n(T_R)-h(T_R)+\min(h(T_L),h(T_R))\\ &=n(T_L)+n(T_R)-\max(h(T_L),h(T_R))\\ &=n(T)-h(T) \end{aligned}
🔒

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

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

免費註冊

第 28 題4 分

Consider the collection of all undirected graphs with 10 nodes and 6 edges. Let MM and mm, respectively, be the maximum and minimum number of connected components in any graph in the collection. If a graph has no self-loops and there is at most one edge between any pair of nodes, which of the following is true?

(A) M=10, m=10M=10,\ m=10
(B) M=10, m=1M=10,\ m=1
(C) M=7, m=4M=7,\ m=4
(D) M=6, m=4M=6,\ m=4
(E) M=6, m=3M=6,\ m=3

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

這一題的完整詳解

核心觀念

連通分量是圖中彼此可達的最大節點集合。對有 nn 個節點的圖,若加入一條連接兩個不同連通分量的邊,連通分量數會減少 11;若邊兩端已在同一分量,連通分量數不變。

本題有 1010 個節點、66 條邊,且沒有自我迴圈、任兩節點間至多一條邊。題目要找連通分量數的最大值 MM 與最小值 mm。

解題方法

原卷第 28 題給定無向圖有 1010 個節點、66 條邊,並限制沒有自我迴圈、每對節點間至多一條邊;選項 C 為 M=7, m=4M=7,\ m=4。

先求最小連通分量數。每條邊最多只能讓連通分量數減少 11,所以從 1010 個分量出發,使用 66 條邊後至少還有

m≥10−6=4m \ge 10-6=4

這個下界可以達成:讓 77 個節點形成一棵樹,使用 66 條邊,另外 33 個節點各自孤立,總共正好有 44 個連通分量。因此 m=4m=4。

再求最大連通分量數。把邊集中在最少節點上,能讓其餘節點保留為孤立節點。任意 33 個節點之間最多只有 (32)=3\binom{3}{2}=3 條邊;要放下 66 條不同的邊,至少需要 44 個節點。用這 44 個節點組成完全圖 K4K_4,恰有 66 條邊,其他 66 個節點孤立,連通分量數為

M=1+6=7M=1+6=7
🔒

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

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

免費註冊

其他考古題