112 地方特考三等 資訊處理類科 資料結構 考古題詳解

112 年・地方特考・三等・資訊處理類科
試題代碼 資料結構

第 一 題12 分

請以 C、C++、C#、Java 或 Python 撰寫 2 個方法,一個以迴圈方式、一個以遞迴方式,對存在於 singular linked list 的資料進行 linearly search。假設 Node 的結構如下:

class Node { int data=0; Node next=null; Node(int dd, Node nn) { data=dd; next=nn; } }

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

這一題的完整詳解

核心觀念

線性搜尋(linear search)是從單向鏈結串列的起點開始,依序比較每個節點的 data 與目標值。單向鏈結串列只能透過 next 前往下一個節點,因此最壞情況下須走訪整個串列。

以下方法在找到目標時回傳該節點;搜尋到串列尾端仍未找到時回傳 null。若有重複值,回傳從串列起點遇到的第一個符合節點。

解題方法

假設方法接收串列起點 head 與搜尋目標 target,且 head 為 null 代表空串列。

迴圈方式

static Node linearSearchIterative(Node head, int target) {
 Node current = head;

 while (current != null) {
 if (current.data == target) {
 return current;
 }
 current = current.next;
 }

 return null;
}

current 由 head 開始逐節點向後移動。每次先檢查目前節點;相符就回傳,否則移至 current.next。當 current == null 時,表示已走到串列尾端,整串串列都沒有目標值。

遞迴方式

🔒

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

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

免費註冊

第 二 題24 分

請為數列 0,10,30,20,50,80,40,90,70,600, 10, 30, 20, 50, 80, 40, 90, 70, 60 建立 AVL tree、Min/Max heap、2-4 tree,並依它們的性質以 yes or no 完成下表。

註:所建立的 tree or heap 請以圖示。如果是 Searching Tree,請以左小右大的方式建立。

BalanceSearching Tree
AVL tree
Min heap
Max heap
2-4 tree
🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題比較四種樹狀結構的兩項性質:

  • Balance:樹高是否受到結構規則控制,使左右子樹高度大致平衡。
  • Searching Tree:是否具有搜尋樹的順序性;本題採左小右大,且每個節點的子樹鍵值具有區間順序。

以下依數列順序逐筆插入建立;Heap 採一般逐筆插入並向上調整。


一、AVL tree

AVL tree 要求每個節點的平衡因子滿足:

∣BF∣=∣高度(左子樹)−高度(右子樹)∣≤1|BF|=|高度(左子樹)-高度(右子樹)|\leq 1

依序插入時,主要旋轉如下:

  • 插入 3030:形成 RR,對 00 左旋。
  • 插入 8080:形成 RR,對 3030 左旋。
  • 插入 4040:形成 RR,對 1010 左旋。
  • 插入 6060:形成 LL,對 8080 右旋。

最後的 AVL tree 為:

 50
 / \
 30 70
 / \ / \
 10 40 60 80
 / \ \
 0 20 90

AVL tree 經過旋轉維持高度平衡,因此 Balance = yes;同時符合左小右大的搜尋順序,因此 Searching Tree = yes。


二、Min heap

Min heap 必須滿足:

父節點≤子節點父節點 \leq 子節點

逐筆插入並向上調整後,陣列表示為:

[0,10,30,20,50,80,40,90,70,60][0,10,30,20,50,80,40,90,70,60]

其樹形如下:

 0
 / \
 10 30
 / \ / \
 20 50 80 40
 / \ /
 90 70 60

每個父節點均小於或等於子節點,符合 Min heap 定義。Heap 使用完全二元樹,因此具有結構上的平衡性,但節點並未依左小右大排列。

所以:

  • Balance = yes
  • Searching Tree = no

三、Max heap

Max heap 必須滿足:

父節點≥子節點父節點 \geq 子節點

逐筆插入並向上調整:

  • 插入 1010 後,1010 上移。
  • 插入 3030 後,3030 上移。
  • 插入 2020 後,2020 上移。
  • 插入 50,80,40,90,70,6050,80,40,90,70,60 時,分別依父子大小關係向上調整。

最後陣列表示為:

[90,70,80,40,60,10,50,0,20,30][90,70,80,40,60,10,50,0,20,30]

樹形如下:

 90
 / \
 70 80
 / \ / \
 40 60 10 50
 / \ /
 0 20 30

每個父節點均大於或等於子節點,符合 Max heap 定義。Heap 的完全二元樹結構具有平衡性,但不具左小右大的搜尋樹順序。

所以:

  • Balance = yes
  • Searching Tree = no

🔒

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

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

免費註冊

第 三 題10 分

請以如下的 Huffman Tree 所做的數字編碼,解讀 010101111101001000011010101111101001000011 編碼對應的數字。

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

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

Huffman Tree 以「由根節點走到葉節點」的路徑作為數字編碼:

  • 向左走記為 00
  • 向右走記為 11
  • 走到葉節點時,得到一個數字
  • 依序切割編碼字串,直到全部讀完

依圖可得各數字編碼:

數字Huffman 編碼2000010090101401105011161000710018101031011111\begin{array}{c|c} \text{數字} & \text{Huffman 編碼}\\ \hline 2 & 00\\ 0 & 0100\\ 9 & 0101\\ 4 & 0110\\ 5 & 0111\\ 6 & 1000\\ 7 & 1001\\ 8 & 1010\\ 3 & 1011\\ 1 & 11 \end{array}

解題方法

將題目字串由左至右依照上述編碼切割:

010101111101001000011010101111101001000011

切割結果為:

🔒

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

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

免費註冊

第 四 題24 分

針對如下的有向圖(節點為走訪對象,連線上的數字為走訪的 cost),依如下 BFS(配合 queue)與 DFS(配合 stack)演算法,進行所有節點的走訪。多個節點可以走訪時,以連線上 cost 較低者優先,結果請以迴圈內部的顯示要求,依下表形式填入。

註:假設節點 S 為起始點。

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

BFS 演算法的 queue 垂直表示,開口在上方;queue 水平表示,出口在左,入口在右。

BFS 演算法Loop1…
print node
queue
processSet
DFS 演算法Loop1…
print node
Stack
processSet

BFS/DFS 演算法(/前為 BFS 使用 queue,/後為 DFS 使用 stack):

Step1:set queue/stack to empty
   set processSet to empty

Step2:enqueue/push S and add S into processSet

Step3:while queue/stack is not empty

Step31:dequeue/pop and print it

Step32:enqueue/push all one step neighbors which are not in processSet according to the cost of edges and add them into processSet

Step33:display content of queue/stack and processSet

🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查:

  1. BFS 使用 queue,採先進先出(FIFO)。
  2. DFS 使用 stack,採後進先出(LIFO)。
  3. processSet 在節點加入 queue 或 stack 時立即記錄,避免同一節點重複加入。
  4. 多個可走訪節點依邊的 cost 由小到大處理。
  5. BFS 的走訪順序受 queue 影響;DFS 的走訪順序受 stack 的「最後 push 者先 pop」影響。

依圖可讀得主要邊如下:

  • S→A:21S\to A:21、S→B:11S\to B:11、S→C:31S\to C:31
  • A→B:1A\to B:1
  • B→X:2B\to X:2、B→Y:3B\to Y:3、B→C:4B\to C:4
  • C→Z:5C\to Z:5
  • X→Y:6X\to Y:6、X→Z:7X\to Z:7、X→A:9X\to A:9
  • Y→Z:8Y\to Z:8
  • Z→C:10Z\to C:10

以下集合內容依「加入順序」表示;queue 由左至右表示出口到入口,stack 由左至右表示 stack top 到 stack bottom。

解題方法

BFS

起點 SS 先加入 queue 與 processSet。

  • 從 SS 可到 A,B,CA,B,C,cost 依序為 11,21,3111,21,31,因此加入順序為 B,A,CB,A,C。
  • 從 BB 可到 X,Y,CX,Y,C,其中 CC 已在 processSet,故依 cost 加入 X,YX,Y。
  • 之後依 queue 順序逐一取出節點。
BFS 演算法Loop1Loop2Loop3Loop4Loop5Loop6Loop7
print nodeSBACXYZ
queueB, A, CA, C, X, YC, X, YX, Y, ZY, ZZempty
🔒

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

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

免費註冊

第 五 題30 分

請完成下列表格有關排序演算法的 time complexity(假設排序資料有 nn 個,資料位數有 dd 個)、是否為 In-Space 演算法、是否為 Stable 演算法及範例數列 50,46,37,28,1950, 46, 37, 28, 19 進行降冪排列時所需的比較次數。

排序演算法Time Complexity BestTime Complexity WorstIn-Space(Yes/No)Stable(Yes/No)降冪比較次數 50,46,37,28,1950, 46, 37, 28, 19
Bubble
Insertion
Merge(奇數時,後半段多 1)
Quick(第一個當 pivot)
Radix(base 10)
Selection
🖼️ 本題原卷含圖表。基於試題來源之版權考量,本站不轉載原卷影像; 題目文字已完整轉錄,圖表請自行參閱考選部公告之試題原檔。

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

這一題的完整詳解

核心觀念

本題考查各排序演算法的:

  • 最佳與最差時間複雜度
  • In-Space:是否只使用 O(1)O(1) 額外空間
  • Stable:相同鍵值的相對順序是否保持
  • 對指定數列進行降冪排序時的比較次數

Radix Sort 不依賴元素彼此比較,因此比較次數為 00。

以下採用一般教科書中的標準版本:

  • Bubble Sort 使用提前結束判斷
  • Merge Sort 合併時,兩邊皆有元素才進行比較
  • Quick Sort 採第一個元素為 pivot,且每次 partition 對其餘元素各比較一次

解題方法

指定數列為:

50, 46, 37, 28, 1950,\ 46,\ 37,\ 28,\ 19

此數列本身已經是降冪排列。

Bubble Sort

降冪排序時,第一輪檢查相鄰元素即可發現沒有任何交換,需比較:

5−1=45-1=4

最佳時間複雜度為 O(n)O(n),最差為 O(n2)O(n^2)。Bubble Sort 僅交換相鄰元素,因此為 Stable,且為 In-Space。

Insertion Sort

數列已符合降冪順序,每個新元素只需與前一元素比較一次:

4 次4 \text{ 次}

最佳時間複雜度為 O(n)O(n),最差為 O(n2)O(n^2)。Insertion Sort 為 In-Space 且 Stable。

Merge Sort

依題意,奇數個元素時後半段多一個元素:

[50,46][37,28,19][50,46]\quad [37,28,19]

合併比較次數如下:

  • 合併 [50][50] 與 [46][46]:11 次
  • 合併 [28][28] 與 [19][19]:11 次
  • 合併 [37][37] 與 [28,19][28,19]:22 次
  • 最後合併 [50,46][50,46] 與 [37,28,19][37,28,19]:44 次

總比較次數:

1+1+2+4=81+1+2+4=8

Merge Sort 的最佳與最差時間複雜度皆為 O(nlog⁡n)O(n\log n)。標準 Merge Sort 需要額外陣列,因此不是 In-Space,但合併時可維持相同元素順序,故為 Stable。

Quick Sort

第一個元素作為 pivot。對降冪排序而言,5050 是最大值,每次都成為其中一側的極端 pivot,形成最差情況。

比較次數為:

4+3+2+1=104+3+2+1=10

Quick Sort 的最佳時間複雜度為 O(nlog⁡n)O(n\log n),最差為 O(n2)O(n^2)。標準原地 Quick Sort 為 In-Space,但交換可能改變相同鍵值的相對順序,因此不是 Stable。

🔒

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

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

免費註冊

其他考古題