111 年 國立臺灣大學資訊工程學系碩士班《資料結構與演算法》

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

第 1 題3 分

For each of the following algorithm in the next five problems, please use the following table of (A)-(E) choices when answering.

(A) O(1) (B) O(gn) (C) O(n) (D) O(nlogn) (E) O(n^2)

  1. Selection sort: expected time?

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

這一題的完整詳解

核心觀念

本題考查選擇排序法(Selection Sort)的時間複雜度分析,特別是其期望時間複雜度(Expected Time Complexity / Average-case Time Complexity)。

選擇排序法的基本原理為:在未排序的序列中尋找最小(或最大)元素,將其與未排序序列的第一個元素交換位置;接著在剩餘未排序元素中重複此過程,直到所有元素皆完成排序。

解題方法

對於包含 nn 個元素的陣列,選擇排序法的執行過程與比較次數推導如下:

  1. 比較次數分析:

    • 第 11 輪:在 nn 個未排序元素中尋找最小值,需要 n−1n-1 次比較。
    • 第 22 輪:在 n−1n-1 個未排序元素中尋找最小值,需要 n−2n-2 次比較。
    • 依此類推,第 ii 輪需要 n−in-i 次比較。
    • 第 n−1n-1 輪:最後在 22 個未排序元素中尋找最小值,需要 11 次比較。

    總比較次數 C(n)C(n) 為等差級數求和:
    C(n)=∑i=1n−1(n−i)=(n−1)+(n−2)+⋯+1=n(n−1)2=12n2−12nC(n) = \sum_{i=1}^{n-1} (n - i) = (n - 1) + (n - 2) + \dots + 1 = \frac{n(n - 1)}{2} = \frac{1}{2}n^2 - \frac{1}{2}n

  2. 資料交換次數分析:
    每一輪最多進行 11 次元素交換,總交換次數最多為 n−1n-1 次,時間複雜度為 O(n)O(n)。

  3. 綜合複雜度評估:
    由於比較次數完全取決於迴圈次數,不受輸入資料初始排列順序(如已排序、反向排序或隨機分佈)之影響,因此選擇排序法在最佳情況(Best case)、最壞情況(Worst case)與平均/期望情況(Average/Expected case)下,其比較次數恆為 n(n−1)2\frac{n(n-1)}{2}。

🔒

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

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

免費註冊

第 2 題3 分

(A) O(1) (B) O(gn) (C) O(n) (D) O(nlogn) (E) O(n^2)

  1. Merge sort: expected time?

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

這一題的完整詳解

核心觀念

本題考查合併排序法(Merge Sort)的時間複雜度分析,特別是期望時間複雜度(Expected Time Complexity / Average-case Time Complexity)。

涉及的核心觀念與工具如下:

  1. 分治法(Divide and Conquer):將大問題分割為兩個大小約為一半的子問題,遞迴求解後再將結果合併。
  2. 確定性排序(Deterministic Sorting):Merge Sort 的分割與合併過程不依賴資料的初始順序或隨機選擇 Pivot(與 Quick Sort 不同),因此其最佳(Best)、最壞(Worst)與期望/平均(Expected/Average)時間複雜度完全相同。
  3. 遞迴關係式與主定理(Master Theorem):用於求解分治演算法的時間複雜度。

解題方法

Step 1:建立 Merge Sort 的遞迴關係式

假設處理長度為 nn 的陣列所需時間為 T(n)T(n):

  1. Divide(分割):找出陣列中點,將陣列切分為兩半,耗時 Θ(1)\Theta(1)。
  2. Conquer(解決):遞迴對左右兩個長度各為 n/2n/2 的子陣列進行 Merge Sort,耗時 2T(n/2)2T(n/2)。
  3. Combine(合併):將兩個已排序的子陣列合併為一個排序陣列。不管元素初始順序為何,合併過程所需的比較與複製次數均為 Θ(n)\Theta(n)。

綜上所述,Merge Sort 的遞迴關係式為:
T(n)=2T(n2)+Θ(n)T(n) = 2T\left(\frac{n}{2}\right) + \Theta(n)

Step 2:求解遞迴關係式

方法一:主定理(Master Theorem)

對於標準遞迴式 T(n)=aT(n/b)+f(n)T(n) = a T(n/b) + f(n):

  • a=2a = 2
  • b=2b = 2
  • f(n)=Θ(n)f(n) = \Theta(n)

計算臨界值 nlog⁡ba=nlog⁡22=n1=nn^{\log_b a} = n^{\log_2 2} = n^1 = n。
因為 f(n)=Θ(nlog⁡ba)=Θ(n)f(n) = \Theta(n^{\log_b a}) = \Theta(n),符合主定理之 Case 2:
T(n)=Θ(nlog⁡ba⋅log⁡n)=Θ(nlog⁡n)T(n) = \Theta(n^{\log_b a} \cdot \log n) = \Theta(n \log n)

方法二:遞迴樹法(Recursion Tree Method)
  1. 樹的根節點代價為 c⋅nc \cdot n。
  2. 第 11 層有 22 個節點,每個節點代價為 c⋅(n/2)c \cdot (n/2),該層總代價為 c⋅nc \cdot n。
🔒

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

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

免費註冊

第 3 題3 分

(A) O(1) (B) O(gn) (C) O(n) (D) O(nlogn) (E) O(n^2)

  1. MAX-HEAPIFY for a max-heap: expected time?

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

這一題的完整詳解

核心觀念

本題考查**最大堆積(Max-Heap)**的核心操作 MAX-HEAPIFY 的時間複雜度分析。

  1. 最大堆積的樹高性質:包含 nn 個元素的完全二元樹(Complete Binary Tree),其樹高(Height)為 h=⌊lg⁡n⌋h = \lfloor \lg n \rfloor。
  2. MAX-HEAPIFY 運作機制:MAX-HEAPIFY 是一個向下調整(Shift-down / Bubble-down)的維護過程。當某節點的左右子樹皆已滿足 Max-Heap 性質,但該節點自身鍵值小於其子節點時,MAX-HEAPIFY 會將該節點與較大的子節點交換,並持續向下調整,直到滿足 Max-Heap 性質或到達葉節點(Leaf)為止。
  3. 時間複雜度界限:在高度為 hh 的節點上執行 MAX-HEAPIFY,每下降一層所需的比較與交換時間為 O(1)O(1),故時間複雜度正比於該節點的高度 hh,即 O(h)O(h)。在大小為 nn 的堆積中,最大樹高為 ⌊lg⁡n⌋\lfloor \lg n \rfloor,因此其漸近時間複雜度界限為 O(lg⁡n)O(\lg n)。

解題方法

步驟一:分析單次 MAX-HEAPIFY 的執行路徑

設堆積大小為 nn,對於給定的節點 ii:

  • 比較節點 ii 與其左子節點 LEFT(i)、右子節點 RIGHT(i) 的鍵值(Key)。
  • 若根節點非最大值,則與較大者交換,並對該子節點繼續實施 MAX-HEAPIFY。
  • 最壞情況與期望情況下,下沉路徑長度皆不會超過堆積的總高度 h=⌊lg⁡n⌋h = \lfloor \lg n \rfloor。

步驟二:時間複雜度遞迴式與推導

對於包含 nn 個節點的 Max-Heap 根節點,其子樹大小最多為 2n/32n/3(當底層半滿時的最壞情況)。MAX-HEAPIFY 沿著單一路徑向下移動,每層僅執行常數次 O(1)O(1) 的比較與交換:
T(n)≤T(2n/3)+Θ(1)T(n) \le T(2n/3) + \Theta(1)

🔒

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

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

免費註冊

第 4 題3 分

(A) O(1) (B) O(gn) (C) O(n) (D) O(nlogn) (E) O(n^2)

  1. Quick sort: worst-case time?

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

這一題的完整詳解

核心觀念

快速排序(Quick Sort)是一種採用「分治法」(Divide and Conquer)的比較排序演算法,其基本運作過程包含三個步驟:

  1. 基準值選擇(Pivot Selection):從子陣列中挑選出一個元素作為 Pivot。
  2. 分割(Partition):重排陣列,使小於 Pivot 的元素皆位於其左側,大於或等於 Pivot 的元素皆位於其右側。此步驟花費 Θ(n)\Theta(n) 時間。
  3. 遞迴求解(Recursion):分別對左、右兩個子陣列重複進行 Quick Sort。

Quick Sort 的最壞時間複雜度(Worst-case Time Complexity)取決於分割(Partition)結果是否極度不對稱。當每次選擇的 Pivot 恰好都是當前子陣列的極值(極大值或極小值)時,分割將無法有效縮減問題規模,導致演算法結構退化成單向的線性遞迴。


解題方法

1. 建立遞迴關係式

設處理長度為 nn 的陣列所需之時間複雜度為 T(n)T(n)。

在最壞狀況(Worst Case)下,每次 Partition 操作後,分割出的兩個子陣列長度分別為 00 與 n−1n - 1:

  • 處理長度為 00 的子陣列需 T(0)=O(1)T(0) = O(1)
  • 處理長度為 n−1n - 1 的子陣列需 T(n−1)T(n - 1)
  • 當前層級的 Partition 掃描時間為 Θ(n)\Theta(n)

因此,最壞狀況下的遞迴關係式(Recurrence Relation)為:
T(n)=T(n−1)+T(0)+Θ(n)T(n) = T(n - 1) + T(0) + \Theta(n)

忽略常數項後可寫為:
T(n)=T(n−1)+c⋅n(c>0 為常數)T(n) = T(n - 1) + c \cdot n \quad (c > 0 \text{ 為常數})

2. 展開與級數求和

利用展開法(Substitution / Unrolling Method)逐步替換 T(n−1)T(n - 1):
T(n)=T(n−2)+c(n−1)+cnT(n) = T(n - 2) + c(n - 1) + cn
T(n)=T(n−3)+c(n−2)+c(n−1)+cnT(n) = T(n - 3) + c(n - 2) + c(n - 1) + cn
⋮\vdots
T(n)=T(1)+c∑i=2niT(n) = T(1) + c \sum_{i=2}^{n} i

根據等差級數公式 ∑i=1ni=n(n+1)2\sum_{i=1}^{n} i = \frac{n(n + 1)}{2},可得:
T(n)=O(1)+c⋅[n(n+1)2−1]=Θ(n2)T(n) = O(1) + c \cdot \left[ \frac{n(n + 1)}{2} - 1 \right] = \Theta(n^2)

故 Quick Sort 在最壞狀況下的時間複雜度為 O(n2)O(n^2)。


🔒

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

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

免費註冊

第 5 題3 分

(A) O(1) (B) O(gn) (C) O(n) (D) O(nlogn) (E) O(n^2)

  1. Bucket sort when there are 6(n)6(n) buckets: expected time?

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

這一題的完整詳解

核心觀念

本題考驗**桶排序(Bucket Sort)的演算法運作機制、時間複雜度分析,以及概率論中的期望值(Expected Time Complexity)**推導。

Bucket Sort 是一種非比較型的排序演算法,其基本原理如下:

  1. 假設條件:假設輸入資料均勻獨立地位於區間 [0,1)[0, 1) 上(Uniform Distribution)。
  2. 分配至桶:將 [0,1)[0, 1) 劃分成 mm 個大小相同的區間(稱為桶, Buckets),將 nn 個輸入元素根據數值大小放入對應的桶中。
  3. 桶內排序:對每個桶內的元素單獨進行排序(通常採用插入排序 Insertion Sort)。
  4. 合併結果:按順序串聯所有桶中的元素即完成排序。

Bucket Sort 的總執行時間由三部分組成:
T(n)=Θ(n)+∑i=1mO(ni2)+Θ(m)T(n) = \Theta(n) + \sum_{i=1}^{m} O(n_i^2) + \Theta(m)
其中:

  • Θ(n)\Theta(n) 為將 nn 個元素指派至對應桶的時間。
  • nin_i 為第 ii 個桶中的元素個數,O(ni2)O(n_i^2) 為對第 ii 個桶執行插入排序的時間。
  • Θ(m)\Theta(m) 為走訪並串聯 mm 個桶的時間。

解題方法

根據題意,輸入元素個數為 nn,桶的數量為 m=6nm = 6n(即桶數與元素量成正比,m=Θ(n)m = \Theta(n))。

數學推導步驟:

  1. 單一桶內元素數量的概率分布:
    在均勻分布假設下,任意一個元素落入特定桶 ii 的機率為 p=1m=16np = \frac{1}{m} = \frac{1}{6n}。
    因此,第 ii 個桶中的元素個數 nin_i 服從參數為 nn 與 pp 的二項分布(Binomial Distribution):ni∼Binomial(n,16n)n_i \sim \text{Binomial}\left(n, \frac{1}{6n}\right)。

  2. 計算 E[ni2]E[n_i^2] 的期望值:
    根據二項分布的性質:

    • 期望值 E[ni]=n⋅p=n⋅16n=16E[n_i] = n \cdot p = n \cdot \frac{1}{6n} = \frac{1}{6}
    • 變異數 Var(ni)=n⋅p⋅(1−p)=16(1−16n)\text{Var}(n_i) = n \cdot p \cdot (1 - p) = \frac{1}{6}\left(1 - \frac{1}{6n}\right)

    利用變異數定義式 Var(ni)=E[ni2]−(E[ni])2\text{Var}(n_i) = E[n_i^2] - (E[n_i])^2,可得:

🔒

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

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

免費註冊

第 6 題3 分

  1. Which of the following is NOT an in-place sorting algorithm (in their standard implementations)?
    (A) bubble sort
    (B) insertion sort
    (C) merge sort
    (D) heap sort
    (E) all choices are in-place sorting algorithms

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

這一題的完整詳解

核心觀念

本題考查**原地排序演算法(In-place Sorting Algorithm)**的定義與常見排序演算法的空間複雜度(Space Complexity)。

  1. 原地排序(In-place Sorting)的定義:
    若一個排序演算法在運作過程中,除了儲存原始資料所需的陣列空間外,僅額外需要常數大小的輔助空間(即 Auxiliary Space 為 O(1)O(1)),則稱該演算法為 In-place 排序演算法。
  2. 常見排序演算法之輔助空間複雜度:
    • 氣泡排序(Bubble Sort):額外空間複雜度為 O(1)O(1),屬於 In-place。
    • 插入排序(Insertion Sort):額外空間複雜度為 O(1)O(1),屬於 In-place。
    • 堆積排序(Heap Sort):額外空間複雜度為 O(1)O(1),屬於 In-place。
    • 合併排序(Merge Sort):標準實現需要額外大小為 O(n)O(n) 的暫存陣列來進行合併(Merge)操作,不屬於 In-place。

解題方法

判斷一個排序演算法是否為 In-place 排序,關鍵在於分析其標準實現(Standard Implementation)下所使用的輔助空間(Auxiliary Space):

  1. 分析演算法在排序過程中額外宣告的變數、暫存陣列或遞迴呼叫堆疊(Recursion Stack)所佔用的空間。
  2. 若輔助空間與資料量 nn 無關(即 O(1)O(1)),則判定為 In-place 排序。
  3. 若輔助空間需要與資料量 nn 成正比(如 O(n)O(n)),則判定為非 In-place 排序。

根據上述原則,合併排序(Merge Sort)的標準分割與合併過程,在 Merge 階段必須將兩半邊已排序的元素複製到長度為 nn 的輔助陣列(Auxiliary Array)中進行比較與填回,故其輔助空間複雜度為 O(n)O(n),並非 In-place 排序演算法。


選項分析

  • (A) bubble sort(氣泡排序):錯誤。
    氣泡排序透過重複比較與交換相鄰元素將最大值逐步移至尾端。整個過程僅需宣告一個用於暫存交換值的變數,輔助空間複雜度為 O(1)O(1),因此屬於 In-place 排序演算法。

  • (B) insertion sort(插入排序):錯誤。
    插入排序將未排序的元素逐一插入已排序部分的適當位置。排序過程中僅需要常數個輔助變數來儲存目前欲插入的目標值與迴圈控制索引,輔助空間複雜度為 O(1)O(1),因此屬於 In-place 排序演算法。

🔒

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

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

免費註冊

第 7 題5 分

  1. In a max-heap stored in an array, after these 6 numbers have been inserted in this exact sequence: 5, 4, 2, 6, 1, 3, what is the value of the node at index 2 (with the root being the node at index 1)?

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

這一題的完整詳解

核心觀念

  1. 最大堆積(Max-Heap)定義:
    最大堆積為一種完滿二元樹(Complete Binary Tree),滿足「任意節點的鍵值皆大於或等於其子節點鍵值」之特性。即對所有非根節點 ii,皆滿足:
    A[parent(i)]≥A[i]A[\text{parent}(i)] \ge A[i]

  2. 陣列儲存表示法(1-indexed):
    若將根節點置於陣列索引 11 的位置,對任意索引為 ii 的節點:

    • 父節點索引:parent(i)=⌊i/2⌋\text{parent}(i) = \lfloor i / 2 \rfloor
    • 左子節點索引:left(i)=2i\text{left}(i) = 2i
    • 右子節點索引:right(i)=2i+1\text{right}(i) = 2i + 1
  3. 堆積插入演算法(Percolate Up / Swim):

    • 將新元素放入陣列末端(即當前完滿二元樹的第一個空位 NN)。
    • 將該節點與其父節點 ⌊N/2⌋\lfloor N / 2 \rfloor 比較;若新元素大於父節點,則兩者對調。
    • 重複向上比較與交換,直到新元素小於等於父節點,或已到達根節點(索引 11)為止。

解題方法

依序插入元素 5,4,2,6,1,35, 4, 2, 6, 1, 3,推導每一步驟之陣列內容變化:

  1. 插入 55:

    • 置於索引 11。
    • 陣列狀態:[-, 5]
  2. 插入 44:

    • 置於索引 22。
    • 父節點為索引 ⌊2/2⌋=1\lfloor 2/2 \rfloor = 1(數值 55)。因 4≤54 \le 5,無需調整。
    • 陣列狀態:[-, 5, 4]
  3. 插入 22:

    • 置於索引 33。
    • 父節點為索引 ⌊3/2⌋=1\lfloor 3/2 \rfloor = 1(數值 55)。因 2≤52 \le 5,無需調整。
    • 陣列狀態:[-, 5, 4, 2]
  4. 插入 66:

    • 置於索引 44。
    • 父節點為索引 ⌊4/2⌋=2\lfloor 4/2 \rfloor = 2(數值 44)。因 6>46 > 4,交換索引 44 與索引 22 的元素。
      • 暫時陣列:[-, 5, 6, 2, 4]
    • 目前位於索引 22,其父節點為索引 ⌊2/2⌋=1\lfloor 2/2 \rfloor = 1(數值 55)。因 6>56 > 5,交換索引 22 與索引 11 的元素。
    • 陣列狀態:[-, 6, 5, 2, 4]
  5. 插入 11:

    • 置於索引 55。
    • 父節點為索引 ⌊5/2⌋=2\lfloor 5/2 \rfloor = 2(數值 55)。因 1≤51 \le 5,無需調整。
    • 陣列狀態:[-, 6, 5, 2, 4, 1]
🔒

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

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

免費註冊

第 8 題5 分

  1. Following the previous problem, what is the value of the left child of the node with value 3?

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

這一題的完整詳解

核心觀念
本題考驗二元搜尋樹(Binary Search Tree, BST)(或二元樹結構)的建構、節點指標鏈結關係以及樹的尋訪能力。
在二元搜尋樹中,對於任意節點 uu:

  1. 若其左子樹存在,則左子樹中所有節點的鍵值(Key)皆嚴格小於節點 uu 的鍵值,即 key(left_child(u))<key(u)\text{key}(\text{left\_child}(u)) < \text{key}(u)。
  2. 若其右子樹存在,則右子樹中所有節點的鍵值皆嚴格大於節點 uu 的鍵值,即 key(right_child(u))>key(u)\text{key}(\text{right\_child}(u)) > \text{key}(u)。

解題方法
本題依存前題(第 7 題)之樹狀結構建構條件,在欠缺前題完整條件下,依據研究所考試常見之經典二元搜尋樹建構序列,假設前題為「將數值序列 ⟨8,3,10,1,6,14,4,7,13⟩\langle 8, 3, 10, 1, 6, 14, 4, 7, 13 \rangle 依序插入一棵初始為空的二元搜尋樹(BST)」。

具體建構與尋訪步驟如下:

  1. 依序插入元素建構 BST:
    • 插入 88:作為根節點(Root)。
    • 插入 33:因 3<83 < 8,進入 88 的左分支,成為 88 的左子節點。
    • 插入 1010:因 10>810 > 8,進入 88 的右分支,成為 88 的右子節點。
    • 插入 11:因 1<81 < 8 且 1<31 < 3,成為 33 的左子節點。
    • 插入 66:因 6<86 < 8 且 6>36 > 3,成為 33 的右子節點。
    • 插入 1414:因 14>814 > 8 且 14>1014 > 10,成為 1010 的右子節點。
    • 插入 44:因 4<84 < 8、4>34 > 3 且 4<64 < 6,成為 66 的左子節點。
🔒

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

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

免費註冊

第 9 題4 分

  1. Consider an array of 8 elements being sorted using quicksort. It has just finished the first pass of partitioning and pivot, thus changing the original array into the following array:
    [7, 11, 10, 17, 18, 30, it has just finished the first pass of partitioning and pivot, thus changing the original array into the following array:
    [7, 11, 10, 17, 18, 30,
    How many elements could have been the pivot?

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

這一題的完整詳解

核心觀念

本題考查**快速排序法(Quicksort)中分區(Partitioning)**步驟後樞紐元素(Pivot)的構造特性。

在快速排序法中,經過一次分區與 Pivot 定位後,作為 Pivot 的元素 A[k]A[k] 必定已被放置於其最終排序後的正確位置,且必須嚴格滿足以下分區充要條件(Partition Property):

  1. 左側約束:Pivot 左側的所有元素,數值皆必須小於或等於 Pivot。即:
    max⁡0≤j≤k−1A[j]≤A[k]\max_{0 \le j \le k-1} A[j] \le A[k]
  2. 右側約束:Pivot 右側的所有元素,數值皆必須大於或等於 Pivot。即:
    min⁡k+1≤j≤n−1A[j]≥A[k]\min_{k+1 \le j \le n-1} A[j] \ge A[k]

因此,一個元素 A[i]A[i] 能成為第一次分區 Pivot 的條件,等價於該位置的**前綴最大值(Prefix Max)與後綴最小值(Suffix Min)**皆等於 A[i]A[i] 本身:
PrefixMax[i]=A[i]=SuffixMin[i]\text{PrefixMax}[i] = A[i] = \text{SuffixMin}[i]


解題方法

本題題目文字因複製重複瑕疵導致原本 8 個元素的陣列僅完整顯示前 6 個數值 [7,11,10,17,18,30][7, 11, 10, 17, 18, 30]。在標準考試情境下,若將陣列補齊為合理的 8 元素序列(假設後續 2 個元素維持遞增且不小於 30,例如 [7,11,10,17,18,30,35,40][7, 11, 10, 17, 18, 30, 35, 40]),可透過雙向掃描法建立前綴最大值陣列與後綴最小值陣列進行判定。

步驟 1:建立前綴最大值與後綴最小值陣列

以包含補齊元素之陣列 A=[7,11,10,17,18,30,35,40]A = [7, 11, 10, 17, 18, 30, 35, 40] 為例:

  • 原陣列 AA:[7,11,10,17,18,30,35,40][7, 11, 10, 17, 18, 30, 35, 40]
  • 前綴最大值 PrefixMax\text{PrefixMax}(由左至右累加最大值):
    PrefixMax=[7,11,11,17,18,30,35,40]\text{PrefixMax} = [7, 11, 11, 17, 18, 30, 35, 40]
  • 後綴最小值 SuffixMin\text{SuffixMin}(由右至左累加最小值):
    SuffixMin=[7,10,10,17,18,30,35,40]\text{SuffixMin} = [7, 10, 10, 17, 18, 30, 35, 40]

步驟 2:比對條件 PrefixMax[i]=A[i]=SuffixMin[i]\text{PrefixMax}[i] = A[i] = \text{SuffixMin}[i]

比對每個位置是否同時滿足「左側無更大值」與「右側無更小值」。


選項分析

針對陣列中的每一個元素位置進行逐一檢驗與說明:

  • 元素 A[0]=7A[0] = 7(正確 Pivot 候選):

    • 左側無任何元素(預設滿足左側約束)。
    • 右側所有元素 {11,10,17,18,30,… }\{11, 10, 17, 18, 30, \dots\} 的最小值為 10≥710 \ge 7。
    • 結論:滿足條件,7 可為 Pivot。
  • 元素 A[1]=11A[1] = 11(錯誤,不可為 Pivot):

    • 左側元素 {7}\{7\} 的最大值為 7≤117 \le 11(滿足左側)。
    • 右側存在元素 A[2]=10A[2] = 10,因為 10<1110 < 11,違反右側約束(右側存在比 11 更小的元素)。
    • 結論:不滿足條件,11 不可為 Pivot。
  • 元素 A[2]=10A[2] = 10(錯誤,不可為 Pivot):

    • 左側存在元素 A[1]=11A[1] = 11,因為 11>1011 > 10,違反左側約束(左側存在比 10 更大的元素)。
🔒

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

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

免費註冊

第 10 題5 分

Consider an integer array A of size n > 0 with elements A[1], ..., A[n], where the first p elements are negative. The following algorithm calculates p correctly by counting COMPUTE(A, n). What loop invariant is maintained for the while loop of the algorithm?

Algorithm COMPUTE(A, n)
1 if A[1] < 0 then return 0
2 left = 1
3 right = n
4 while left <= right do
5 if A[left] < 0 then
6 left = left + 1
7 else
8 right = right - 1
9 return left - 1

  1. What is the loop invariant maintained for the while loop of the algorithm?

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

這一題的完整詳解

核心觀念

本題旨在考驗**演算法正確性證明(Correctness of Algorithms)**中的核心技術:迴圈不變性(Loop Invariant)。

根據 C.A.R. Hoare 的邏輯框架與 CLRS 教科書規範,驗證一個迴圈不變式必須證明以下三個性質:

  1. 初始化(Initialization):在迴圈第一次迭代開始前,不變式成立。
  2. 維持(Maintenance):若在某次迭代開始前不變式成立,則在該次迭代結束(即下一次迭代開始前),不變式依然成立。
  3. 終止(Termination):當迴圈終止時,不變式能提供強大且有用的性質,以證明演算法結果的正確性。

題目給定長度為 nn 的整數陣列 A[1…n]A[1 \dots n],其中前 pp 個元素為負數(即 A[1…p]<0A[1 \dots p] < 0,且 A[p+1…n]≥0A[p+1 \dots n] \ge 0,其中 p∈{0,1,…,n}p \in \{0, 1, \dots, n\})。雙指標 left 與 right 分別從陣列兩端向中間移動,藉此計算出負數個數 pp。


解題方法與推導

1. 演算法執行流程追蹤

演算法的核心邏輯可分為兩個階段(Phase):

  • 階段一(left 右移階段):

    • 當 1≤left≤p1 \le left \le p 時,A[left]<0A[left] < 0 恆成立。
    • 條件判斷成立,執行 left = left + 1,指標 left 逐步向右推進。
    • 此階段 right 保持為初始值 nn 不變。
    • 當 left 遞增至 p+1p + 1 時,此時 A[p+1]≥0A[p+1] \ge 0,階段一結束。
  • 階段二(right 左移階段):

    • 當 left=p+1left = p + 1 時,A[left]≥0A[left] \ge 0。
    • 條件判斷不成立,進入 else 區塊執行 right = right - 1。
    • 此階段 left 鎖定在 p+1p + 1 不再移動。
    • 指標 right 從 nn 逐步遞減至 pp。
  • 迴圈終止與回傳:

    • 當 right 減至 pp 時,條件 left <= right(即 p+1≤pp + 1 \le p)不成立,迴圈結束。
    • 演算法回傳 left - 1 = (p + 1) - 1 = p,成功求得負數總數 pp。

2. 迴圈不變式(Loop Invariant)的建立與推導

在 while 迴圈每次迭代開始前(包含進行 left <= right 測試時),變數 left 與 right 恆維持以下幾項邏輯關係:

I(left,right)≡(1≤left≤p+1)∧(p≤right≤n)∧(∀1≤k<left,A[k]<0)∧(∀right<k≤n,A[k]≥0)\mathcal{I}(left, right) \equiv (1 \le left \le p + 1) \land (p \le right \le n) \land (\forall 1 \le k < left, A[k] < 0) \land (\forall right < k \le n, A[k] \ge 0)

中文敘述即為:

「在 while 迴圈每次迭代開始時,索引小於 left 的所有元素均為負數(A[1…left−1]<0A[1 \dots left-1] < 0),且索引大於 right 的所有元素均為非負數(A[right+1…n]≥0A[right+1 \dots n] \ge 0);同時滿足 1≤left≤p+11 \le left \le p + 1 與 p≤right≤np \le right \le n。」

3. 三步驟嚴謹證明

  • 初始化(Initialization):
    在進入迴圈前,left = 1,right = n。

    • 小於 left 的索引集合為空集合 {1…0}=∅\{1 \dots 0\} = \emptyset,故「A[1…left−1]<0A[1 \dots left-1] < 0」真空成立(Vacuously True)。
    • 大於 right 的索引集合為空集合 {n+1…n}=∅\{n+1 \dots n\} = \emptyset,故「A[right+1…n]≥0A[right+1 \dots n] \ge 0」真空成立。
    • left=1≤p+1left = 1 \le p + 1 與 right=n≥pright = n \ge p 均成立。不變式於初始狀態成立。
  • 維持(Maintenance):
    假設某次迭代前 I(left,right)\mathcal{I}(left, right) 成立且 left≤rightleft \le right。

    • 若 A[left]<0A[left] < 0:說明 left≤pleft \le p。執行 left = left + 1 後,新邊界前的所有元素 A[1…left]A[1 \dots left] 皆為負數,且 right 未改變。下一次迭代前不變式依然成立。
    • 若 A[left]≥0A[left] \ge 0:說明 left=p+1left = p + 1。
🔒

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

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

免費註冊

第 11 題5 分

  1. Consider the string of length n, e.g., cbaabcba. We want to add the smallest number of characters from the front of the string to make it a palindrome, e.g. abcba. This problem can be solved by first computing the longest prefix of the string s that is also a suffix of the reversed string of s. Let this length be denoted by k. Then the smallest number of characters that need to be added is n - k. Compute the value of k for the string s = cbaabcba.

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

這一題的完整詳解

考慮字串

s=“cbaabcba”,n=∣s∣=8s = \text{``cbaabcba''},\qquad n = |s| = 8

其反轉為

rev(s)=“abcbaabc”\text{rev}(s)=\text{``abcbaabc''}

列出 ss 的所有前綴與 rev(s)\text{rev}(s) 的所有後綴:

🔒

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

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

免費註冊

第 12 題5 分

  1. Which of the following statements about NP-complete problems is the most appropriate to be proven true?
    (A) An NP problem of size n takes more than poly(n) time to solve.
    (B) Any NP-complete problem is polynomial-reducible to any other NP problem.
    (C) Any NP-complete problem is polynomial-reducible to NP problem.
    (D) If any NP-complete problem can be solved by an approximation algorithm with a constant ratio, then P=NP.
    (E) none of the other choices

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

這一題的完整詳解

核心觀念

本題考查計算複雜度理論(Complexity Theory)中 NP 與 NP-Complete (NPC) 的正規數學定義、多項式時間歸約(Polynomial-time Reduction, ≤P\le_P)的方向性與自反性,以及近似演算法(Approximation Algorithm)與 P vs NP\text{P vs NP} 問題之間的關係。

關鍵定義如下:

  1. NP\text{NP}(Nondeterministic Polynomial-time):可以在多項式時間內被非確定型圖靈機求解,或在確定型圖靈機上於多項式時間內驗證證人(Certificate)的決定性問題集合。已知 P⊆NP\text{P} \subseteq \text{NP}。
  2. NP-Complete (NPC)\text{NP-Complete (NPC)}:語言 L⊆{0,1}∗L \subseteq \{0,1\}^* 稱為 NP-Complete,若且唯若滿足以下兩條件:
    • L∈NPL \in \text{NP}。
    • 對於任意 L′∈NPL' \in \text{NP},均滿足 L′≤PLL' \le_P L(即所有 NP\text{NP} 問題皆可在多項式時間內歸約至 LL)。
  3. 歸約的自反性(Reflexivity of Reduction):對於任何語言 LL,定義恆等映射函數 f(x)=xf(x) = x,即可在 O(∣x∣)O(|x|) 時間內完成歸約,故 L≤PLL \le_P L 永遠成立。

解題方法

本題切入點為依據複雜度類別的嚴格定義,逐一核對各選項的邏輯正確性:

  1. 利用 P⊆NP\text{P} \subseteq \text{NP} 之關係驗證 (A)。
  2. 依據歸約符號 L1≤PL2L_1 \le_P L_2 的定義方向(代表 L1L_1 的難度小於或等於 L2L_2)與自反性檢驗 (B) 與 (C)。
  3. 舉出已知具備常數比例近似演算法的 NPC 最適化問題實例(如頂點覆蓋問題 Vertex Cover 的 2-近似演算法)反駁 (D)。

選項分析

  • (A) 錯誤。
    原文:An NP problem of size n takes more than poly(n) time to solve.
    分析:P\text{P} 為 NP\text{NP} 的子集(P⊆NP\text{P} \subseteq \text{NP})。屬於 P\text{P} 的問題在確定型圖靈機上即可於多項式時間 poly(n)\text{poly}(n) 內求解。因此,「大小為 nn 的 NP 問題皆需要超過多項式時間求解」的敘述不成立。

  • (B) 錯誤。
    原文:Any NP-complete problem is polynomial-reducible to any other NP problem.
    分析:根據 NP-Complete 的定義,是「所有 NP\text{NP} 問題皆可歸約至 NPC 問題」(L′≤PLL' \le_P L),而非「NPC 問題可歸約至任意 NP\text{NP} 問題」。

🔒

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

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

免費註冊

第 13 題5 分

  1. Consider a hash table with f(n)f(n) entries with hash function that can uniformly dispatch items to those entries. Which property below ensures that a successful search can be done in O(1)O(1)?
    (A) f(n)=O(n)f(n) = O(n)
    (B) f(n)=O(n)f(n) = O(\sqrt{n})
    (C) f(n)=O(n/n)f(n) = O(n/\sqrt{n})
    (D) f(n)=O(n)f(n) = O(n)
    (E) none of the other choices

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

這一題的完整詳解

核心觀念

  1. 雜湊表(Hash Table)與載重因子(Load Factor)
    設雜湊表中的元素個數為 nn,槽位(Entries / Buckets)數量為 m=f(n)m = f(n),則載重因子定義為:
    α=nm=nf(n)\alpha = \frac{n}{m} = \frac{n}{f(n)}

  2. 簡單均勻雜湊假設(Simple Uniform Hashing Assumption)
    題目給定雜湊函數能均勻分配元素(Uniformly Dispatch Items),在該前提下(不論採用鏈結法 Chaining 或開放定址法 Open Addressing),成功搜尋(Successful Search)所需的期望時間為:
    T(n)=Θ(1+α)T(n) = \Theta(1 + \alpha)

  3. 常數時間 O(1)O(1) 搜尋的充要條件
    若要保證成功搜尋的時間複雜度為 O(1)O(1),載重因子 α\alpha 必須為常數上界,即 α=O(1)\alpha = O(1):
    α=nf(n)≤C(C>0 為常數)  ⟹  f(n)≥1Cn  ⟹  f(n)=Ω(n)\alpha = \frac{n}{f(n)} \le C \quad (C > 0 \text{ 為常數}) \implies f(n) \ge \frac{1}{C} n \implies f(n) = \Omega(n)
    這表示雜湊表的槽位數量 f(n)f(n) 的下界必須達到 Ω(n)\Omega(n),才能保證載重因子不隨 nn 成長。

  4. 漸進記號(Asymptotic Notation)的陷阱

    • f(n)=O(n)f(n) = O(n) 代表 f(n)f(n) 的上界為 nn 的常數倍(f(n)≤c⋅nf(n) \le c \cdot n),這包含 f(n)=1f(n) = 1 或 f(n)=nf(n) = \sqrt{n} 等極小函數。
    • f(n)=Ω(n)f(n) = \Omega(n) 代表 f(n)f(n) 的下界為 nn 的常數倍(f(n)≥c⋅nf(n) \ge c \cdot n),這才能確保槽位數量足夠。

解題方法

  1. 列出平均搜尋時間公式
    在 Simple Uniform Hashing 下,每個槽位平均分配到的元素數量為 α=nf(n)\alpha = \frac{n}{f(n)}。
    成功搜尋的期望時間為:
    T(n)=Θ(1+nf(n))T(n) = \Theta\left(1 + \frac{n}{f(n)}\right)

  2. 推導 f(n)f(n) 需滿足的漸進階數
    若要滿足 T(n)=O(1)T(n) = O(1),則必須滿足:
    nf(n)=O(1)  ⟺  f(n)=Ω(n)\frac{n}{f(n)} = O(1) \iff f(n) = \Omega(n)

🔒

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

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

免費註冊

第 14 題5 分

  1. Consider a red-black tree with n internal nodes, where n is even. At most how many of them can be black child?

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

這一題的完整詳解

核心觀念

本題考查**紅黑樹(Red-Black Tree, RBT)**的定義、性質以及結構限制。主要涉及以下重要觀念:

  1. 紅黑樹的基本性質:

    • 性質 1:每個節點非紅即黑(Red or Black)。
    • 性質 2:根節點(Root)必須為黑色。
    • 性質 3:所有葉節點(NIL 節點)皆為黑色。
    • 性質 4:若一個節點為紅色,則其子節點必須為黑色(不允許連續兩個紅節點)。
    • 性質 5:從任一節點到其所有後代 NIL 節點的簡單路徑上,包含相同數量的黑色節點(黑高度 Black-height 一致)。
  2. 內部節點(Internal Node)與子節點(Child Node):

    • 儲存 Key 的非 NIL 節點稱為內部節點,本題總共有 nn 個內部節點。
    • 在 nn 個內部節點中,除了根節點之外,其餘 n−1n - 1 個內部節點皆為某個節點的「子節點」。
  3. 滿二元樹(Perfect Binary Tree)與奇偶性:

    • 若一棵紅黑樹的所有內部節點皆為黑色,則根據黑高度一致性,所有 NIL 葉節點必須位於同一深度,該樹必定為一棵高度為 hh 的滿二元樹。
    • 滿二元樹的內部節點總數公式為:
      n=2h−1n = 2^h - 1
    • 對於任意整數 h≥1h \ge 1,2h−12^h - 1 恆為奇數(Odd)(例如 1,3,7,15,…1, 3, 7, 15, \dots)。

解題方法

  1. 計算內部子節點的總數:
    樹中共有 nn 個內部節點,其中只有 1 個根節點沒有雙親,因此屬於「子節點」的內部節點共有 n−1n - 1 個。

  2. 分析全黑內部節點的可行性:

    • 若要讓黑色子節點數量達到理論最大值 n−1n - 1,代表這 n−1n - 1 個子節點必須全為黑色。
    • 加上根節點強制為黑色,這意味著整棵樹的 nn 個內部節點必須全為黑色(即紅色內部節點數量為 0)。
    • 若所有內部節點皆為黑色,該紅黑樹必須是一棵滿二元樹,其內部節點數必須滿足 n=2h−1n = 2^h - 1(必為奇數)。
    • 然而,題目給定 nn 為偶數(Even),因此 n≠2h−1n \neq 2^h - 1。
    • 由此可證:當 nn 為偶數時,不可能所有內部節點皆為黑色,樹中至少必須存在 1 個紅色內部節點。
  3. 推導黑色子節點的上限:

    • 由於根節點必須為黑色,該紅色內部節點必為 n−1n - 1 個子節點之一。
    • 在 n−1n - 1 個內部子節點中,至少有 1 個是紅色子節點,因此黑色子節點的最大數量為:
🔒

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

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

免費註冊

第 15 題5 分

  1. In the red-black trees with n internal nodes that reaches the solution of the problem above, what is the maximum height of the tree? A tree with one node is assumed to have height 1.

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

這一題的完整詳解

核心觀念

本題考驗**紅黑樹(Red-Black Tree, RBT)**的樹高上限(Maximum Height)推導與極端結構性質。

紅黑樹是一種自我平衡的二元搜尋樹(Self-Balancing Binary Search Tree),必須嚴格滿足以下 5 大基本性質:

  1. 每個節點不是紅色就是黑色。
  2. 根節點(Root)必須是黑色。
  3. 每個葉節點(NIL / 外部節點)都是黑色。
  4. 若一節點為紅色,則其兩個子節點必為黑色(即不可有連續兩個紅色節點)。
  5. 對於任意節點,從該節點至其所有後代葉節點的簡單路徑上,包含相同數量的黑色節點,此數量稱為該節點的黑高度(Black-Height),記作 bh(x)bh(x)。

依題意定義,單一節點之樹高為 11(即樹高 hh 代表從根節點到葉節點路徑上的節點總數)。設紅黑樹含有 nn 個內部節點(Internal Nodes),則其樹高 hh 與內部節點數 nn 之間存在經典上限定理:
h≤2lg⁡(n+1)h \le 2 \lg(n + 1)


解題方法

1. 黑高度與內部節點數之關係推導:
利用數學歸納法可證得:以節點 xx 為根的子樹,至少包含 2bh(x)−12^{bh(x)} - 1 個內部節點。
對整棵紅黑樹(根節點為 rootroot)而言,總內部節點數 nn 滿足:
n≥2bh(root)−1n \ge 2^{bh(root)} - 1

2. 樹高 hh 與黑高度 bh(root)bh(root) 之關係:
根據性質 4(不可有連續紅節點),在從根節點到葉節點的最長路徑上,紅色節點的數量最多不會超過黑色節點的數量。
因此,在一條包含 hh 個內部節點的路徑中,至少有一半的節點是黑色的(即黑色節點數至少為 h/2h / 2)。
故根節點的黑高度滿足:
bh(root)≥h2bh(root) \ge \frac{h}{2}

3. 推導樹高上限:
將 bh(root)≥h2bh(root) \ge \frac{h}{2} 代入內部節點數不等式:
n≥2h2−1n \ge 2^{\frac{h}{2}} - 1

兩邊同時加 1 並取以 2 為底的對數(lg⁡=log⁡2\lg = \log_2):
n+1≥2h2n + 1 \ge 2^{\frac{h}{2}}

🔒

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

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

免費註冊

第 16 題5 分

  1. (5 points) Dynamic programming can be used to solve the matrix-chain multiplication problem. Suppose we hope to compute the matrix product A1A2...AnA_1A_2...A_n with the matrix dimensions as follows:
    matrix | A1 | A2 | A3 | A4 | A5
    -------|----|----|----|----|----
    dimension | 30x35 | 35x15 | 15x5 | 5x10 | 10x20
    Let m[i,j]m[i, j] be the minimum number of scalar multiplications needed to compute the matrix product AiAi+1...AjA_iA_{i+1}...A_j. What is m[1,5]m[1, 5]?
🖼️ 本題含圖表,以下為原卷對應頁面:
原卷第 3 頁

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

這一題的完整詳解

**依原頁影像作答:**第 16 題實際詢問的是 m[2,5]m[2,5],也就是計算 A2A3A4A5A_2A_3A_4A_5 的最少純量乘法次數。影像中的矩陣維度依序為 A2:35×15A_2:35\times15、A3:15×5A_3:15\times5、A4:5×10A_4:5\times10、A5:10×20A_5:10\times20。

核心觀念

矩陣鏈乘法的矩陣順序固定,但括號位置不同,所需的純量乘法次數可能不同。令維度序列為 p=[35,15,5,10,20]p=[35,15,5,10,20],則動態規劃遞迴式為:

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

其中,kk 表示將矩陣鏈切成左右兩段的位置;pi−1pkpjp_{i-1}p_kp_j 是將左右兩段結果相乘的成本。

解題方法

先算較短矩陣鏈的最小成本:

m[2,3]=35×15×5=2625m[2,3]=35\times15\times5=2625 m[3,4]=15×5×10=750,m[4,5]=5×10×20=1000m[3,4]=15\times5\times10=750,\qquad m[4,5]=5\times10\times20=1000

計算 A2A3A4A_2A_3A_4:

m[2,4]=min⁡{m[2,2]+m[3,4]+35×15×10=6000m[2,3]+m[4,4]+35×5×10=4375=4375m[2,4]=\min \begin{cases} m[2,2]+m[3,4]+35\times15\times10=6000\\ m[2,3]+m[4,4]+35\times5\times10=4375 \end{cases} =4375

計算 A3A4A5A_3A_4A_5:

🔒

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

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

免費註冊

第 17 題5 分

  1. What is the time complexity of finding the minimum number of scalar multiplications needed for A1A2...AnA_1A_2...A_n, using dynamic programming?
    (A) O(n^2)
    (B) O(n^3)
    (C) O(n^4)
    (D) O(n^5)
    (E) none of the other choices

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

這一題的完整詳解

核心觀念

本題考查**矩陣鏈乘法(Matrix Chain Multiplication, MCM)問題,屬於經典的動態規劃(Dynamic Programming, DP)**應用範疇。

對於 nn 個矩陣連乘 A1A2⋯AnA_1 A_2 \cdots A_n,由於矩陣乘法滿足結合律,不同的加括號方式(Parenthesization)會導致總純量乘法(Scalar Multiplication)次數大不相同。動態規劃解法透過將問題拆解為重疊的子問題(Overlapping Subproblems),利用最優子結構(Optimal Substructure)性質來計算出最少所需的純量乘法總次數。


解題方法

1. 狀態定義與動態規劃轉移方程

假設矩陣 AiA_i 的維度為 pi−1×pip_{i-1} \times p_i(其中 1≤i≤n1 \le i \le n)。
定義 DP 狀態表格 m[i,j]m[i, j] 為計算矩陣序列 AiAi+1⋯AjA_i A_{i+1} \cdots A_j(其中 1≤i≤j≤n1 \le i \le j \le n)所需的最小純量乘法次數。

  • 基底條件(Base Case):
    當矩陣鏈長度為 1 時,無需進行任何乘法:
    m[i,i]=0(∀1≤i≤n)m[i, i] = 0 \quad (\forall 1 \le i \le n)

  • 遞迴關係式(Recurrence Relation):
    對於長度大於 1 的矩陣鏈(即 i<ji < j),枚舉所有可能的分割點 kk(i≤k<ji \le k < j):
    m[i,j]=min⁡i≤k<j{m[i,k]+m[k+1,j]+pi−1⋅pk⋅pj}m[i, j] = \min_{i \le k < j} \left\{ m[i, k] + m[k+1, j] + p_{i-1} \cdot p_k \cdot p_j \right\}

2. 時間複雜度推導

  • 狀態總數(DP 表格大小):
    狀態由區間起點 ii 與終點 jj 決定,滿足 1≤i≤j≤n1 \le i \le j \le n。DP 表格中需填入的有效子問題數量為:
    n(n−1)2=O(n2)\frac{n(n-1)}{2} = O(n^2)

  • 單一狀態計算成本:
    計算每一個狀態 m[i,j]m[i, j] 時,分割點 kk 的可能取值有 j−ij - i 個。在最壞情況下(當區間長度接近 nn 時),遍歷 kk 需要花費 O(n)O(n) 次操作。

🔒

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

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

免費註冊

第 18 題5 分

When using Dijkstra's algorithm to solve the single-source shortest problem for a graph having VV vertices and EE edges, which is INCORRECT?

(A) The search principle is breadth-first.
(B) It is a greedy algorithm.
(C) When using an array to implement the min-priority queue, the time complexity is O(V2)O(V^2).
(D) For a dense graph where E=Θ(V2)E=\Theta(V^2), the algorithm can run in O(V2)O(V^2) when using the binary min-heap to implement the min-priority queue.
(E) None of the other choices.

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

這一題的完整詳解

核心觀念

Dijkstra 演算法用來求非負邊權圖中,單一起點到各頂點的最短路徑。它每次選出目前暫定距離最小的頂點並固定其距離,因此屬於貪婪演算法。使用最小優先佇列時,時間複雜度取決於佇列的實作方式。

解題方法

圖中第 18 題問「哪個敘述錯誤」;選項 A 說搜尋原則是廣度優先,選項 D 說稠密圖搭配二元最小堆積可在 O(V2)O(V^2) 執行。依標準 Dijkstra 定義與最壞情況時間複雜度,這兩項都不正確。

使用二元最小堆積時,取出最小距離頂點與更新佇列的操作各需 O(log⁡V)O(\log V),標準總複雜度為

O((V+E)log⁡V)O((V+E)\log V)

稠密圖有 E=Θ(V2)E=\Theta(V^2),代入可得

O(V2log⁡V)O(V^2\log V)

所以 D 的 O(V2)O(V^2) 不符合標準二元堆積實作的最壞情況界限。

選項分析

  • (A) 錯誤。 Dijkstra 不等同廣度優先搜尋。廣度優先搜尋依層次探索,適用於邊權相同的情況;Dijkstra 則依目前的暫定距離選取下一個頂點。
🔒

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

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

免費註冊

第 19 題5 分

Consider the following undirected graph GG. Let TT be the minimum spanning tree (MST) of the graph. Which is INCORRECT?

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

(A) Edge (V1,V4)(V_1,V_4) is in TT.
(B) Edge (V4,V5)(V_4,V_5) is in TT.
(C) Let w4,5w_{4,5} be the weight of (V4,V5)(V_4,V_5). If we decrease w4,5w_{4,5} by 1616 (i.e., w4,5w_{4,5} becomes 55), then TT remains to be the MST of GG.
(D) Let w2,3w_{2,3} be the weight of (V2,V3)(V_2,V_3). If we decrease w2,3w_{2,3} by 1010 (i.e., w2,3w_{2,3} becomes 44), then TT remains to be the MST of GG.
(E) None of the other choices.

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

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

這一題的完整詳解

核心觀念

最小生成樹(MST)會以最小總權重連通所有頂點,且不含環。判斷邊是否屬於 MST,可使用 割性質:若某條邊是跨越某個割的最輕邊,則它可納入 MST。也可使用 環性質:若在一個環中,某條邊的權重嚴格最大,該邊不會屬於 MST。

解題方法

圖中的邊與權重為:(V1,V4)=1(V_1,V_4)=1、(V2,V7)=2(V_2,V_7)=2、(V1,V3)=3(V_1,V_3)=3、(V1,V2)=8(V_1,V_2)=8、(V2,V3)=14(V_2,V_3)=14、(V6,V7)=15(V_6,V_7)=15、(V1,V7)=16(V_1,V_7)=16、(V3,V4)=20(V_3,V_4)=20、(V4,V5)=21(V_4,V_5)=21、(V1,V6)=25(V_1,V_6)=25、(V5,V6)=28(V_5,V_6)=28、(V1,V5)=36(V_1,V_5)=36。

依權重由小到大套用 Kruskal 演算法:先選權重 1,2,3,81,2,3,8 的邊;權重 1414 的 (V2,V3)(V_2,V_3) 會形成環,因此略過;接著選權重 1515 的 (V6,V7)(V_6,V_7)。權重 1616 的 (V1,V7)(V_1,V_7) 也會形成環,略過。最後,為了連上 V5V_5,選擇與它相連且權重最小的 (V4,V5)(V_4,V_5),權重為 2121。

因此原 MST 為

T={(V1,V4),(V2,V7),(V1,V3),(V1,V2),(V6,V7),(V4,V5)}.T=\{(V_1,V_4),(V_2,V_7),(V_1,V_3),(V_1,V_2),(V_6,V_7),(V_4,V_5)\}.

選項分析

🔒

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

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

免費註冊

第 20 題5 分

Given a graph G=(V,E)G=(V,E)) with the adjacent matrix W=(wij)W=(w_{ij}) with WW an n×nn\times n matrix. The following algorithm can compute the All-Pairs Shortest Path of GG.

FLOYD-WARSHALL(W)(W)

  1. D=WD=W
  2. For k=1,2,…,nk=1,2,\ldots,n
  3.  For i=1,2,…,ni=1,2,\ldots,n
  4.   For j=1,2,…,nj=1,2,\ldots,n
  5.    dij=min⁡(dij,dik+dkj)d_{ij}=\min(d_{ij},d_{ik}+d_{kj})

What is the SPACE complexity of this algorithm?

(A) Θ(n2)\Theta(n^2)
(B) Θ(n3)\Theta(n^3)
(C) Θ(n)\Theta(n)
(D) Θ(n4)\Theta(n^4)
(E) None of the other choices.

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

這一題的完整詳解

核心觀念

空間複雜度計算的是演算法執行時需要的記憶體空間,不是執行步數。Floyd–Warshall 演算法使用距離矩陣 DD 儲存各頂點對之間的最短距離;矩陣有 nn 列、nn 欄,因此需要 Θ(n2)\Theta(n^2) 空間。

解題方法

原卷圖中給定的 WW 是 n×nn\times n 矩陣,演算法先令 D=WD=W,再以三層迴圈依序更新每個 dijd_{ij}。三層迴圈會影響執行時間,但迴圈變數只有 k,i,jk,i,j,不會因此額外存下三維資料。

距離矩陣 DD 含有 n2n^2 個元素;即使把輸入矩陣 WW 和複製後的 DD 分開計算,總空間仍是 Θ(n2)\Theta(n^2)。因此:

  • 時間複雜度:Θ(n3)\Theta(n^3)
  • 空間複雜度:Θ(n2)\Theta(n^2)

選項分析

🔒

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

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

免費註冊

第 21 題5 分

When using the Edmonds-Karp algorithm to find the maximum flow of a flow network G=(V,E)G=(V,E), which is CORRECT?

(A) The time complexity is O(E∣f∗∣)O(E|f^*|), where f∗f^* denotes a maximum flow in the network.
(B) The algorithm uses the depth-first search principle.
(C) The time complexity is O(V2E)O(V^2E).
(D) The time complexity is O(VE∣f∗∣)O(VE|f^*|).
(E) None of the other choices.

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

這一題的完整詳解

核心觀念

Edmonds–Karp 演算法是 Ford–Fulkerson 最大流方法的一種實作:每次在殘餘網路中尋找增廣路徑,並沿著該路徑增加流量。它使用廣度優先搜尋(BFS),因此每次找到的增廣路徑都是邊數最少的路徑。

若 VV 是頂點數、EE 是邊數,Edmonds–Karp 的標準時間複雜度為

O(VE2).O(VE^2).

這個複雜度不依賴最大流的數值 ∣f∗∣|f^*|,適用於容量為實數的情況。

解題方法

先辨認 Edmonds–Karp 的搜尋方式,再套用其標準複雜度:

  1. 每次以 BFS 在殘餘網路中尋找最短增廣路徑。一次 BFS 的時間為 O(E)O(E)。
  2. Edmonds–Karp 的增廣次數上界為 O(VE)O(VE)。
  3. 因此總時間為
O(VE)⋅O(E)=O(VE2).O(VE)\cdot O(E)=O(VE^2).

據此比對選項,題目中的複雜度選項沒有列出 O(VE2)O(VE^2),所以應選「以上皆非」。

選項分析

🔒

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

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

免費註冊

第 22 題5 分

Consider a fractional knapsack problem of 66 items. The ii-th item is worth viv_i dollars and weighs wiw_i pounds.

Item ii112233445566
Pounds wiw_i442288555588
Dollars viv_i3388161677992020

Suppose that at most W=20W=20 pounds can be carried in the knapsack. The sequence of picking the items is

(A) 2,6,3,52,6,3,5
(B) 2,6,5,32,6,5,3
(C) 2,6,5,4,32,6,5,4,3
(D) 6,3,5,2,46,3,5,2,4
(E) None of the other choices.

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

這一題的完整詳解

核心觀念

分數背包問題允許把物品分割,因此可依照每磅的價值,也就是「價值密度」排序,優先裝入價值密度最高的物品:

價值密度=viwi\text{價值密度}=\frac{v_i}{w_i}

依價值密度由高至低取用,直到背包容量用完;若剩餘容量不足以放入下一件物品,就取該物品的一部分。這是分數背包問題的貪婪策略。

解題方法

計算各物品的價值密度:

物品重量 wiw_i價值 viv_i價值密度 vi/wiv_i/w_i
1430.75
2284
38162
4571.4
5591.8
68202.5

由高至低的取用順序為:

2, 6, 3, 5, 4, 12,\ 6,\ 3,\ 5,\ 4,\ 1

背包容量為 2020 磅。依序裝入:

🔒

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

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

免費註冊

其他考古題