115 年 國立成功大學數據科學研究所《計算機概論(含資料結構)》
第 1 題36 分
- (36%) In the following statements, please specify if the statement is True or False. If the statement is True, explain why it is True. If it is False, give correct answer or explain why. (each 2%)
(a) If an algorithm runs in steps, its time complexity is .
(b) If algorithm A is and algorithm B is , then A is faster for every input size .
(c) Deleting a node from a singly linked list is always if you are given only a pointer to the node to delete.
(d) A binary heap provides a partial order, not a fully sorted structure.
(e) An in-order traversal of a binary heap returns elements in sorted order.
(f) BFS on an unweighted graph finds shortest paths measured by number of edges.
(g) A hash table with separate chaining can have worst-case lookup time.
(h) A page fault always means the program is incorrect and must be terminated.
(i) Round-robin scheduling always minimizes average waiting time.
(j) In k-means clustering, each cluster center must be one of the original data points.
(k) Adding more features always improves performance on unseen data in supervised learning.
(l) Increasing a decision tree's maximum depth always improves test accuracy.
(m) On highly imbalanced datasets, high accuracy can still mean poor performance on minority class.
(n) A context switch typically saves and restores CPU registers and other execution state.
(o) Virtual memory guarantees that a program will never run out of memory.
(p) PCA can reduce dimensionality even when features are highly correlated.
(q) Cross-entropy loss is only defined for binary classification problems.
(r) In gradient descent, increasing the learning rate always speeds up convergence.
登入後即可作答並保存紀錄。
一、核心觀念
本題涵蓋數據科學與資訊工程核心四大領域觀念:
- 演算法與時間複雜度分析:Big- 漸進符號之定義、漸進上界與實際執行時間及輸入規模 之關係。
- 資料結構:
- 單向鏈結串列(Singly Linked List)節點刪除演算法及前驅節點指標依賴性。
- 二元堆積(Binary Heap)之偏序性(Partial Order)與中序走訪(In-order Traversal)特性。
- 廣度優先搜尋(BFS)於無權重圖(Unweighted Graph)中求最短路徑之原理。
- 雜湊表(Hash Table)採用鏈結法(Separate Chaining)時碰撞(Collision)之最差時間複雜度。
- 作業系統:
- 虛擬記憶體(Virtual Memory)之頁錯誤(Page Fault)處理流程與位址空間限制。
- CPU 排程演算法(Round-Robin vs. SJF)之優化目標(平均等待時間與響應時間)。
- 上下文切換(Context Switch)保存與還原進程/執行緒狀態之機制。
- 機器學習與資料科學:
- K-means 分群法中群集中心(Centroid)之數學定義(算術平均值)。
- 模型複雜度、特徵數量及樹深度對過擬合(Overfitting)與泛化能力(Generalization)之影響。
- 高度不平衡資料集(Imbalanced Datasets)之評估指標陷阱。
- 主成分分析(PCA)解決共線性(Multicollinearity)與降維原理。
- 交叉熵損失函數(Cross-Entropy Loss)在二元與多元分類之定義。
- 梯度下降法(Gradient Descent)中學習率(Learning Rate)對收斂性與發散性之影響。
二、解題方法
- 嚴格依據定義:
- 利用 Big- 數學定義證明漸進上界: 使得對所有 ,。
- 區分二元搜尋樹(BST)的全排序與二元堆積(Binary Heap)的偏序關係(僅保證 Parent 與 Child 之相對大小)。
- 尋找反例(Counterexamples)判定命題:
- 針對敘述中含有極端限定詞(如 always, every, only, never)之選項(如 b, c, h, i, j, k, l, o, q, r),只要能構建出合理的極端情況或反例,即可確定該命題為 False。
- 區分機器學習觀念:
- 嚴格劃分「訓練集效能(Training Performance)」與「測試集/未看過資料效能(Test/Unseen Performance)」。
- 分清 K-means(中心為算術平均點)與 K-medoids(中心為實際資料點)之差別。
三、選項分析
(a) If an algorithm runs in steps, its time complexity is .
- 判定:True
- 詳細說明:根據 Big- 漸進上界的數學定義,若存在常數 與 ,使得對所有 ,皆滿足 ,則 。當執行步數 時,若選擇 且 ,對所有 ,均有 成立。在漸進分析中,忽略低階項()與常數係數(),其時間複雜度確定為 。
(b) If algorithm A is and algorithm B is , then A is faster for every input size .
- 判定:False
- 詳細說明:Big- 描述的是當輸入規模 時的漸進趨勢(Asymptotic Behavior),並不保證在所有 值下演算法 A 都快於 B。原因有二:
- 隱藏常數與低階項影響:若演算法 A 的實際執行步數為 ,演算法 B 為 ,當 時,,而 ,此時演算法 B 比 A 更快。
- 小型輸入規模:在小型資料集(Small )情況下,漸進複雜度較低的演算法常因較高的初始化開銷或係數而慢於高複雜度演算法。
- 正確敘述/理由:演算法 A 僅在輸入規模 足夠大()時才會快於演算法 B;在小資料集或考量常數因子時,演算法 B 可能更快。
(c) Deleting a node from a singly linked list is always if you are given only a pointer to the node to delete.
- 判定:False
- 詳細說明:給定單向鏈結串列中指向待刪除節點 的指標:
- 若 非尾節點(Tail Node):可將後繼節點()的值複製到 ,再將 刪除,此操作為 。
- 若 為尾節點(Tail Node):由於單向鏈結串列沒有指向前驅節點(Predecessor)的指標,無法直接更新前驅節點的 為
NULL。必須從 Head 節點重新走訪至尾節點的前驅,需要 時間。
- 正確敘述/理由:若待刪除節點為單向鏈結串列的尾節點(Tail Node),無法在不走訪串列的情況下更新前驅指標,在最差情況下時間複雜度為 ,並非「總是」。
(d) A binary heap provides a partial order, not a fully sorted structure.
- 判定:True
- 詳細說明:二元堆積(Binary Heap)僅滿足堆積性質(Heap Property)。以最大堆積(Max-Heap)為例,任何父節點的值均大於等於其子節點的值。這在「祖先與子孫」之間建立了偏序關係(Partial Order);但在「同階層的節點」或「不同分支之間的節點」則無定義順序。因此,二元堆積並非全排序結構(Fully Sorted Structure)。
(e) An in-order traversal of a binary heap returns elements in sorted order.
- 判定:False
- 詳細說明:只有二元搜尋樹(Binary Search Tree, BST)的中序走訪(In-order Traversal)才會依遞增順序輸出元素。二元堆積(Binary Heap)僅維持父子節點間的相對大小關係,左右子樹之間沒有大小順序關係。對二元堆積進行中序走訪無法獲得排序好的序列(要取得排序結果需進行 Heap Sort 或連續執行
Extract-Min/Extract-Max)。 - 正確敘述/理由:二元堆積的中序走訪不會返回排序好的元素序列;二元搜尋樹(BST)的中序走訪才會返回排序好的元素。
(f) BFS on an unweighted graph finds shortest paths measured by number of edges.
- 判定:True
- 詳細說明:廣度優先搜尋(Breadth-First Search, BFS)是以層級(Level-by-level)方式向外擴展。在無權重圖(Unweighted Graph,可視為所有邊權重均為 )中,BFS 保證第一次造訪某個節點時所經過的邊數(Edges count)即為從起點到該節點的最少邊數(即最短路徑長度)。
(g) A hash table with separate chaining can have worst-case lookup time.
- 判定:True
- 詳細說明:在採用鏈結法(Separate Chaining)處理碰撞的雜湊表中,若雜湊函數品質佳,平均搜尋時間為 。但在最差情況下(Worst Case),若所有 個鍵值(Keys)全部發生碰撞並被映射到同一個桶位(Bucket/Slot),該 Slot 上的單向鏈結串列長度將達到 。此時尋找特定元素需線性走訪該鏈結串列,搜尋時間複雜度為 。
(h) A page fault always means the program is incorrect and must be terminated.
- 判定:False
- 詳細說明:頁錯誤(Page Fault)是虛擬記憶體管理中的正常作業系統中斷機制。當程式存取的虛擬頁面(Virtual Page)目前不在實體記憶體(RAM)中時,硬體 MMU 會觸發 Page Fault,作業系統接管後從次級儲存裝置(如 SSD/Hard Disk)將缺失的頁面載入實體記憶體,並更新頁表(Page Table),最後重新執行引發 Page Fault 的指令。此過程對程式而言是完全透明且正常的。
- 正確敘述/理由:Page Fault 是虛擬記憶體分頁機制的正常現象,作業系統載入所需頁面後會恢復程式執行;只有非法記憶體存取(如 Segmentation Fault / Invalid Page Fault)才會導致程式異常終止。
(i) Round-robin scheduling always minimizes average waiting time.
- 判定:False
- 詳細說明:在作業系統 CPU 排程中,能保證最小化平均等待時間(Average Waiting Time)的排程演算法是最短工作優先(Shortest Job First, SJF)或最短剩餘時間優先(Shortest Remaining Time First, SRTF)。輪轉排程(Round-Robin, RR)的設計目標是為了提高時分共享系統的響應時間(Response Time)與公平性,其平均等待時間通常高於 SJF,且過小的時間切片(Time Quantum)會引發頻繁的上下文切換開銷。
- 正確敘述/理由:最小化平均等待時間的排程演算法為 Shortest Job First (SJF) / SRTF,而非 Round-Robin。
第 2 題9 分
- You are given a large, undirected graph modeling a city's transportation network. Each edge has a "reliability score" (higher = more reliable). You want to find routes that are most reliable overall. To turn this into an optimization problem, define the edge cost as: . So reliable edges give small cost; unreliable edges give large cost.
(a) Propose a good data structure to store the graph when it is sparse. How would you store it if it becomes dense? Compare space complexity and explain when each is appropriate. (3%)
(b) Which shortest-path algorithm would you use with the cost ? State time complexity and explain why a naive approach like BFS is not suitable. (3%)
(c) Suppose you are allowed to use exactly one coupon during your trip that can be applied to one edge on your path and makes that edge's cost become 0 (free), regardless of its original weight. You still want the minimum total path cost from source to target . Propose a simple algorithm idea to compute the best cost from to under this "use one coupon once" rule, and give the time complexity. (3%)
登入後即可作答並保存紀錄。
核心觀念
本題結合了圖形表示法(Graph Representations)、**單源最短路徑演算法(Single-Source Shortest Path, SSSP)以及狀態擴展/分層圖最短路徑(State-Space Graph / Layered Graph)**的核心概念。
-
圖形儲存結構與空間複雜度:
- 鄰接串列(Adjacency List):適合稀疏圖(Sparse Graph),記錄各頂點的相鄰節點,空間複雜度為 。
- 鄰接矩陣(Adjacency Matrix):適合稠密圖(Dense Graph),以二維陣列儲存所有點對間的邊權重,空間複雜度為 。
-
乘積最大化轉換為最短路徑:
- 最大化路徑可靠度乘積 等價於最小化其負對數總和 。
- 由於 ,邊權重 ,因此所有邊的權重皆為非負實數,適用 Dijkstra 演算法。
-
邊權重歸零(折價券問題)的狀態擴展:
- 「最多/恰好使用一次優惠使某條邊權重歸零」屬於動態規劃與最短路徑結合的經典問題,可透過**狀態擴展(State Expansion / 分層圖)或雙向兩次 Dijkstra(Two-pass Dijkstra)**在多項式時間內求解。
解題方法
(a) 稀疏圖與稠密圖的資料結構比較與選擇
-
稀疏圖(Sparse Graph,即 ):
- 推薦結構:鄰接串列(Adjacency List)。
- 空間複雜度:。
- 適用時機:當圖中邊數遠少於 (例如道路網、地鐵網中每個路口連接的道路數量有限,)。使用鄰接串列可節省大量記憶體,且走訪單一頂點的所有鄰居僅需 時間。
-
稠密圖(Dense Graph,即 ):
- 推薦結構:鄰接矩陣(Adjacency Matrix)。
- 空間複雜度:。
- 適用時機:當圖中邊數極多(接近完全圖)時。鄰接矩陣能在 時間內判定或存取任意兩點間是否存在邊與其權重,陣列在記憶體中連續分布也具備較佳的快取區域性(Cache Locality)。
(b) 最短路徑演算法選擇、時間複雜度與 BFS 不適用的原因
-
選擇之演算法:
- 使用 Dijkstra 演算法(搭配 Min-Heap / 優先佇列)。
- 原因:可靠度 ,經過轉換後 。因為圖中不存在負權重邊(No negative edge weights),Dijkstra 演算法具備貪婪選擇性質(Greedy Choice Property),可保證求得全域最佳解。
-
時間複雜度:
- 使用二元堆積(Binary Min-Heap):
- 若使用費氏堆積(Fibonacci Heap):
- 使用二元堆積(Binary Min-Heap):
-
為什麼標準 BFS(廣度優先搜尋)不適用:
- BFS 的核心假設:BFS 僅適用於無權重圖(Unweighted Graph)或所有邊權重皆相同的圖。BFS 是依照「邊的數量(Hop count)」層層向外搜尋。
- 權重差異導致錯誤:本題轉換後的邊權重 為任意非負實數。邊數較少的路徑,其總成本不一定較小(可能經過一條可靠度極低的邊导致累計 cost 極大);反之,邊數較多的路徑可能全部由高可靠度的邊組成,總成本反而較低。BFS 會優先挑選「邊數最少」而非「總權重最小」的路徑,因此無法求得正確的最短路徑。
(c) 「使用一次折價券使單邊成本歸零」的演算法設計與複雜度
本題可採用以下兩種簡潔且標準的演算法概念之一:
方法一:狀態擴展/分層圖 Dijkstra(State-Space Graph Dijkstra)
-
核心概念:
- 將每個頂點 擴展為兩種狀態 ,其中 :
- :表示從起點 到目前節點 的路徑上尚未使用折價券。
- :表示從起點 到目前節點 的路徑上已經使用過折價券。
- 將每個頂點 擴展為兩種狀態 ,其中 :
-
邊的建立(轉移關係):
- 不使用折價券的普通移動:
- 對於原圖中的每條邊 ,在層內建立邊:
- 對於原圖中的每條邊 ,在層內建立邊:
- 不使用折價券的普通移動:
第 3 題6 分
- A data pipeline writes results to a log file. After a power loss, some "success" lines are missing even though the program printed "Saved!".
(a) Explain the difference between writing to a user-space buffer, the OS page cache, and the disk. Why can data "disappear" after a crash? (3%)
(b) Give two simple ways to make the log more crash-resilient, and the trade-off. (3%)
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統(Operating System)的檔案系統 I/O 快取機制與資料持久性(Data Persistence / I/O Buffering)。
寫入資料至檔案系統涉及三個關鍵層級:
- 使用者空間緩衝區(User-Space Buffer / Standard I/O Buffer):應用程式層級維護於 RAM 的緩衝區(例如 C 語言
stdio函式庫中FILE結構體的內部 Buffer)。 - 作業系統頁面快取(OS Page Cache / Kernel Buffer Cache):作業系統核心(Kernel)維護於 RAM 的檔案頁面快取。
- 實體磁碟(Disk / Non-Volatile Storage):如 SSD 或 HDD 等非揮發性儲存介面。
斷電(Power Loss)的影響:主記憶體(RAM)屬於揮發性介面,電源中斷後資料會立即丟失;唯有成功寫入實體磁碟的資料才能在系統重啟後保留。
解題方法
(a) 三種寫入層級之差異與資料丟失原因分析
應用程式執行寫入操作時,資料的傳輸流程如下:
- 使用者空間緩衝區(User-Space Buffer):
- 機制:當程式呼叫高階 I/O API(如 C 的
fprintf()或 Python 的print())時,資料會先累積在進程本身的記憶體空間中,尚未觸發系統呼叫(System Call)。 - 特性:存取速度極快,但僅存在於該應用進程內。進程崩潰(Crash)或系統斷電時資料皆會丟失。
- 機制:當程式呼叫高階 I/O API(如 C 的
- 作業系統頁面快取(OS Page Cache):
- 機制:發出
write()系統呼叫後,資料會從 User-Space 複製到作業系統核心的記憶體區(Kernel RAM)。此時對應用程式而言寫入操作已完成,系統呼叫即回傳成功(故程式會印出 "Saved!")。 - 特性:資料此時仍存放在揮發性的 RAM 中。作業系統基於效能考量採用「延遲寫回策略(Write-Back Policy / Lazy Flush)」,由背景執行緒(如
flusher/pdflush)在稍後非同步地將髒頁(Dirty Pages)刷入磁碟。
- 機制:發出
- 實體磁碟(Disk):
- 機制:資料由 Block Device Driver 寫入非揮發性儲存裝置(SSD/HDD)。
- 特性:屬於持久化儲存(Persistent Storage),電源中斷後資料依然保留。
資料「消失」的原因:
程式印出 "Saved!" 僅表示資料已成功複製到 User-Space Buffer 或 OS Page Cache(write() 系統呼叫已順利回傳)。作業系統為了優化 I/O 效能,尚未立即將這些 Dirty Pages 寫回實體磁碟(Disk)。由於 RAM 屬於揮發性介面,若在此時間視窗內遭遇突發斷電,保存在記憶體中的資料便會完全消失。
(b) 兩種提升 Crash-Resilience(抗崩潰能力)的方法與其 Trade-off
- 方法一:顯式同步刷盤(Explicit Flushing & Syncing via
fflush()+fsync())- 作法:每次寫入關鍵 Log 後,先呼叫
fflush()將資料從 User-Space Buffer 清空並發送系統呼叫,隨後呼叫fsync(fd)強制 Kernel 將 OS Page Cache 中該檔案的 Dirty Pages 立即寫入實體磁碟。 - Trade-off(權衡):
- 優點:提供極高的資料持久性(Durability)與強一致性,保證斷電不遺失已提交的日誌。
- 缺點:將非同步寫入轉為同步阻塞 I/O(Synchronous I/O),程式必須等待慢速的磁碟寫入完成,會顯著降低系統吞吐量(Throughput)並增加回應延遲(Latency)。
- 作法:每次寫入關鍵 Log 後,先呼叫
第 4 題6 分
- A shared server runs many training jobs. Some are short (2 minutes), some are long (2 hours). Users complain the machine "feels unfair."
(a) Compare FCFS (First-Come First-Served) vs Shortest Job First (SJF) in terms of average waiting time and fairness. (3%)
(b) Give a practical scheduling idea that balances responsiveness and fairness for mixed workloads. (3%)
登入後即可作答並保存紀錄。
核心觀念
本題旨在考驗作業系統(Operating System)中 CPU / Job 排程演算法的性能指標評估,包含**平均等待時間(Average Waiting Time, AWT)與公平性(Fairness / Resource Allocation Rate)**的權衡,以及如何設計排程器解決混合工作負載(Mixed Workloads:包含短任務與長任務)的實用問題。
-
FCFS (First-Come First-Served):
- 非搶佔式(Non-preemptive)排程。
- 公平性:絕對公平,嚴格按照到達順序執行,保證無飢餓現象(Starvation-free)。
- 平均等待時間:若長任務(2 小時)比短任務(2 分鐘)先到達,會引發護衛效應(Convoy Effect),導致後續所有短任務皆須等待極長時間,拉高總體的平均等待時間。
-
SJF (Shortest Job First):
- 優先執行預估執行時間(Burst Time)最短的任務。
- 平均等待時間:在數學上已被證明,對於給定的一組任務,SJF 可提供最小的平均等待時間(Minimum Average Waiting Time)。
- 公平性:極不公平。若短任務持續進入系統,長任務將會被無限期推遲,導致飢餓現象(Starvation)。
-
反應速度與公平性的折衷(Trade-off):
- 實務排程系統無法預先精確得知任務的真正執行時間(Burst Time),且必須兼顧短任務的低回應時間(Responsiveness)與長任務的不飢餓性(Fairness)。
解題方法
(a) FCFS 與 SJF 之比較
-
平均等待時間(Average Waiting Time, AWT):
- SJF:優先讓執行時間為 的短任務優先執行並迅速離開系統。由於短任務的等待時間被大幅壓縮,整體系統的 達到理論上的最小值。
- FCFS:若 的長任務先到達,所有後續到達的短任務皆必須等待 才能開始執行。此即護衛效應(Convoy Effect),會使得系統平均等待時間劇烈飆升。
-
公平性(Fairness)與飢餓現象(Starvation):
- FCFS:遵循 FIFO 原則,每個任務最終都能獲得 CPU 資源,保證不發生 Starvation,在資源分配時效上具備極佳的公平性。
- SJF:當系統有連續不斷的短任務流入時,長任務會一直處於佇列後方無法獲得執行機會,面臨無限期延遲的 Starvation 困境,造成使用者感到「排程不公」。
(b) 兼顧回應時間與公平性的實務排程設計
在混合短任務(2 分鐘)與長任務(2 小時)的真實環境中,最佳的實務設計為採用 多層回饋佇列排程(Multi-Level Feedback Queue, MLFQ),並配合 老化機制(Aging)。
MLFQ 系統設計與運作流程:
- 多級佇列結構:系統設定多個不同優先權等級的佇列(如 ),優先權由高至低,各佇列採用輪轉排程(Round-Robin, RR),且高優先權佇列配給較短的時間片(Time Quantum ),低優先權佇列配給較長的時間片。
- 快速響應短任務(模仿 SJF / 保障 Responsiveness):
- 所有新進任務一律先放入最高優先權佇列 (時間片極小,如 )。
- 短任務(2 分鐘)通常可在前幾輪時間片內迅速執行完畢離開系統,獲得極佳的互動回應速度。
- 動態懲罰與降級長任務:
第 5 題6 分
- A data science pipeline has two shared resources:
• Lock A: protects access to a shared feature store
• Lock B: protects access to a shared model cache
Two worker programs run concurrently:
• Worker 1 does: acquire Lock A, then acquire Lock B, then release both.
• Worker 2 does: acquire Lock B, then acquire Lock A, then release both.
Sometimes, the system freezes forever.
(a) What is the most likely cause of the freeze? How can you explain it by a simple wait-for story? (3%)
(b) Give one very practical fix that prevents this freeze, and briefly explain why it works. (3%)
登入後即可作答並保存紀錄。
核心觀念
本題旨在考驗作業系統與併發程式設計(Concurrency)中**死鎖(Deadlock)**的成因與預防機制。
- 死鎖(Deadlock):指兩個或多個程序(Process/Thread)在執行過程中,因爭奪資源而造成一種互相等待的現象,若無外力作用,這些程序都將無法推進下去。
- 死鎖發生的四大必要條件(Coffman Conditions):
- 互斥(Mutual Exclusion):資源一次只能被一個程序使用。
- 持有並等待(Hold and Wait):程序已持有至少一個資源,但又申請其他被持有的資源。
- 不可搶佔(No Preemption):資源只能由持有的程序自願釋放,不能被強制剝奪。
- 循環等待(Circular Wait):存在一個程序等待鏈 , 等待 持有的資源, 等待 持有的資源,……, 等待 持有的資源。
- 資源鎖定順序原則(Lock Ordering / Resource Hierarchy):這是一種死鎖預防(Deadlock Prevention)策略,透過強迫所有程序按照相同的全局順序獲取資源,徹底打破「循環等待」條件。
解題方法
- 分析併發行為與競爭條件(Race Condition):
- Worker 1 請求資源順序:
- Worker 2 請求資源順序:
- 由於兩者獲取鎖的順序相反(Order Inversion),當 CPU 進行上下文切換(Context Switch)導致交錯執行(Interleaving)時,即可能引發問題。
- 建構等待圖(Wait-For Graph):
- Worker 1 取得 Lock A 後等待 Lock B(Worker 1 Lock B Worker 2)。
- Worker 2 取得 Lock B 後等待 Lock A(Worker 2 Lock A Worker 1)。
- 形成環路(Cycle),滿足循環等待條件,導致系統永久凍結。
- 提出修復方案:
- 破壞 Coffman 四大條件中最容易控制的「循環等待」條件。
- 統一所有 Worker 獲取 Lock 的順序即可排除死鎖。
子題詳解
(a) 凍結的原因與等待故事(Wait-for Story)
-
最可能的凍結原因:死鎖(Deadlock)。
-
Wait-for 情境故事(Wait-for Story):
假設 Worker 1 與 Worker 2 同時開始執行:
- Worker 1 率先成功取得 Lock A(特徵儲存區的鎖)。
- 此時 CPU 切換執行權,Worker 2 隨後成功取得 Lock B(模型快取的鎖)。
第 6 題8 分
- Describe the differences between the following pairs of terms. (each 2%)
(a) Precision vs. Recall
(b) Process vs. Thread
(c) Overfitting vs. Underfitting
(d) Preemptive Scheduling vs. Non-preemptive Scheduling
登入後即可作答並保存紀錄。
核心觀念
本題考查計算機概論、作業系統(Operating Systems)與資料科學/機器學習(Data Science & Machine Learning)基礎中四對核心概念的定義與差異判別:
- Precision vs. Recall:模型評估指標(Evaluation Metrics)與混淆矩陣(Confusion Matrix)的應用。
- Process vs. Thread:作業系統資源分配單位與 CPU 排程執行單位的區隔。
- Overfitting vs. Underfitting:機器學習模型泛化能力(Generalization Ability)與偏差-變異數權衡(Bias-Variance Tradeoff)。
- Preemptive Scheduling vs. Non-preemptive Scheduling:作業系統 CPU 排程機制中控制權轉移的方式。
解題方法
針對名詞比較型題目(Describe the differences),最佳解題切入點為**「明確定義 + 數學公式/運作機制 + 對比表格 + 應用場景」**。作答時先分別闡述兩者觀念,最後附上對比摘要,能確保答題完整並取得滿分。
選項分析
(a) Precision(精確率)vs. Recall(召回率)
-
Precision(精確率):
- 定義:在模型所有**預測為正例(Positive)**的樣本中,實際上有多少比例真正為正例。
- 計算公式:
其中 為真正例(True Positive), 為偽正例(False Positive)。 - 著重點:「預測精準度」,旨在避免誤判(False Positive)。
- 應用場景:垃圾郵件過濾(若將正常重要郵件誤判為垃圾郵件,代價極高)。
-
Recall(召回率 / 敏感度 Sensitivity):
- 定義:在所有**實際為正例(Positive)**的樣本中,模型成功抓出(正確預測)了多少比例。
- 計算公式:
其中 為偽負例(False Negative)。 - 著重點:「涵蓋完整度」,旨在避免漏抓(False Negative)。
- 應用場景:癌症篩檢、金融詐欺偵測(若漏診癌症或漏抓詐欺,會造成嚴重損害)。
| 比較項目 | Precision(精確率) | Recall(召回率) |
|---|---|---|
| 公式分母 | (預測正例總數) | (實際正例總數) |
| 核心目標 | 寧缺勿濫,確保預測出的正例都很準 | 寧可錯殺不可放過,確保實際正例都被抓出 |
| 防止代價 | 防止誤判(False Positive) | 防止漏抓(False Negative) |
(b) Process(程序)vs. Thread(執行緒)
-
Process(程序):
- 定義:作業系統進行資源分配與管理的基本單位。
- 記憶體空間:每個 Process 擁有獨立且互相隔離的地址空間(Address Space),包含獨立的 Code、Data、Heap 與 Stack 段。
- 切換與通訊開銷:Process 間的上下文切換(Context Switch)需重載虛擬記憶體頁表(Page Table),開銷較大;Process 間通訊(IPC)必須透過 OS 核心機制(如 Pipe、Socket、Shared Memory)。
-
Thread(執行緒):
- 定義:CPU 排程與執行的基本單位(又稱輕量級程序 Lightweight Process)。
- 記憶體空間:同屬一個 Process 的多個 Thread 會共用該 Process 的地址空間、Code 段、Data 段、Heap 及開啟的檔案資源;但每個 Thread 擁有獨立的 Program Counter (PC)、暫存器集合(Registers)與 Stack。
- 切換與通訊開銷:Thread 間的上下文切換無需更換頁表,開銷極小;Thread 間可直接讀寫共享記憶體進行通訊。
| 比較項目 | Process(程序) | Thread(執行緒) |
|---|---|---|
| 本質角色 | 資源分配的基本單位 | CPU 排程執行的基本單位 |
| 記憶體獨立性 | 各 Process 間完全隔離獨立 | 同一 Process 內之 Thread 共用 Heap/Data 段,僅 Stack 獨立 |
| 切換開銷 | 高(需切換頁表與快取) | 低(僅需保存暫存器與 Stack 指針) |
| 安全性/影響 | 一個 Process 當掉不影響其他 Process | 一個 Thread 發生非法存取崩潰,可能導致整個 Process 崩潰 |
(c) Overfitting(過度擬合)vs. Underfitting(擬合不足)
- Overfitting(過度擬合):
- 定義:模型對於訓練資料(Training Data)學習過度,連資料中的雜訊(Noise)與特例都記了下來,導致對訓練集表現極佳,但泛化到新測試集(Testing Data)時表現極差。
第 7 題9 分
- You are given the following undirected, unweighted graph with vertices {A, B, C, D, E, F, G, H}, and edges: (A, B), (A, C), (B, D), (B, E), (C, F), (E, F), (D, G), (F,H), (G, H).
(a) Run BFS starting from A and list the vertices in discovery order (assume neighbors are explored in alphabetical order). Also write the distance (number of edges) from A to every vertex. (3%)
(b) A vertex is called critical (for reaching H from A) if removing that vertex (and its incident edges) makes H unreachable from A. Is there any critical vertex other than A or H? If yes, give one. If no, say "none" and explain briefly. (3%)
(c) You are allowed to add exactly one new edge anywhere between two currently non-adjacent vertices (a "teleport"). Your goal is to make the shortest distance from A to H become 2. Is it possible? If yes, give one edge to add. If no, explain why. (3%)
登入後即可作答並保存紀錄。
核心觀念
本題結合了無權重無向圖(Undirected Unweighted Graph)的核心遍歷演算法與連通性分析,考查點涵蓋三大圖論觀念:
-
廣度優先搜尋(Breadth-First Search, BFS):
- 運作機制以先進先出佇列(Queue)為核心。在無權重圖上,BFS 自然形成「最短路徑樹」(Shortest Path Tree),每一層拜訪的節點皆代表與起點具相同邊數距離(Distance / Level)的點。
- 當相鄰節點有多個選擇時,若題目指定照字母順序(alphabetical order)走訪,佇列入列順序必須嚴格按照字典順序。
-
割點與關鍵節點(Cut Vertex / Articulation Point / - Separator):
- 定義:若在圖 中移除某一節點 (及其相連邊)後,使得起點 無法到達終點 ,則 即為 的關鍵節點(- Cut Vertex)。
- 結構特徵:若從起點 到終點 存在兩條或兩條以上「頂點互斥(除了起終點外無其他共享頂點)」的路徑(Internally Vertex-Disjoint Paths),則除了 與 本身之外,不可能存在任何單一關鍵節點。
-
最短路徑邊縮減(Diameter / Shortest Path Reduction):
- 兩點 間的最短距離 ,代表存在某一中間節點 ,使得 與 皆為圖中存在的邊。
- 若欲加入一條新邊 使得 ,則該新邊的兩端點必定有一個能接駁起點 (距離為 0 或 1),另一個端點能接駁終點 (距離為 0 或 1)。
解題方法與詳細推導
給定無向圖 ,頂點集合 。
邊集合 的鄰接關係如下:
(a) BFS 走訪順序與各點距離推導
使用 Queue 進行 BFS,起點為 。距離記為 ,走訪時相鄰節點按字母順序檢查:
-
初始狀態:
- 將 加入 ,。
- 拜訪順序清單:。
- 。
-
處理 ():
- 出列。
- 檢查 的鄰居:按字母順序為 。
- 兩者皆未拜訪,設 、。
- 加入 :。
- 目前走訪清單:。
-
處理 ():
- 出列。
- 檢查 的鄰居:(已拜訪)、(未拜訪)、(未拜訪)。
- 依字母順序將 設為 、。
- 加入 :。
- 目前走訪清單:。
-
處理 ():
- 出列。
- 檢查 的鄰居:(已拜訪)、(未拜訪)。
- 設 。
- 加入 :。
- 目前走訪清單:。
-
處理 ():
- 出列。
- 檢查 的鄰居:(已拜訪)、(未拜訪)。
- 設 。
- 加入 :。
- 目前走訪清單:。
-
處理 ():
- 出列。
- 檢查 的鄰居:(已拜訪)、(已拜訪)。
- 無新節點入列。
- 。
-
處理 ():
- 出列。
- 檢查 的鄰居:(已拜訪)、(已拜訪)、(未拜訪)。
第 8 題8 分
- Answer the following questions on data science. (each 2%)
(a) Explain class imbalance and give two simple ways to handle it. Why can accuracy be misleading here?
(b) What is cross-validation? Why is it useful when data is limited?
(c) Compare training error vs. test error. What does each indicate?
(d) Compare pretraining vs. fine-tuning. Give a simple example.
登入後即可作答並保存紀錄。
核心觀念
本題考查數據科學與機器學習的核心基礎觀念,涵蓋四個重要主題:
- 資料不平衡(Class Imbalance):類別分布極端懸殊下的模型評估陷阱與解決策略。
- 交叉驗證(Cross-Validation):模型泛化能力評估機制及其在小數據集(Limited Data)下的價值。
- 訓練誤差與測試誤差(Training Error vs. Test Error):評估模型擬合狀況(Underfitting 與 Overfitting)的指標差異。
- 預訓練與微調(Pretraining vs. Fine-tuning):遷移學習(Transfer Learning)的兩階段訓練範式與實際應用。
解題方法與各小題詳細解析
(a) 資料不平衡、處理方式與 Accuracy 迷思
- 類別不平衡(Class Imbalance)定義:
在分類問題中,不同類別的樣本數量存在極大差距(例如正例占 ,負例占 )。常見於信用卡詐欺偵測、醫療診斷、設備故障預警等場景。 - 兩種簡單處理方式:
- 重採樣法(Resampling Methods):
- 過採樣(Oversampling):增加少數類別的樣本數量,例如使用 SMOTE(Synthetic Minority Over-sampling Technique)合成新樣本。
- 欠採樣(Undersampling):減少多數類別的樣本數量,例如隨機剔除多數類別的樣本。
- 調整損失權重(Cost-Sensitive Learning / Class Weight Adjustment):
在訓練損失函數(Loss Function)中給予少數類別更高的懲罰權重(Penalty),強迫模型對少數類別的預測錯誤更加敏感。
- 重採樣法(Resampling Methods):
- Accuracy 為何會產生誤導:
準確率(Accuracy)公式定義為:
當資料極度不平衡時(如負例 、正例 ),若模型採取盲目將所有樣本皆預測為多數類(Negative)的極端策略(Naive Classifier),其 Accuracy 仍高達 。然而,該模型對關鍵少數類(Positive)的識別能力(Recall / Precision)實際上為 。因此,Accuracy 無法真實反映模型在少數類別上的判斷品質。此時應改用 -score、Precision-Recall AUC 或 ROC-AUC 作為評估指標。
(b) 交叉驗證及其在資料有限時的作用
- 交叉驗證(Cross-Validation, CV)定義:
一種評估模型泛化能力的重採樣技術。最常見的 -折交叉驗證(-Fold Cross-Validation)是將整體資料隨機劃分為 個大小相等的子集(Folds),輪流使用 個子集作為訓練集(Training Set),剩餘 1 個子集作為驗證集(Validation Set),重複 次後,取 次驗證結果的平均值作為模型最終的效能評估指標。 - 資料有限時發揮作用的原因:
- 極大化資料利用率:避免傳統單次劃分(Train-Test Split)導致部分資料未被訓練到的浪費,確保每個樣本都有機會同時參與訓練與驗證。
- 降低估計方差(Variance):單一劃分容易受隨機抽樣偏差影響;透過多次切分並計算平均值,能顯著減少採樣雜訊,給出更穩定且無偏的模型效能估算。
(c) 訓練誤差 vs. 測試誤差
- 訓練誤差(Training Error):
模型在「訓練集(Training Data)」上計算出的誤差或損失值。- 指示含意:代表模型擬合(Fitting)已知數據的能力。若訓練誤差過高,代表模型連訓練集的模式都無法掌握,存在欠擬合(Underfitting / High Bias)。
第 9 題12 分
- A museum uses a simple k-NN classifier to decide whether a visitor is likely to buy a souvenir (Buy = +) or not (No = -) based on two features:
• x₁: minutes spent in the gift shop area
• x₂: number of items picked up and examined
Training set (6 labeled points):
Points | x₁ | x₂ | Label
-------|------|------|-------
A | 1.0 | 1.0 | -
B | 2.0 | 1.0 | -
C | 2.0 | 2.0 | -
D | 4.0 | 4.0 | +
E | 5.0 | 4.0 | +
F | 4.0 | 5.0 | +
Query point Q = (3.0,3.0). Use Euclidean distance.
(a) If k = 3, what label will k-NN predict for Q? Show the 3 nearest neighbors. (3%)
(b) Assume point C was mislabeled and should actually be + (but the dataset still shows it as -). Which choice is more robust to this single mislabeled point for predicting Q: k = 1 or k = 5? Explain briefly. (3%)
(c) Is k-NN with Euclidean distance always unaffected by feature scaling? Explain. (3%)
(d) Give two simple 2-dimensional data situations where k-NN classification can perform poorly, and explain why. (3%)
登入後即可作答並保存紀錄。
(a)
距離計算:
最近的三個鄰居:(若距離相同可任選,但結果不變)。
投票結果 為多數 → 預測標記為 。