112 高普考高考三級 資訊處理 資料結構 考古題詳解
第 一 題25 分
某一公司有 8 個待執行工作,各工作依序自 A 至 H、每間隔一天放入對應的高優先執行佇列(Queue)或低優先執行佇列(Queue)。例如,A(低)表示 A 工作將於第一天放入低優先執行佇列;C(高)表示 C 工作將於第三天放入高優先執行佇列。
各工作之優先順序及執行時間如下:
- A(低),執行時間 天
- B(低),執行時間 天
- C(高),執行時間 天
- D(高),執行時間 天
- E(低),執行時間 天
- F(高),執行時間 天
- G(高),執行時間 天
- H(低),執行時間 天
各工作的執行規則如下:當高優先執行佇列內有工作待完成時,須優先執行該佇列內的工作(由第一個開始執行),直到高優先執行佇列內沒有任何待完成工作時,方可執行低優先執行佇列內的工作(由第一個開始執行)。
(一)試計算執行此 8 個工作需要多少天方可完成。(10 分)
(二)試計算此 8 個工作自放入佇列至開始執行的平均等待時間。(15 分)
(此題原卷文字擷取不全,請參考原卷)
登入後即可作答並保存紀錄。
核心觀念
本題考查「兩層優先權佇列」的排程:
- 每個工作依序於第 至第 天放入佇列。
- 高優先佇列的優先權高於低優先佇列。
- 同一佇列內採先進先出(FIFO)。
- 工作一旦開始執行即連續完成,不因新工作到達而中斷。
- 只有在高優先佇列沒有待執行工作時,才可執行低優先佇列工作。
解題方法
各工作到達時間如下:
| 工作 | 到達日 | 佇列 | 執行時間 |
|---|---|---|---|
| A | 1 | 低 | 2 |
| B | 2 | 低 | 1 |
| C | 3 | 高 | 2 |
| D | 4 | 高 | 2 |
| E | 5 | 低 | 1 |
| F | 6 | 高 | 1 |
| G | 7 | 高 | 2 |
| H | 8 | 低 | 1 |
依照「高優先佇列優先」規則排程:
| 執行工作 | 開始執行日 | 完成日 | 等待時間 |
|---|---|---|---|
| A | 1 | 2 | |
| C | 3 | 4 | |
| D | 5 | 6 | |
| F | 7 | 7 | |
| G | 8 | 9 | |
| B | 10 | 10 | |
| E | 11 | 11 | |
| H | 12 | 12 |
說明如下:
第 二 題25 分
某一物流公司有 8 個地點要運送,每條方向性連線及其數字代表兩個地點的運送順序及運送成本。
(此題原卷文字擷取不全,請參考原卷)
(一)試使用拓樸排序法,找出此 8 個地點的運送順序以及總共運送成本。(15 分)
(二)若將上圖的地點 2 與地點 4 之間,以及地點 6 與地點 7 之間的連線方向顛倒,則運用拓樸排序法後,此 8 個地點的運送順序以及總共運送成本為何?(10 分)
登入後即可作答並保存紀錄。
核心觀念
本題考:
- 有向無環圖(DAG)的拓樸排序。
- Kahn 演算法:反覆選取入度為 的頂點,將其列入順序並刪除其出邊。
- 拓樸排序存在的必要條件:圖中不可存在有向循環。
- 總運送成本為所有有向連線標示成本的總和。
由圖可讀得各邊如下:
(一)拓樸排序與總運送成本
各頂點初始入度為:
| 頂點 | 入度 |
|---|---|
| 1 | 0 |
| 2 | 3(來自 1、3、4) |
| 3 | 1(來自 1) |
| 4 | 1(來自 3) |
| 5 | 2(來自 4、6) |
| 6 | 2(來自 2、4) |
| 7 | 2(來自 5、6) |
| 8 | 2(來自 5、7) |
依序執行:
- 頂點 入度為 ,列入排序;刪除 、。
- 頂點 入度變為 ,列入排序;刪除 、。
- 頂點 入度變為 ,列入排序;刪除 、、。
- 頂點 入度變為 ,列入排序;刪除 。
- 頂點 入度變為 ,列入排序;刪除 、。
- 頂點 入度變為 ,列入排序;刪除 、。
- 頂點 入度變為 ,列入排序;刪除 。
- 頂點 入度變為 ,列入排序。
因此拓樸排序為:
總運送成本為所有邊成本相加:
第 三 題25 分
在電腦網路中,透過 IP 位址查詢對應裝置是常見的動作。今某電腦網路有以下表格所示的 IP 位址以及對應裝置。假設每個 IP 位址有 個位元,當輸入某一 IP 位址以查詢對應裝置時,最壞情況為此表格中的每個 IP 位址的每個位元皆需要搜尋一次,以確認此輸入的 IP 位址是否有對應的裝置。
由於這樣的 IP 位址儲存方式,將造成查詢時的高複雜度。例如,若表內有 個 IP 位址,查詢複雜度為 。因此,運用適當的資料結構以降低查詢複雜度,已成為電腦網路的重要課題。
IP 位址與對應裝置如下:
| IP 位元 0 | IP 位元 1 | IP 位元 2 | IP 位元 3 | IP 位元 4 | IP 位元 5 | IP 位元 6 | IP 位元 7 | 裝置 |
|---|---|---|---|---|---|---|---|---|
| A | ||||||||
| B | ||||||||
| C | ||||||||
| D | ||||||||
| E | ||||||||
試建立並驗證一個樹狀資料結構,不僅可以儲存以上表格方式的 IP 位址以及對應裝置資訊,並可使查詢 IP 位址所對應裝置的最壞情況複雜度維持在常數 (也就是 IP 位址位元數)。(25 分)
登入後即可作答並保存紀錄。
核心觀念
本題的核心觀念在於運用**二元字典樹(Binary Trie / Bitwise Trie)**解決字串與二進位鍵值(Key)的檢索問題。在計算機網路與路由器轉送表(Forwarding Table)的設計中,這是最具代表性的資料結構之一。
- 二元字典樹(Binary Trie)定義:
- 樹中的每個節點包含兩個子指標:左指標代表位元 ,右指標代表位元 。
- 鍵值(IP 位址)不直接儲存在單一節點內部,而是由樹根(Root)到該節點的路徑(Path)所決定。
- 葉節點(Leaf Node)或特定終端節點存放對應的資料內容(本題為「對應裝置代號」)。
- 查詢複雜度特性:
- 線性搜尋(逐筆比對):若有 筆資料且每筆長度為 位元,最壞情況需要比對 次位元,時間複雜度為 。
- Trie 搜尋:搜尋時間僅取決於鍵值的位元長度 ,與資料筆數 無關。本題鍵值長度固定為 位元,因此由樹根向下走訪最多只需經過 個分支,時間複雜度嚴格維持在 常數時間。
解題方法
一、樹狀資料結構設計
設計一棵高度為 的「二元字典樹」(Binary Trie):
- 節點結構(Node Structure):
LeftChild:指向位元為 的子節點。RightChild:指向位元為 的子節點。Device:儲存對應的裝置代號(若為非終端的中繼節點則為空值null;於深度為 的葉節點儲存A、B、C、D、E等標籤)。
- 分支規則:
- 從最高有效位元(Most Significant Bit, 位元 0)至最低有效位元(Least Significant Bit, 位元 7)逐一位元檢驗。
- 當前位元為 則走訪左分支;為 則走訪右分支。
二、建立樹狀結構(以題目 5 個 IP 為例)
將題目所提供的 5 個 8 位元 IP 位址依序插入 Binary Trie:
- 裝置 A:
0 0 1 1 1 1 0 0 - 裝置 B:
0 0 1 1 0 0 1 1 - 裝置 C:
1 1 0 0 0 0 1 1 - 裝置 D:
1 1 0 0 1 1 0 0 - 裝置 E:
1 1 0 1 1 1 0 0
依各 IP 的位元路徑逐步建構,所得之樹狀結構如下圖所示(括號數字代表所在深度/位元層級):
[Root] (層級 0)
/ \
bit0=0/ \bit0=1
/ \
(N1) (N2)
/ \bit1=1
bit1=0/ \
/ (N3)
(N4) /
\bit2=1 bit2=0/
\ /
(N5) (N6)
/ bit3=/ \bit3=1
bit3=1/ / \
/ (N7) (N8)
(N9) / \ \bit4=1
/ \ bit4=0 / \ \
bit4=0/ \bit4=1 / bit4=1\ (N13)
/ \ (N10) (N11) \bit5=1
(N14) (N15) \ \ \
/ \ bit5=0\ bit5=1 \ (N16)
bit5=0/ bit5=1 \ \ \ /
/ \ (N12) (N12')\bit6=0
(N17) (N18) \ \ /
\ / bit6=1 \ bit6=0 \/
bit6=1\ bit6=0/ \ \
\ / (N19) (N20)
(N21) (N22) \ \
\bit7=1 \bit7=0 bit7=1 \ bit7=0 \
\ \ \ \
[ B ] [ A ] [ C ] [ D, E 共用路徑終點 ]
├── bit3=0 支線:[ D ]
└── bit3=1 支線:[ E ]
完整精確路徑展開驗證:
- 路徑 A(IP:
00111100): - 路徑 B(IP:
00110011): - 路徑 C(IP:
11000011):
第 四 題25 分
某一系統有下表所示的使用者帳號與密碼資料。今為了保密需要,欲將使用者密碼透過雜湊函數加以加密,並將雜湊後的密碼連同使用者帳號儲存於一個 2-3 樹(2-3 tree)中,依使用者帳號英文字母順序儲存。
雜湊函數為:
其中英文字母 a–z 相當於 –。
使用者帳號與密碼如下:
| 使用者帳號 | 使用者密碼 |
|---|---|
| AA | 234abc |
| BB | 123bcd |
| CD | aa012 |
| AC | 555be |
| BD | 45fdd |
| CA | 712ccc |
(一)試計算出雜湊後的密碼資料。(10 分)
(二)試建立此 2-3 樹,以儲存系統的使用者帳號與(雜湊後)密碼資料。(15 分)
登入後即可作答並保存紀錄。
核心觀念
- 雜湊函數(Hash Function): 依題目定義,。其中字母採代號數值轉換(),數字則直接取其數值()累加。
- 2-3 樹(2-3 Tree)之定義與性質:
- 為 3 階 B 樹(B-tree of order 3)的特例,是內部節點均為 2-節點(2-node)或 3-節點(3-node)的高度平衡搜尋樹。
- 2-節點:包含 1 個鍵值(Key)及 2 棵子樹;左子樹所有鍵值小於該鍵值,右子樹所有鍵值大於該鍵值。
- 3-節點:包含 2 個鍵值()及 3 棵子樹;左子樹鍵值 、中子樹鍵值介於 與 之間、右子樹鍵值 。
- 平衡性質:所有葉節點(Leaf Nodes)必在同一深度。
- 插入與分裂機制(Bottom-Up Insertion & Split):新資料一律自葉節點插入。若節點已滿(含有 2 個鍵值,插入後成為暫時的 4-節點 / 含有 3 個鍵值),則取中間鍵值(Median)向上提升(Promote)至父節點,左右鍵值各自獨立分裂為 2-節點。若父節點亦滿則遞迴向上分裂;若根節點分裂,樹高增加 1。
- 儲存排序基準: 題目要求「依使用者帳號英文字母順序儲存」,因此 2-3 樹的搜尋鍵值(Key)為「使用者帳號」,其大小依英文字典順序比較;雜湊後的密碼為隨同儲存之關聯資料(Satellite Data)。
解題方法
(一)計算雜湊後的密碼資料
依定義 ,逐一計算各使用者密碼:
- 使用者帳號 AA(密碼:
234abc) - 使用者帳號 BB(密碼:
123bcd) - 使用者帳號 CD(密碼:
aa012) - 使用者帳號 AC(密碼:
555be) - 使用者帳號 BD(密碼:
45fdd) - 使用者帳號 CA(密碼:
712ccc)
(二)建立 2-3 樹之完整步驟
節點資料格式表示為 (帳號, 雜湊密碼)。依題目表格由上而下順序依序插入:
- 步驟 1:插入 (AA, 15)
- 樹為空,建立根節點:
[(AA, 15)]
- 步驟 2:插入 (BB, 15)
- ,放入同一節點,形成 3-節點:
[(AA, 15), (BB, 15)]
- 步驟 3:插入 (CD, 5)
- ,放入根節點後暫時形成含有 3 個鍵值的溢位節點:
[(AA, 15), (BB, 15), (CD, 5)] - 觸發分裂:取中位數 (BB, 15) 提升為新根節點,左右鍵值分裂為兩個 2-節點:
[(BB, 15)]
/ \
[(AA, 15)] [(CD, 5)]
- 步驟 4:插入 (AC, 22)
- 與根節點比較:,向左搜尋至葉節點
[(AA, 15)]。