114 年 國立臺灣聯合大學系統(清華、政治、陽明交通、中央四校聯招)研究所電機類《資料結構》

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

第 1 題

For(int i=0; i*i < n; i++) { statement... }. Time complexity of the for-loop is
(A) O(1)O(1)
(B) O(n)O(n)
(C) O(n2)O(n^2)
(D) O(n1/2)O(n^{1/2})

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

這一題的完整詳解

核心觀念

本題考查迴圈執行次數與時間複雜度的估算。迴圈條件為:

for (int i = 0; i*i < n; i++) {
    statement...
}

每次迭代中,變數 ii 增加 11;迴圈持續至 i2≥ni^2 \ge n。因此關鍵在於找出 ii 的最大成長範圍。

解題方法

迴圈執行條件為:

i2<ni^2<n

因為 i≥0i\ge 0,兩邊開平方可得:

i<ni<\sqrt n

因此,ii 大約會從 00 執行到 n−1\sqrt n-1,迴圈執行次數約為:

n\sqrt n

若每次執行的 statement 為常數時間,則總時間複雜度為:

T(n)=Θ(n)=Θ(n1/2)T(n)=\Theta(\sqrt n)=\Theta(n^{1/2})

所以在選項中應選擇 O(n1/2)O(n^{1/2})。

選項分析

  • (A) O(1)O(1):錯誤。
    當 nn 增加時,迴圈次數約為 n\sqrt n,並非固定次數,因此不是常數時間。
🔒

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

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

免費註冊

第 2 題

Which of the following data structure that stores data in a first-in, last-out order?
(A) Stack
(B) Queue
(C) Tree
(D) List

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

這一題的完整詳解

核心觀念

本題考查資料結構中資料進出順序的定義。

  • Stack(堆疊):採用後進先出(Last-In, First-Out, LIFO),也可說是先進後出。最後放入的資料會最先取出。
  • Queue(佇列):採用先進先出(First-In, First-Out, FIFO)。最早放入的資料會最先取出。

題目所述的 first-in, last-out,表示「第一個放入的資料最後才取出」,等同於 先進後出(FILO),其概念與 LIFO 相同。

解題方法

將資料依序放入資料結構:

A→B→CA \rightarrow B \rightarrow C

若資料結構遵循 first-in, last-out:

  1. 最先放入的 AA 必須最後取出。
  2. 因此後放入的 CC 會先取出。
  3. 取出順序為:
C→B→AC \rightarrow B \rightarrow A

這正是堆疊的運作方式。堆疊通常只允許在同一端進行資料的插入與刪除,該端稱為頂端(top)。

選項分析

🔒

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

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

免費註冊

第 3 題

The postfix expression of A*(B+C)-D is:
(A) A*(BC+)-D
(B) ABC+*D-
(C) -*A(+BC)D
(D) None of the above

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

這一題的完整詳解

核心觀念

本題考查中序表示式(infix expression)轉後序表示式(postfix expression,逆波蘭表示法)。

後序表示式的規則是:運算元先輸出,運算子在其所屬運算元之後輸出。例如:

A+B→AB+A+B \rightarrow AB+

原式為:

A∗(B+C)−DA*(B+C)-D

運算優先順序為:

括號>乘法>減法括號 > 乘法 > 減法

解題方法

先處理括號內的加法:

B+C→BC+B+C \rightarrow BC+

再將 AA 與括號結果相乘:

A∗(B+C)→A(BC+)∗A*(B+C) \rightarrow A(BC+)*

移除括號後得到:

ABC+∗ABC+*

最後將結果與 DD 做減法:

A∗(B+C)−D→ABC+∗D−A*(B+C)-D \rightarrow ABC+*D-

因此正確的後序表示式為:

ABC+∗D−\boxed{ABC+*D-}

選項分析

  • (A) A(BC+)-D:錯誤。*
    此表示式仍保留中序表示法的結構,乘號與減號沒有依後序表示法移到所有運算元之後,因此不是正確的 postfix expression。
🔒

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

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

免費註冊

第 4 題

Which of the following sorting algorithms has an average time complexity of O(nlog⁡n)O(n \log n)?
(A) Bubble sort
(B) Selection sort
(C) Heap sort
(D) Insertion sort

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

這一題的完整詳解

核心觀念

本題考查各種排序演算法的平均時間複雜度。常見排序法的比較如下:

排序法平均時間複雜度最壞時間複雜度
Bubble sortO(n2)O(n^2)O(n2)O(n^2)
Selection sortO(n2)O(n^2)O(n2)O(n^2)
Heap sortO(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)
Insertion sortO(n2)O(n^2)O(n2)O(n^2)

其中,nn 表示待排序元素的數量。

解題方法

逐一判斷各排序演算法的主要操作次數:

  • 若演算法需要反覆進行約 nn 輪,每輪又處理約 nn 個元素,時間複雜度通常為 O(n2)O(n^2)。
  • 若演算法能將問題規模以樹狀結構處理,每次操作成本為 O(log⁡n)O(\log n),且總共進行 nn 次,則複雜度為 O(nlog⁡n)O(n\log n)。

Heap sort 使用堆積(heap)維護元素順序:

  1. 建立堆積的時間複雜度為 O(n)O(n)。
  2. 每次取出最大值或最小值後,需重新調整堆積,成本為 O(log⁡n)O(\log n)。
  3. 共取出 nn 個元素,因此調整堆積的總成本為
n×O(log⁡n)=O(nlog⁡n)n \times O(\log n)=O(n\log n)

加上建立堆積的成本:

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

因此,Heap sort 的平均時間複雜度為 O(nlog⁡n)O(n\log n)。

選項分析

(A) Bubble sort

Bubble sort 反覆比較相鄰元素,並將較大的元素逐步往後移動。

平均情況下,需要進行約 nn 輪掃描,第 ii 輪約需比較 n−in-i 次,因此比較次數約為

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

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

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

免費註冊

第 5 題

Which of the following sorting algorithms is NOT in-place?
(A) Quick sort
(B) Merge sort
(C) Heap sort
(D) All of the above are in-place

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

這一題的完整詳解

核心觀念

本題考查排序演算法的 in-place(原地排序) 定義。

若排序過程主要直接在原陣列內交換、移動元素,且額外使用的輔助空間為 O(1)O(1),通常稱為原地排序。遞迴堆疊所需空間在一般考試分類中通常不列為主要資料儲存空間,但仍可補充其實際成本。

三種排序法的典型空間需求如下:

排序法額外輔助空間是否屬於典型原地排序
Quick sort分割區通常為 O(1)O(1),另有遞迴堆疊是
Merge sort合併通常需要 O(n)O(n) 暫存陣列否
Heap sortO(1)O(1)是

因此,本題採用一般資料結構與演算法教科書的標準定義判斷。

解題方法

判斷每個排序演算法在陣列排序過程中,是否需要額外配置與輸入規模同階的儲存空間:

  • 額外空間為 O(1)O(1):屬於原地排序。
  • 額外空間為 O(n)O(n):不屬於典型原地排序。

Merge sort 的合併階段通常將左右兩個已排序子陣列合併到一個暫存陣列中,必須配置最多 O(n)O(n) 的額外空間,因此不是典型的 in-place sorting algorithm。

選項分析

(A) Quick sort

Quick sort 透過 pivot 將陣列分割成兩部分,分割時可直接在原陣列中交換元素。例如使用雙指標進行 partition,分割階段只需常數個指標與暫存變數,因此額外空間為 O(1)O(1)。

Quick sort 的遞迴堆疊:

  • 平衡分割時約為 O(log⁡n)O(\log n)。
  • 最差情況可能達到 O(n)O(n)。

在一般排序法分類中,Quick sort 仍視為原地排序。因此此選項錯誤。

(B) Merge sort

🔒

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

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

免費註冊

第 6 題

If you want to use a heap structure to keep the top-k numbers by scanning through a list of numbers, what is the right choice?
(A) min-heap
(B) max-heap
(C) Both will work equally well
(D) Trees perform better

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

這一題的完整詳解

核心觀念

本題考察「使用 heap 維護前 kk 大元素」的方法。

若要在掃描 nn 個數字的過程中,隨時保留目前看過的前 kk 大元素,應使用 min-heap:

  • heap 中恰好保存目前的 kk 大元素。
  • min-heap 的根節點是這 kk 個元素中的最小值,也就是目前第 kk 大的數字。
  • 新數字只需與根節點比較,即可判斷是否應進入前 kk。

解題方法

假設題目所稱的 top-kk 是指「kk 大」:

  1. 先將前 kk 個數字放入 min-heap。
  2. 掃描後續每個數字 xx:
    • 若 x≤x \leq heap 根節點,則 xx 不可能進入前 kk 大,忽略。
    • 若 x>x > heap 根節點,則刪除根節點,並將 xx 插入 heap。
  3. 掃描結束後,heap 內即為全體數字中的前 kk 大元素。

例如目前 min-heap 內容為:

[3,8,12][3, 8, 12]

這代表目前保留的前 33 大元素為 3,8,123,8,12,其中根節點 33 是第 33 大元素。若遇到新數字 1010,因為 10>310>3,便移除 33 並加入 1010;若遇到 22,則直接忽略。

每次插入或刪除的時間複雜度為 O(log⁡k)O(\log k),掃描 nn 個數字的總時間複雜度為:

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

heap 所需的額外空間為:

O(k)O(k)

選項分析

(A) min-heap

正確。

🔒

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

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

免費註冊

第 7 題

What is the algorithm's computation efficiency using a heap sized k (given in the previous question) to maintain top-k numbers by scanning through a list of numbers?
(A) O(n)O(n)
(B) O(nlog⁡n)O(n \log n)
(C) O(nlog⁡k)O(n \log k)
(D) O(k)O(k)

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

這一題的完整詳解

核心觀念

本題考查使用大小為 kk 的 heap,掃描 nn 個數字以維持前 kk 大元素時的時間複雜度。

若要維持前 kk 大元素,通常使用 min-heap:

  • Heap 中存放目前看到的前 kk 大元素。
  • Heap 的根節點是這 kk 個元素中最小者,也就是目前第 kk 大的元素。
  • 新元素若大於根節點,便取代根節點,再進行 heapify。
  • Heap 大小固定為 kk,因此每次調整的成本為 O(log⁡k)O(\log k)。

解題方法

掃描每個元素時:

  1. 前 kk 個元素先建立大小為 kk 的 heap。
  2. 對其餘元素逐一處理:
    • 取出 heap 根節點,成本為 O(1)O(1)。
    • 若新元素不大於根節點,直接忽略。
    • 若新元素大於根節點,替換根節點並重新調整 heap,成本為 O(log⁡k)O(\log k)。

最多需要對 nn 個元素進行上述檢查,因此總時間複雜度為:

O(n)+O(nlog⁡k)=O(nlog⁡k)O(n) + O(n\log k)=O(n\log k)

其中建立初始 heap 的成本可視為 O(k)O(k);即使逐一插入而為 O(klog⁡k)O(k\log k),在整體掃描成本中仍不改變主要答案。所需額外空間為:

O(k)O(k)

選項分析

🔒

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

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

免費註冊

第 8 題

The height of a tree is defined as the number of edges present in the longest path connecting the root to a leaf node. What is the height of a max binary heap after inserting 3, 41, 52, 26, 38, 57, 9, 49 sequentially? The heap is empty initially.
(A) 1
(B) 2
(C) 3
(D) 4

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

這一題的完整詳解

核心觀念

本題考查:

  1. **Max binary heap(最大二元堆積)**的插入操作。
  2. 插入新元素時,必須先放在完全二元樹的下一個空位置,再向上調整。
  3. 最大堆積的性質為:每個父節點的值皆大於或等於其子節點。
  4. 樹高定義為「根節點到最深葉節點的邊數」。

共有 88 個元素,形成高度為 33 的完全二元樹。

解題方法

依序插入各元素,若新節點大於父節點,就持續向上交換。

插入 33

[3][3]

插入 4141

41>341>3,與父節點交換:

[41,3][41,3]

插入 5252

先放入陣列尾端:

[41,3,52][41,3,52]

52>4152>41,向上交換:

[52,3,41][52,3,41]

插入 2626

先放入最後位置:

[52,3,41,26][52,3,41,26]

26>326>3,交換:

[52,26,41,3][52,26,41,3]

插入 3838

[52,26,41,3,38][52,26,41,3,38]

38>2638>26,交換:

[52,38,41,3,26][52,38,41,3,26]

插入 5757

先放入最後位置:

[52,38,41,3,26,57][52,38,41,3,26,57]

57>4157>41,交換:

[52,38,57,3,26,41][52,38,57,3,26,41]

接著 57>5257>52,再與根節點交換:

[57,38,52,3,26,41][57,38,52,3,26,41]

插入 99

[57,38,52,3,26,41,9][57,38,52,3,26,41,9]

9<529<52,不需交換。

插入 4949

[57,38,52,3,26,41,9,49][57,38,52,3,26,41,9,49]

49>349>3,向上交換:

🔒

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

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

免費註冊

第 9 題

What is the height of a binary search tree after inserting 3, 41, 52, 26, 38, 57, 9, 49 sequentially? The tree is empty initially.
(A) 1
(B) 2
(C) 3
(D) 4

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

這一題的完整詳解

核心觀念

二元搜尋樹(Binary Search Tree, BST)遵守:

  • 左子樹所有鍵值小於根節點。
  • 右子樹所有鍵值大於根節點。
  • 依序插入資料時,每個新節點都由根節點開始比較,直到找到適當的空位置。
  • 樹高(height)通常定義為「根節點到最深葉節點的最長邊數」;單一根節點的樹高為 00。

解題方法

依序插入:

  1. 插入 33:成為根節點。
  2. 插入 4141:41>341>3,放在 33 的右側。
  3. 插入 5252:52>352>3、52>4152>41,放在 4141 的右側。
  4. 插入 2626:26>326>3、26<4126<41,放在 4141 的左側。
  5. 插入 3838:38>338>3、38<4138<41、38>2638>26,放在 2626 的右側。
  6. 插入 5757:57>357>3、57>4157>41、57>5257>52,放在 5252 的右側。
  7. 插入 99:9>39>3、9<419<41、9<269<26,放在 2626 的左側。
  8. 插入 4949:49>349>3、49>4149>41、49<5249<52,放在 5252 的左側。

形成的 BST 為:

🔒

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

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

免費註冊

第 10 題

Which of the following arrays is NOT a max binary heap?
(A) {16, 14, 9, 4, 8, 12, 5, 3, 2}
(B) {16, 14, 9, 4, 12, 8, 5, 3, 2}
(C) {16, 8, 14, 5, 2, 9, 12, 4, 3}
(D) {16, 9, 14, 8, 5, 12, 2, 4, 3}

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

這一題的完整詳解

核心觀念

最大二元堆積(max binary heap)必須同時符合:

  1. 完全二元樹結構:以陣列儲存時,節點依層序排列。
  2. 最大堆積性質:每個父節點值都不小於其子節點:
parent≥left child,parent≥right child\text{parent} \geq \text{left child}, \qquad \text{parent} \geq \text{right child}

若陣列採用 00 起始索引,索引為 ii 的節點,其父節點索引為:

parent⁡(i)=⌊i−12⌋\operatorname{parent}(i)=\left\lfloor \frac{i-1}{2}\right\rfloor

本題各陣列皆有 99 個元素,直接依陣列順序形成完全二元樹,因此只需檢查父子節點的大小關係。

解題方法

每個陣列的樹形結構如下:

a0/\a1a2/ \/ \a3 a4 a5 a6/ \ / \a7 a8\begin{array}{c} a_0\\ /\quad \backslash\\ a_1\quad a_2\\ /\ \backslash\quad /\ \backslash\\ a_3\ a_4\ a_5\ a_6\\ /\ \backslash\ /\ \backslash a_7\ a_8 \end{array}

逐一檢查所有父節點即可。只要找到一組「父節點小於子節點」,該陣列就不是最大二元堆積。

選項分析

(A) {16,14,9,4,8,12,5,3,2}\{16,14,9,4,8,12,5,3,2\}

其父子關係包括:

🔒

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

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

免費註冊

第 11 題

Suppose that we have numbers between 1 and 1000 in a binary search tree and we want to search the number 101. Which of the following sequences could possibly be the sequence of nodes examined?
(A) 20, 252, 41, 49, 130, 120, 131, 101
(B) 252, 42, 79, 200, 190, 86, 130, 121, 101
(C) 80, 252, 90, 130, 120, 125, 110, 101
(D) 90, 252, 100, 131, 130, 92, 110, 101

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

這一題的完整詳解

在二元搜尋樹 (BST) 中搜尋 101 時,從根節點開始必須同時維持一個 下限 (low) 與 上限 (high):

  • 若目前節點 vv 大於 101,須往左子樹走,更新 high = v;
  • 若 vv 小於 101,須往右子樹走,更新 low = v;
  • 任一次左移的節點必須滿足 low < v < high,右移亦同。

依此檢查四個選項:

序列判斷結果
A 20 → 252 → 41 → 49 → 130 → 120 → 131 → 101在從 120 左移到 131 時 high 已被設定為 120,131 > 120,違反 high 上限,不可能
🔒

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

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

免費註冊

第 12 題

Five people A, B, C, D, and E are standing in a queue. A is standing next to C. D and E are not standing next to each other. Who is NOT possibly standing third in the queue?
(A) B
(B) D
(C) E
(D) All of the above

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

這一題的完整詳解

關鍵條件

  1. AA 必須與 CC 相鄰。
  2. DD 與 EE 不能相鄰。

驗證各選項是否能成為第 3 位

  • BB 為第 3 位
    • 剩餘位置:1,2,4,51,2,4,5。
    • 為使 AA、CC 相鄰,只能放在 (1,2)(1,2) 或 (4,5)(4,5)。
    • 任一情況下,DD、EE 只能佔剩下的兩個相鄰位置,違反「DD、EE 不相鄰」。
    • 因此 BB 不可能 站在第 3 位。
🔒

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

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

免費註冊

第 13 題

Let Fibonacci(0) = 0, Fibonacci(1) = 1, Fibonacci(2) = 1, Fibonacci(3) = 2, Fibonacci(4) = 3, and Fibonacci(i+2) = Fibonacci(i) + Fibonacci(i+1), what is Fibonacci(7) equal to?
(A) 34
(B) 21
(C) 8
(D) 13

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

這一題的完整詳解

核心觀念

本題考查 Fibonacci 數列的遞迴定義:

F(0)=0,F(1)=1F(0)=0,\qquad F(1)=1

且對於 i≥0i\ge 0:

F(i+2)=F(i)+F(i+1)F(i+2)=F(i)+F(i+1)

也就是每一項等於前兩項的和。

解題方法

依序計算 F(5)F(5)、F(6)F(6) 與 F(7)F(7):

F(5)=F(3)+F(4)=2+3=5F(5)=F(3)+F(4)=2+3=5 F(6)=F(4)+F(5)=3+5=8F(6)=F(4)+F(5)=3+5=8 F(7)=F(5)+F(6)=5+8=13F(7)=F(5)+F(6)=5+8=13

因此:

F(7)=13\boxed{F(7)=13}

選項分析

🔒

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

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

免費註冊

第 14 題

Answer questions 14-16 according to the following C code.
struct Node {
int data;
struct Node* next;
};

int funcA(struct Node* head) {
struct Node *slow = head, *fast = head;
while (slow && fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) {
return 1;
}
}
return 0;
}

What is the purpose of funcA()?
(A) Find repeated numbers in a linked list
(B) Find the unique numbers in a linked list
(C) Find a loop in a linked list
(D) Reverse a linked list

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

這一題的完整詳解

核心觀念

本題考察單向鏈結串列的「環(loop/cycle)偵測」,以及 Floyd 的「龜兔賽跑演算法(Tortoise and Hare Algorithm)」。

程式中設定兩個指標:

  • slow:每次前進一個節點。
  • fast:每次前進兩個節點。
slow = slow->next;
fast = fast->next->next;

若鏈結串列沒有環,fast 最終會走到 NULL;若鏈結串列存在環,兩個指標會在環內相遇,因此可藉由判斷:

if (slow == fast)
    return 1;

來確認是否存在環。

需注意,slow == fast 比較的是兩個指標是否指向「同一個節點」,不是比較節點中的 data 是否相同。

解題方法

程式的迴圈條件為:

while (slow && fast && fast->next)

這表示只要 slow、fast 以及 fast->next 都不是 NULL,就持續移動兩個指標。

每一輪的移動方式如下:

slow = slow->next;          // 前進 1 步
fast = fast->next->next;    // 前進 2 步

沒有環的情況

例如:

A → B → C → D → NULL

fast 的移動速度較快,會先抵達 NULL。此時迴圈結束,函式執行:

return 0;

代表鏈結串列沒有環。

有環的情況

例如:

A → B → C → D
        ↑     ↓
        └─────┘

當兩個指標進入環之後,fast 每輪比 slow 多前進一個節點。設環長度為 kk,兩個指標之間的距離每輪會改變 11(以模 kk 計算),因此經過有限輪後必定相遇。

相遇時:

slow == fast

函式立即回傳:

return 1;

因此,funcA() 的功能是判斷鏈結串列是否包含環。

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(1)O(1)
🔒

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

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

免費註冊

第 15 題

  1. Time complexity of funcA()?
    (A) O(1)O(1)
    (B) O(n)O(n)
    (C) O(n2)O(n^2)
    (D) O(nlog⁡n)O(n \log n)

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

這一題的完整詳解

核心觀念

時間複雜度必須根據 funcA() 的實際程式碼判定,不能僅由函式名稱或選項推論。分析時需觀察:

  • 迴圈執行次數是否隨 nn 增加。
  • 是否有巢狀迴圈。
  • 每次迭代中變數如何變化,例如 i←i+1i \leftarrow i+1 或 i←2ii \leftarrow 2i。
  • 遞迴函式的遞迴次數與每層工作量。

常見複雜度判定如下:

固定次數操作=O(1)\text{固定次數操作}=O(1) 單層執行 n 次的迴圈=O(n)\text{單層執行 }n\text{ 次的迴圈}=O(n) 兩層各執行 n 次的巢狀迴圈=O(n2)\text{兩層各執行 }n\text{ 次的巢狀迴圈}=O(n^2) 每次將問題規模減半,且每層工作量為 O(n)=O(nlog⁡n)\text{每次將問題規模減半,且每層工作量為 }O(n)=O(n\log n)

解題方法

本題題幹只有函式名稱 funcA(),未提供函式內容,因此無法計算其基本操作的執行次數,也無法建立時間複雜度函數 T(n)T(n)。

判定流程應為:

  1. 找出輸入規模 nn。
  2. 計算迴圈或遞迴的執行層數。
  3. 求出總基本操作次數 T(n)T(n)。
  4. 忽略常數與低階項,取其漸近表示法。

例如:

🔒

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

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

免費註冊

第 16 題

  1. Auxiliary memory space required by funcA()?
    (A) O(1)O(1)
    (B) O(n)O(n)
    (C) O(n2)O(n^2)
    (D) O(nlog⁡n)O(n \log n)

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

這一題的完整詳解

核心觀念

「Auxiliary memory space」是指演算法執行過程中,除了儲存原始輸入資料之外,額外使用的記憶體空間。分析時須觀察:

  • 區域變數數量是否固定;
  • 是否配置與 nn 有關的陣列或資料結構;
  • 是否使用遞迴,並計算遞迴呼叫堆疊深度;
  • 是否建立暫存陣列、複製資料或其他額外結構。

題目未提供 funcA() 的函式內容,因此無法由目前資訊判定其輔助空間複雜度。

解題方法

必須先取得 funcA() 的完整程式碼,再依下列方式分析:

  • 若只使用固定數量的變數,且沒有遞迴或隨 nn 增長的配置,則為 O(1)O(1)。
  • 若配置長度與 nn 成正比的陣列,或遞迴深度為 nn,則為 O(n)O(n)。
  • 若配置 n×nn \times n 的矩陣,則為 O(n2)O(n^2)。
  • 若遞迴深度或額外儲存結構的規模為 O(nlog⁡n)O(n\log n),則為 O(nlog⁡n)O(n\log n)。
🔒

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

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

免費註冊

第 17 題

Answer questions 17-20 according to the following C++-style pseudo-code.
int funcB(string s) {
stack<int> st;
st.push(-1);
int maxLen = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(') {
st.push(i);
} else {
st.pop();
if (st.empty()) {
st.push(i);
} else {
maxLen = max(maxLen, i – st.top());
}
}
}
return maxLen;
}

  1. Let s = "()", funcB(s) will return
    (A) 0
    (B) 2
    (C) 4
    (D) 6

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

這一題的完整詳解

核心觀念

本題考查堆疊(Stack)的應用與經典演算法問題——最長有效括號子字串(Longest Valid Parentheses)。

  1. 堆疊儲存索引(Index)而非字元:
    • 透過儲存字元的索引位置,當遇到右括號 ')' 匹配成功時,可直接利用當前索引 ii 與堆疊頂端元素 st.top()\text{st.top()} 的差值計算出當前有效括號子字串的長度:
      長度=i−st.top()\text{長度} = i - \text{st.top()}
  2. 哨兵節點/基準點(Sentinel Index -1):
    • 程式初始時執行 st.push(-1),目的是作為長度計算的基準邊界,使得從字串開頭(索引 00)就成立的有效括號可以正確算出長度(例如 i−(−1)=i+1i - (-1) = i + 1)。
    • 當右括號過多導致堆疊清空時,將該右括號的索引 st.push(i) 作為新的「未匹配基準點」。

解題方法

給定輸入字串 s="()"s = \text{"()"},字串長度 s.length()=2s.\text{length}() = 2。

1. 變數初始狀態

  • 堆疊 st:放入底標 -1,即 st=[−1]\text{st} = [-1](頂端為 −1-1)。
  • maxLen = 0。

2. 迴圈追蹤(Trace)

步驟 (ii)當前字元 s[i]s[i]條件分支與操作堆疊內容(底 →\to 頂)maxLen\text{maxLen} 計算與更新
初始—st.push(-1)[-1]00
i=0i = 0'('符合 s[i] == '(',執行 st.push(0)[-1, 0]不變(00)
🔒

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

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

免費註冊

第 18 題

  1. Let s = "()(())", funcB(s) will return
    (A) 0
    (B) 2
    (C) 4
    (D) 6

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

這一題的完整詳解

核心觀念

這題涉及括號字串的「平衡值」計算。常見定義是:

  • 遇到左括號 (,平衡值加 11;
  • 遇到右括號 ),平衡值減 11;
  • funcB(s) 回傳掃描完整個字串後的最終平衡值。

題目未附上 funcB 的函式定義;以下依資料結構中最常見的括號平衡計算定義作答。

解題方法

令初始平衡值為 00,逐字元掃描:

字元計算平衡值
(0+10+111
)1−11-100
(0+10+111
(1+11+122
)2−12-111
)1−11-100

因此:

🔒

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

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

免費註冊

第 19 題

  1. Which of the following statements is NOT correct? Assuming s only consists of '(' and ')'.
    (A) For every opening parenthesis, '(', we push its index onto the stack
    (B) For every closing parenthesis, ')', we pop the stack
    (C) If the stack becomes empty after popping, it means we've encountered an unmatched
    closing parenthesis ')'
    (D) None of the above is correct

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

這一題的完整詳解

核心觀念

本題考查利用「堆疊(stack)」判斷括號是否配對正確。

掃描字串 ss 時,採用以下規則:

  • 遇到開括號 (:將其索引(index)推入堆疊。
  • 遇到閉括號 ):應與最近尚未配對的 ( 配對,因此從堆疊頂端取出一個索引。
  • 若遇到 ) 時堆疊原本就是空的,表示沒有可配對的開括號,這個 ) 即為未配對的閉括號。
  • 掃描結束後,若堆疊仍不為空,表示有未配對的開括號。

因此,判斷未配對閉括號的時機,是「執行 pop 之前檢查堆疊是否為空」。

解題方法

設目前掃描到的字元為 ):

  1. 先檢查 stack 是否為空。
  2. 若 stack 為空,表示沒有任何尚未配對的 (,因此目前的 ) 無法配對,屬於 unmatched closing parenthesis。
  3. 若 stack 不為空,才執行 pop,將最近的 ( 配對掉。

例如字串:

s="()"s = "()"

掃描過程如下:

字元動作堆疊狀態
(push[0][0]
)pop[][]

此時 pop 之後堆疊變空,只代表目前所有開括號都已配對完成,並不代表遇到了未配對的閉括號。

再看字串:

s=")("s = ")("

掃描第一個字元 ) 時,stack 一開始就是空的,因此該 ) 才是未配對的閉括號。

選項分析

(A) For every opening parenthesis, (, we push its index onto the stack

正確。

每遇到一個開括號 (,便將它的位置索引推入 stack,記錄尚未配對的開括號。例如掃描到索引 ii 的 (,執行:

🔒

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

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

免費註冊

第 20 題

  1. What is the purpose of funcB()?
    (A) Find the length of the input string
    (B) Find the maximum length of valid parentheses, having matched '(' and ')'
    (C) Check if given parentheses expression is balanced or not
    (D) Reverse the input string

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

這一題的完整詳解

核心觀念

本題考查「有效括號(valid parentheses)」與堆疊的應用。

若一段括號字串中的每個左括號 ( 都能依照正確順序與右括號 ) 配對,且配對過程中任一前綴的左括號數量不少於右括號數量,則稱該段括號為有效括號。

例如:

  • ():有效
  • (()):有效
  • ()():有效
  • )(:無效
  • (():無效

題目中的 funcB() 應是透過堆疊或索引記錄,判斷括號配對位置,並計算「最長有效括號子字串」的長度。這與單純判斷整個字串是否平衡不同。


解題方法

處理括號字串時,常見方法是使用堆疊記錄尚未配對的左括號位置,並搭配索引計算有效區段長度。

以字串:

()(()())()(()())

為例,程式會依序掃描每個字元:

  1. 遇到 (:記錄其位置。
  2. 遇到 ):嘗試與最近的 ( 配對。
  3. 配對成功後,根據目前位置與有效區段起點,更新最長長度。
  4. 若某個 ) 無法配對,表示有效括號區段被切斷,必須更新新的起點。

若程式的目的只是判斷括號是否平衡,通常只需在最後檢查堆疊是否為空;但題目選項中特別指出「maximum length」,表示函式還需要計算有效括號的最長長度,因此功能不只是平衡檢查。

例如輸入:

())()())()

其中最長有效括號子字串為 (),長度為:

22

整個字串並非完全平衡,但仍然存在長度為 22 的有效括號區段。因此,函式若能回傳這個最大長度,其功能就是尋找最長有效括號長度。


選項分析

(A) Find the length of the input string

錯誤。
若函式只要取得輸入字串長度,直接使用字串長度函式即可,不需要進行括號配對,也不需要使用堆疊或追蹤括號位置。


🔒

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

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

免費註冊

第 21 題

A version of quicksort is given in the following C code.
int pivot, i, j, tmp;
if (left < right) {
i = left;
j = right + 1;
pivot = v[left]; // used as a pivot value
do {
do i++; while (v[i] < pivot);
do j--; while (v[j] > pivot);
if (i < j) {
tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
} while (i<j);
tmp = v[left];
v[left] = v[j];
v[j] = tmp;
quicksort(v, left, j-1);
quicksort(v, j+1, right);
}

int main() {
int V[] = {12,2,16,30,8,28,4,10,20,6};
quicksort(V,0,9);
}

Which of the following statements are true: (5%) multiple anwsers
(A) The quicksort() function sorts the given array in a non-increasing order.
(B) The quicksort() function is a stable sorting algorithm.
(C) The quicksort() function is an in-place sorting algorithm.
(D) 28 is used as a pivot value during the sorting process.
(E) 8 is used as a pivot value during the sorting process.

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

這一題的完整詳解

核心觀念

本題考查 QuickSort 的:

  1. 分割(partition)方向
  2. Pivot 的選取方式
  3. 是否穩定(stable)
  4. 是否原地排序(in-place)

程式中:

  • pivot = v[left],每次都選取目前子陣列最左側元素作為 pivot。
  • i 從左向右尋找第一個 ≥pivot\geq pivot 的元素。
  • j 從右向左尋找第一個 ≤pivot\leq pivot 的元素。
  • 若 i<ji<j,交換 v[i] 與 v[j]。
  • 最後將 pivot 與 v[j] 交換,使 pivot 左側元素不大於它,右側元素不小於它。

因此,此版本 QuickSort 會將資料排序成**非遞減(由小到大)**順序。


解題方法:追蹤 Pivot

原始陣列為:

[12,2,16,30,8,28,4,10,20,6][12,2,16,30,8,28,4,10,20,6]

第一次呼叫:quicksort(V,0,9)

選取:

pivot=12pivot=12

經過分割與交換後:

[8,2,6,10,12,4,28,30,20,16][8,2,6,10,12,4,28,30,20,16]

此時 pivot 1212 位於索引 44,接著處理兩個子陣列:

  • 左側:索引 0∼30\sim3
[8,2,6,10][8,2,6,10]
  • 右側:索引 5∼95\sim9
[4,28,30,20,16][4,28,30,20,16]

左側子陣列:[8,2,6,10]

目前最左側元素為 88,因此:

pivot=8pivot=8

所以 8 確實被當作 pivot 使用。

分割後可得到:

[6,2,8,10][6,2,8,10]

之後再遞迴處理左右子陣列。


右側子陣列:[4,28,30,20,16]

目前最左側元素為 44,因此先選:

pivot=4pivot=4

分割後,右側剩下:

[28,30,20,16][28,30,20,16]

處理此子陣列時,最左側元素為 2828,因此:

pivot=28pivot=28

所以 28 也確實被當作 pivot 使用。


選項分析

(A) The quicksort() function sorts the given array in a non-increasing order.

錯誤。

程式中:

do i++; while (v[i] < pivot);
do j--; while (v[j] > pivot);

左側尋找大於等於 pivot 的元素,右側尋找小於等於 pivot 的元素,並將較小元素交換到左側、較大元素交換到右側。

因此排序結果是由小到大,即非遞減順序,不是由大到小的非遞增順序。


🔒

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

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

免費註冊

第 22 題

  1. Height: Assume that the height of a tree node is the number of edges on the longest path from the node to a leaf. A leaf node will have a height of 0. Balance: The balance of a node is defined: left_child_node's height - right_child_node's height. The balance of a leaf node is 0 (since The height of a "None" child node is defined as -1).
    🖼️【此處有附圖,請對照原卷】
    Tree A
    5
    /
    3 10
    / \ /
    2 4 7 11
    /
    1 9

    12

    8

Tree B
4
/
2 3
/ /
1 6 10
/ \ /
7 9 11

8

Which of the following statements are true based on the definitions given above. (5%) multiple anwsers
(A) The balance of every node in Tree A is 1, 0, or -1.
(B) The balance of every node in Tree B is 1, 0, or -1.
(C) Tree A is a binary search tree
(D) Tree B is a binary search tree
(E) Both Tree A and Tree B are AVL trees.

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

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

這一題的完整詳解

核心觀念

本題考查二元搜尋樹(BST)的大小關係,以及 AVL 樹的平衡條件。

節點高度是從該節點到最遠葉節點的邊數;葉節點高度為 00,空子節點高度為 −1-1。節點平衡值定義為:

平衡值=左子樹高度−右子樹高度\text{平衡值}=\text{左子樹高度}-\text{右子樹高度}

若每個節點的平衡值都在 −1、0、1-1、0、1 之中,該樹符合高度平衡條件;若同時也是 BST,便是 AVL 樹。BST 則要求每個節點的左子樹鍵值都小於該節點,右子樹鍵值都大於該節點。

解題方法

依照原卷圖形,從葉節點往上逐層計算高度和平衡值。再分別檢查兩棵樹是否符合 BST 的大小關係。

Tree A

節點高度平衡值
1,4,6,8,121,4,6,8,120000
221111
332211
991111
7722−1-1
111111−1-1
10103311
5544−1-1

例如,節點 77 的左子節點 66 高度為 00,右子節點 99 高度為 11,所以平衡值為 0−1=−10-1=-1。Tree A 的所有節點平衡值皆為 −1、0、1-1、0、1。

Tree A 也符合 BST 順序:每個節點的左側鍵值都比該節點小,右側鍵值都比該節點大。因此 Tree A 是 AVL 樹。

Tree B

🔒

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

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

免費註冊

第 23 題

  1. Given the following directed graph:
    Let G = (V, E) be a graph, V and E are sets of vertices and edges.
    V = {V0, V1, V2, V3, V4, V5, V6}
    E = {(V0->V1), (V0->V3), (V1->V3), (V1->V4), (V2->V0), (V2->V3), (V2->V5), (V3->V2),
    (V3->V4), (V3->V5), (V3->V6), (V4->V6), (V5->V6), (V6->V4), (V6->V5)}
    where (V0->V1) represents an edge from VO to V1.
    Which of the following statements are true based on the definitions given above. (5%) multiple anwsers
    (A) G is a directed acyclic graph
    (B) Do a breadth-first search beginning at V0, V0>V1>V2>V3>V4>V5>V6 is a possible order visited by the algorithm
    (C) Do a depth-first search beginning at V3, V3>V6>V4>V5>V2>V0>V1 is a possible order visited by the algorithm
    (D) Do a breadth-first search beginning at V2, V2>V0>V3>V5>V1>V4>V6 is a possible order visited by the algorithm
    (E) Do a depth-first search beginning at V1, V1>V3>V2>V5>V>V4>V0 is a possible order visited by the algorithm

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

這一題的完整詳解

圖形結構
V={V0,V1,V2,V3,V4,V5,V6}V=\{V_0,V_1,V_2,V_3,V_4,V_5,V_6\}
E={V0 ⁣→ ⁣V1,  V0 ⁣→ ⁣V3,  V1 ⁣→ ⁣V3,  V1 ⁣→ ⁣V4,  V2 ⁣→ ⁣V0,  V2 ⁣→ ⁣V3,  V2 ⁣→ ⁣V5,  V3 ⁣→ ⁣V2,  V3 ⁣→ ⁣V4,  V3 ⁣→ ⁣V5,  V3 ⁣→ ⁣V6,  V4 ⁣→ ⁣V6,  V5 ⁣→ ⁣V6,  V6 ⁣→ ⁣V4,  V6 ⁣→ ⁣V5}E=\{V_0\!\to\!V_1,\;V_0\!\to\!V_3,\;V_1\!\to\!V_3,\;V_1\!\to\!V_4,\;V_2\!\to\!V_0,\;V_2\!\to\!V_3,\;V_2\!\to\!V_5,\;V_3\!\to\!V_2,\;V_3\!\to\!V_4,\;V_3\!\to\!V_5,\;V_3\!\to\!V_6,\;V_4\!\to\!V_6,\;V_5\!\to\!V_6,\;V_6\!\to\!V_4,\;V_6\!\to\!V_5\}


(A) G 為有向無環圖 (DAG)

存在有向迴路,例如
V2 ⁣→ ⁣V0 ⁣→ ⁣V3 ⁣→ ⁣V2V_2\!\to\!V_0\!\to\!V_3\!\to\!V_2 以及 V4 ⁣→ ⁣V6 ⁣→ ⁣V4V_4\!\to\!V_6\!\to\!V_4。
因此 不為 DAG → 錯誤。

(B) BFS 從 V0V_0 的訪問序列 V0,V1,V2,V3,V4,V5,V6V_0,V_1,V_2,V_3,V_4,V_5,V_6

從 V0V_0 可直接到達的僅有 V1,V3V_1,V_3。V2V_2 必須在走訪完 V3V_3 後才被發現。

🔒

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

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

免費註冊

第 24 題

  1. We have an open addressing hash table. Please simulate the hash table's behavior storing integers
    given the following conditions:
    ✓ The hash table size is 9.
    ✓ It uses quadratic probing for collision resolution.
    ✓ The hash function uses the int value (plus any probing needed) mod the size of the table as
    described in the following.
    Hashing+Probing: ((k(modm))+i2)(modm)k \pmod m) + i^2) \pmod m, kk is key, mm is the size of the table, probing from i=0,1,2,...i = 0, 1, 2,...
    What values will be in the hash table after the following sequence of insertions?
    18, 16, 10, 7, 26
    🖼️【此處有附圖,請對照原卷】
    [0] [1] [2] [3] [4] [5] [6] [7] [8]

Which of the following statements are correct. (5%) multiple anwsers
(A) 18 is stored at [0]
(B) 10 is stored at [1]
(C) 26 is stored at [8]
(D) 7 is stored at [7]
(E) 16 is stored at [7]

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

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

這一題的完整詳解

本題考查開放定址法 (Open Addressing) 的雜湊表 (Hash Table) 操作,特別是二次探測法 (Quadratic Probing) 的碰撞解決。

雜湊表大小 m=9m = 9。
雜湊函數 h(k,i)=((k(modm))+i2)(modm)h(k, i) = ((k \pmod m) + i^2) \pmod m。
插入的鍵值序列:18, 16, 10, 7, 26。

我們逐步模擬插入過程:

1. 插入 18:

  • k=18k = 18。
  • i=0i = 0: h(18,0)=((18(mod9))+02)(mod9)=(0+0)(mod9)=0h(18, 0) = ((18 \pmod 9) + 0^2) \pmod 9 = (0 + 0) \pmod 9 = 0。
  • 位置 [0] 空,插入 18。
  • Hash Table: [18, _, _, _, _, _, _, _, _]

2. 插入 16:

  • k=16k = 16。
  • i=0i = 0: h(16,0)=((16(mod9))+02)(mod9)=(7+0)(mod9)=7h(16, 0) = ((16 \pmod 9) + 0^2) \pmod 9 = (7 + 0) \pmod 9 = 7。
  • 位置 [7] 空,插入 16。
  • Hash Table: [18, _, _, _, _, _, _, 16, _]

3. 插入 10:

  • k=10k = 10。
  • i=0i = 0: h(10,0)=((10(mod9))+02)(mod9)=(1+0)(mod9)=1h(10, 0) = ((10 \pmod 9) + 0^2) \pmod 9 = (1 + 0) \pmod 9 = 1。
  • 位置 [1] 空,插入 10。
  • Hash Table: [18, 10, _, _, _, _, _, 16, _]

4. 插入 7:

  • k=7k = 7。
  • i=0i = 0: h(7,0)=((7(mod9))+02)(mod9)=(7+0)(mod9)=7h(7, 0) = ((7 \pmod 9) + 0^2) \pmod 9 = (7 + 0) \pmod 9 = 7。
  • 位置 [7] 已被 16 佔用。發生碰撞。
  • i=1i = 1: h(7,1)=((7(mod9))+12)(mod9)=(7+1)(mod9)=8h(7, 1) = ((7 \pmod 9) + 1^2) \pmod 9 = (7 + 1) \pmod 9 = 8。
  • 位置 [8] 空,插入 7。
🔒

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

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

免費註冊

第 1 題

  1. Consider the following function, where n is a positive integer:
    Function mystery(n):
    If n <= 1:
    Return 1
    Else:
    Return mystery(n/2) + mystery(n / 2) + n

Please (A) answer the time complexity of this function (4 points) and (B) justify your answer with a detailed explanation (6 points).

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

這一題的完整詳解

核心觀念

本題考查遞迴函式的時間複雜度,關鍵在於:

  • 每次呼叫會產生 兩個規模約為 n/2n/2 的子問題。
  • 每次遞迴呼叫之外,還會執行一次加法與加上 nn 的運算,視為常數時間 Θ(1)\Theta(1)。
  • 可利用遞迴式與 Master Theorem 分析。

令 T(n)T(n) 表示 mystery(n) 的執行時間。


解題方法

當 n≤1n \leq 1 時,函式直接回傳 11,因此:

T(n)=Θ(1)T(n)=\Theta(1)

當 n>1n>1 時,函式執行兩次 mystery(n/2),並進行常數次算術運算,因此:

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

套用 Master Theorem 標準形式:

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

其中:

a=2,b=2,f(n)=Θ(1)a=2,\qquad b=2,\qquad f(n)=\Theta(1)

計算比較基準:

nlog⁡ba=nlog⁡22=nn^{\log_b a} = n^{\log_2 2} = n

因此:

f(n)=Θ(1)=O(n1−ε)f(n)=\Theta(1)=O(n^{1-\varepsilon})

可視為 Master Theorem 的第一種情況,所以:

T(n)=Θ(nlog⁡ba)=Θ(n)T(n)=\Theta\left(n^{\log_b a}\right)=\Theta(n)

遞迴樹驗證

第 00 層有 11 個函式呼叫。

第 11 層有 22 個函式呼叫。

第 22 層有 222^2 個函式呼叫。

第 kk 層有:

2k2^k

個函式呼叫。

每次輸入規模減半,因此遞迴深度約為:

log⁡2n\log_2 n

最底層的函式呼叫數量約為:

2log⁡2n=n2^{\log_2 n}=n
🔒

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

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

免費註冊
📄 以下 2 題共用同一段題幹

The following table is the adjacency list and edge weights of a graph:

NodeAdjacent Nodes (Target Node, Weight)
00(1,4),(2,1)(1, 4), (2, 1)
11(3,1)(3, 1)
22(1,2),(3,5)(1, 2), (3, 5)
33None

第 2-(A) 題5 分

Please draw the graph based on the table.

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

這一題的完整詳解

核心觀念

本題考查如何將有向加權圖的 adjacency list(鄰接串列)轉成圖形。每筆資料 (v,w)(v,w) 表示:由該列的節點出發,沿有向邊前往目標節點 vv,邊權重為 ww。

解題方法

原卷表格列出:00 的鄰點為 (1,4)(1,4)、(2,1)(2,1);11 的鄰點為 (3,1)(3,1);22 的鄰點為 (1,2)(1,2)、(3,5)(3,5);33 沒有鄰點。因此,圖中的邊依序為 0→10\to1(權重 44)、0→20\to2(權重 11)、1→31\to3(權重 11)、2→12\to1(權重 22)及 2→32\to3(權重 55)。

🔒

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

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

免費註冊

第 2-(B) 題5 分

Using Dijkstra's algorithm, calculate the shortest path from node 00 to all other nodes and draw the resulting shortest path.

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

這一題的完整詳解

核心觀念

本題考加權有向圖的單源最短路徑。Dijkstra 演算法適用於邊權重皆為非負數的圖:每次從尚未確定的節點中,選出目前暫定距離最小者,確定其最短距離,再沿著該節點的出邊進行「鬆弛」,也就是檢查經過該節點能否縮短鄰點的距離。

解題方法

依原卷表格,圖中有向邊為 0→10\to1 權重 44、0→20\to2 權重 11、1→31\to3 權重 11、2→12\to1 權重 22、2→32\to3 權重 55;節點 33 沒有出邊。

以節點 00 為起點,初始化 d(0)=0d(0)=0,其餘節點距離為 ∞\infty。依序選取暫定距離最小的未確定節點並鬆弛其出邊:

步驟確定節點鬆弛結果暫定距離 (d(0),d(1),d(2),d(3))(d(0),d(1),d(2),d(3))
初始化——(0,∞,∞,∞)(0,\infty,\infty,\infty)
100d(1)=4, d(2)=1d(1)=4,\ d(2)=1(0,4,1,∞)(0,4,1,\infty)
222經 2→12\to1 得 1+2=3<41+2=3<4,更新 d(1)=3d(1)=3;經 2→32\to3 得 1+5=61+5=6,更新 d(3)=6d(3)=6(0,3,1,6)(0,3,1,6)
311經 1→31\to3 得 3+1=4<63+1=4<6,更新 d(3)=4d(3)=4(0,3,1,4)(0,3,1,4)
🔒

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

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

免費註冊
📄 以下 2 題共用同一段題幹

Class ListNode

Attributes: value, next

Constructor(value):

  • value = value
  • next = null

Function hasCycle(head):

  • If head is null or head.next is null:
    • Return false
  • slowPointer = head
  • fastPointer = head
  • While fastPointer is not null and fastPointer.next is not null:
    • slowPointer = slowPointer.next
    • fastPointer = fastPointer.next.next
    • If slowPointer == fastPointer:
      • Return true
  • Return false

Main:

  • Create node1 with value 11
  • Create node2 with value 22
  • Create node3 with value 33
  • Create node4 with value 44
  • Link node1.next to node2
  • Link node2.next to node3
  • Link node3.next to node4
  • Link node4.next to node2
  • result = hasCycle(node1)
  • Print "Does the linked list have a cycle? " + result

第 3-(A) 題5 分

Why can the hasCycle function successfully detect the presence of a cycle in the linked list when link node4.next to node2? Please explain in detail how the slow and fast pointers work and at which node they meet.

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

這一題的完整詳解
載入中…

第 3-(B) 題5 分

If the assignment link node4.next to node2 is removed and the program is executed, what will be the output of the hasCycle function? Please explain the reason for this situation and how the algorithm handles it.

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

這一題的完整詳解
載入中…
📄 以下 3 題共用同一段題幹

Class TreeNode

Attributes: value, left, right

Constructor(value):

  • value = value
  • left = null
  • right = null

Function zigzagLevelOrder(root):

  • result = empty list of lists
  • If root is null:
    • Return result
  • queue = empty queue
  • Enqueue(root, queue)
  • leftToRight = true
  • While queue is not empty:
    • levelSize = size of queue
    • currentLevel = empty list
    • For i=0i = 0 to levelSize −1- 1:
      • currentNode = Dequeue(queue)
      • If leftToRight:
        • Append(currentNode.value, currentLevel)
      • Else:
        • Insert at beginning(currentNode.value, currentLevel)
      • If currentNode.left is not null:
        • Enqueue(currentNode.left, queue)
      • If currentNode.right is not null:
        • Enqueue(currentNode.right, queue)
    • Append(currentLevel, result)
    • leftToRight = not leftToRight
  • Return result

Function main:

  • root = new TreeNode(11)
  • root.left = new TreeNode(22)
  • root.right = new TreeNode(33)
  • root.left.left = new TreeNode(44)
  • root.left.right = new TreeNode(55)
  • root.right.right = new TreeNode(66)
  • result = zigzagLevelOrder(root)
  • Print(result)

第 4-(A) 題3 分

What is the tree structure in the code?

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

這一題的完整詳解
載入中…

第 4-(B) 題3 分

What is the output of the code?

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

這一題的完整詳解
載入中…

第 4-(C) 題4 分

In the zigzagLevelOrder method, if the initial value of leftToRight is changed to false, what will the output be after execution? Please provide a detailed explanation.

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

這一題的完整詳解
載入中…

其他考古題