114 地方特考四等 統計類科 資料處理概要 考古題詳解
第 一 題30 分
給定以下有向加權圖(7 個節點 A~G,15 條有向邊):
🖼️【此處有附圖,請對照原卷】
有向邊及權重如下:
:2
:4
:5
:1
:6
:3
:5
:2
:3
:2
:5
:2
:4
:2
:1
(一)執行 Dijkstra 演算法,逐步計算節點 A 到每個節點的最短距離與路徑。請以此例說明 Dijkstra 演算法的運作方式,寫出每一步目前的「A 到每個節點的最短距離」與「前接節點(predecessor)」。(15 分)
(二)請寫出 A 到各節點的最短路徑與路徑長度。(5 分)
(三)舉出兩個 Dijkstra 演算法實際上的應用。(10 分)
登入後即可作答並保存紀錄。
核心觀念
Dijkstra 演算法用來求解邊權重非負的有向加權圖中,起點到各節點的最短距離。每一步選出尚未確定、目前暫定距離最小的節點,將其距離確定,再用該節點更新相鄰節點的距離。
若目前確定的節點為 ,而 的邊權重為 ,則依下式更新:
若距離變短,便把 的前接節點(predecessor)改為 。本題所有邊權重皆為正數,符合 Dijkstra 演算法的適用條件。
解題方法與逐步結果
以 為起點,起始距離為 ,其餘節點設為 。表中每格依序表示「目前暫定距離/前接節點」;「—」表示沒有前接節點。距離已確定的節點以粗體標示。
與 的暫定距離同為 ,本解依字母順序先確定 ;同距離時先確定哪一個都不影響最短距離。
| 步驟 | 本步確定節點 | A | B | C | D | E | F | G |
|---|---|---|---|---|---|---|---|---|
| 初始 | A | 0/— | 2/A | 4/A | 5/A | /— | /— | /— |
| 1 | B | 0/— | 2/A | 3/B | 5/A | 5/B | /— | /— |
| 2 | C | 0/— | 2/A | 3/B | 5/A | 5/B | 6/C | /— |
| 3 | D | 0/— | 2/A | 3/B | 5/A | 5/B | 6/C | 10/D |
| 4 | E | 0/— | 2/A | 3/B | 5/A | 5/B | 6/C | 9/E |
| 5 | F | 0/— | 2/A | 3/B | 5/A | 5/B | 6/C | 7/F |
| 6 | G | 0/— | 2/A | 3/B | 5/A | 5/B | 6/C | 7/F |
關鍵更新如下:
- 確定 後,沿 、、 更新,得到 、、。
第 二 題30 分
QuickSort 和 MergeSort 是常見的排序演算法,各自有優點與缺點。
(一)假設你負責設計一個「線上圖書目錄系統」,需要對 50 萬筆已經按照「出版年份」由大到小排序的書籍資料,重新依照「作者名稱」排序,讓使用者能快速找到作者撰寫的書,但同時需要保持同一作者撰寫的書籍能依據原本出版年份順序排列。根據 QuickSort 和 MergeSort 兩種演算法的特性,你會選擇哪一種排序演算法?為什麼?(10 分)
(二)有一個數列 ,利用 QuickSort(以第一個元素為基準)進行由小到大的排序,請寫出並說明每一次循環的結果。(10 分)
(三)與上面問題同一個數列,利用 MergeSort 進行由小到大的排序,請寫出並說明每一次循環的結果。(10 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查排序的穩定性、時間複雜度,以及 QuickSort 與 MergeSort 的基本操作。
- 穩定排序:若兩筆資料的排序鍵相同,排序後仍維持它們原本的先後順序。
- QuickSort:以基準值將資料分區,再遞迴排序各分區;平均時間複雜度為 ,但最差為 。一般原地 QuickSort 不具穩定性。
- MergeSort:將資料分半、遞迴排序後合併;時間複雜度為 ,且可設計為穩定排序,但通常需要 額外空間。
(一)選擇排序演算法
應選擇穩定的 MergeSort。
原始資料已依出版年份由大到小排列;重新依作者名稱排序時,若 MergeSort 在合併時遇到作者名稱相同的兩筆資料,優先取自原序列較前面的資料,便能保留同一作者的書籍原有先後順序。因此,同一作者的書仍會依出版年份由大到小排列。
一般 QuickSort 的分區過程可能交換相同作者的資料,破壞原有順序。MergeSort 對 50 萬筆資料仍維持 的時間複雜度,適合大量資料排序;代價是需要額外記憶體。
(二)QuickSort 排序
採用以子序列第一個元素為基準的分區法。以下以「每一次循環」表示每次分區完成;掃描期間,將小於基準的元素移到左側,最後將基準放到分界位置,再遞迴處理左右子序列。
初始數列:
- 以 為基準:左側放小於 的數,右側放大於 的數。
- 處理左側,以 為基準: 移至左側, 留在右側。
- 處理 ,以 為基準:
- 處理 ,以 為基準:
- 處理右側 ,以 為基準:
第 三 題40 分
資料庫中有一個資料表 Books,包含以下欄位:
- BookID(書籍編號)
- Title(書名)
- Author(作者)
- Publisher(出版社)
- PubYear(出版年份)
- ISBN(國際標準書號)
其中 BookID 為資料表的主鍵。
(一)請寫一個 SQL 查詢,尋找張曼娟於 2020 年出版的書籍名稱與出版社。(10 分)
(二)請說明下列 SQL 語法之查詢過濾條件與輸出欄位為何?(10 分)
SELECT Title, Author, Publisher
FROM Books
WHERE PubYear IN
(SELECT PubYear
FROM Books
WHERE Author = '村上春樹' AND Publisher = '時報出版公司');
(三)請以 JOIN 指令,利用自我關連的概念,改寫上面的查詢。(20 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的條件篩選、子查詢,以及以 JOIN 實作自我關連。
WHERE用來篩選資料列。IN用來判斷某欄位的值是否屬於一組查詢結果。- 自我關連是同一資料表以不同別名各自扮演不同角色,再用
JOIN連結。
本題沒有涉及法條。
解題方法
(一)找出張曼娟於 2020 年出版的書名與出版社
作者與出版年份都是篩選條件,書名與出版社則是指定的輸出欄位:
SELECT Title, Publisher
FROM Books
WHERE Author = '張曼娟'
AND PubYear = 2020;
AND 表示兩個條件必須同時成立,亦即作者是張曼娟,且出版年份為 2020。
(二)說明子查詢的過濾條件與輸出欄位
外層查詢:
SELECT Title, Author, Publisher
FROM Books
WHERE PubYear IN (...)
輸出符合外層 WHERE 條件之資料列的 Title、Author、Publisher 三個欄位。外層條件是:該書的 PubYear 必須出現在子查詢所傳回的年份集合中。
子查詢:
SELECT PubYear
FROM Books
WHERE Author = '村上春樹'
AND Publisher = '時報出版公司'
子查詢會找出作者為「村上春樹」且出版社為「時報出版公司」的資料列,並傳回這些資料列的 PubYear。
因此,整體查詢的結果是:所有出版年份與上述村上春樹作品年份相同的書籍,並列出其書名、作者及出版社。外層沒有再限制作者或出版社,所以符合年份的其他作者作品也會列出。