高雄醫學大學 109 年 《計算機概論與程式設計》
第 1 題2 分
A screw factory would like to identify flawed screws by using a machine learning (ML) algorithm. Suppose there are total flawed screws among all the produced screws, but only out of all the flawed screws are reported by the ML algorithm.
Which one of the following measurements is used to describe the ratio of identified flawed screws ?
登入後即可作答並保存紀錄。
核心觀念
本題考查機器學習二元分類的評估指標,尤其是「實際有問題的螺絲,有多少被模型成功找出來」。
將資料分類如下:
- 實際有瑕疵,且被模型正確辨識:True Positive,簡寫為
- 實際有瑕疵,但未被模型辨識:False Negative,簡寫為
- 實際無瑕疵,但被模型誤判為有瑕疵:False Positive,簡寫為
- 實際無瑕疵,且被模型正確判定無瑕疵:True Negative,簡寫為
題目指出:
- 所有實際有瑕疵的螺絲共有 顆
- 其中有 顆被 ML 演算法辨識出來
因此, 是實際的正類總數:
而成功辨識出的瑕疵螺絲數 對應於 ,所以:
題目所描述的比例為:
這正是 Recall。
解題方法
Recall,又稱為召回率、敏感度,衡量的是:
在所有實際為正類的樣本中,模型成功找出的比例。
其公式為:
套用本題:
- 實際有瑕疵的螺絲總數為
- 成功辨識出的瑕疵螺絲數為
- 未被辨識出的瑕疵螺絲數為
因此:
所以正確選項為 (D) Recall。
選項分析
(A) F1-score
F1-score 是 Precision 與 Recall 的調和平均數:
其中:
第 2 題2 分
Given the binary tree on the right-hand side.
🖼️【此處有附圖,請對照原卷】
What is the result of post-order traversal?
登入後即可作答並保存紀錄。
核心觀念
二元樹的後序走訪(post-order traversal)順序固定為:
本題樹的根節點為 。
解題方法
依照「左、右、根」逐層走訪:
- 走訪 的左子樹,以 為根:
- 的左子樹為 ,而 的右子節點為 ,所以順序為 。
- 的右子節點為 。
- 因此左子樹的後序結果為:
- 走訪 的右子樹,以 為根:
- 的左子樹為 ,而 的左子節點為 ,所以順序為 。
- 的右子樹為 ,而 的左子節點為 ,所以順序為 。
- 因此右子樹的後序結果為:
- 最後拜訪整棵樹的根節點 。
完整結果為:
因此選擇 (B)。
選項分析
第 3 題2 分
Which of the following statement is INCORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查機器學習與類神經網路的基本概念,包括:
- 訊號處理在資料前處理中的角色
- 訓練誤差、測試誤差與過度擬合
- 神經網路的連結權重
- 最佳化方法與全域最小值
- Batch learning 與 sequential learning 的梯度估計
題目問的是 INCORRECT,因此應找出敘述不正確的選項。
解題方法
判斷各選項是否符合機器學習的基本定義:
- 訊號處理是否可作為資料前處理工具。
- 訓練與測試誤差的變化,是否能正確代表 overfitting。
- 神經元間的 connection weights 是否為神經網路儲存知識的核心。
- 最佳化方法是否通常難以保證找到 global minimum。
- Batch 與 sequential learning 所計算的梯度,哪一種較接近真正的整體梯度。
其中第 5 點可由梯度公式直接判斷。假設總誤差函數為
則完整資料的梯度為
Batch learning 使用全部 筆資料計算梯度,因此可得到整體誤差函數的精確梯度;sequential learning 通常每次只使用一筆資料或一小批資料,得到的是帶有隨機誤差的梯度估計。
選項分析
(A) 正確
訊號處理方法可以作為機器學習的重要資料前處理工具。
例如對聲音、影像或感測器資料,可以使用:
- 去除雜訊
- 濾波
- Fourier transform
- 頻譜分析
- 特徵擷取
- 正規化
這些處理能改善資料品質、降低雜訊,並將原始訊號轉換成較適合模型學習的特徵。因此,signal processing methods 確實可以是非常有價值的 data pre-processing tool。
(B) 正確,但敘述有用語上的爭議
在神經網路訓練過程中,若誤差持續變大,代表目前的訓練可能使模型表現惡化。此時停止訓練,可以避免模型繼續朝錯誤方向更新。
一般常用 early stopping 來避免過度擬合,其基本做法是:
- 訓練誤差持續下降時,模型仍在學習。
- 驗證誤差或測試誤差開始上升時,表示模型可能開始記憶訓練資料。
- 此時停止訓練,保留誤差最低時的模型。
嚴格而言,典型的 overfitting 型態是:
因此,題目所寫的「training and testing errors 都 becoming larger and larger」並不是最標準的過度擬合判準。若訓練誤差與測試誤差同時上升,較可能表示學習率過大、最佳化不穩定或模型訓練失敗。
不過依本題官方答案,(B) 被視為可接受的「誤差持續惡化時停止訓練」敘述;真正被判定為錯誤的是 (E)。
(C) 正確
在類神經網路中,神經元之間的連結通常以權重 表示。神經元接收到輸入後,會先進行加權總和:
第 4 題2 分
The sequence below shows the page number used from left to right. How many times of page fault will occur if the Least Recently Used (LRU) page replacement policy is used and the frame size is 5?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統的虛擬記憶體與頁面置換(page replacement),指定使用最近最少使用(Least Recently Used, LRU)策略,且記憶體有 個 page frames。
LRU 的規則是:
- 若參考頁面已在 frame 中,稱為 page hit,不發生 page fault。
- 若參考頁面不在 frame 中,稱為 page fault。
- 當 個 frame 已滿時,淘汰「最久沒有被使用」的頁面。
本題的參考字串為:
解題方法
以「最久未使用者在左、最新使用者在右」記錄 frame 內容。每次命中後,將該頁面移到最右側;發生置換時,淘汰最左側頁面。
| 次序 | 參考頁 | 結果 | LRU frames(左側最久未使用) | 置換 fault 次數 |
|---|---|---|---|---|
| 1 | 1 | Fault | 1 | 0 |
| 2 | 3 | Fault | 1, 3 | 0 |
| 3 | 6 | Fault | 1, 3, 6 | 0 |
| 4 | 7 | Fault | 1, 3, 6, 7 | 0 |
| 5 | 2 | Fault | 1, 3, 6, 7, 2 | 0 |
| 6 | 4 | Fault,淘汰 1 | 3, 6, 7, 2, 4 | 1 |
| 7 | 6 | Hit | 3, 7, 2, 4, 6 | 1 |
| 8 | 2 | Hit | 3, 7, 4, 6, 2 | 1 |
| 9 | 5 | Fault,淘汰 3 | 7, 4, 6, 2, 5 | 2 |
| 10 | 6 | Hit | 7, 4, 2, 5, 6 | 2 |
| 11 | 9 | Fault,淘汰 7 | 4, 2, 5, 6, 9 | 3 |
| 12 | 1 | Fault,淘汰 4 | 2, 5, 6, 9, 1 | 4 |
| 13 | 2 | Hit | 5, 6, 9, 1, 2 | 4 |
| 14 | 1 | Hit | 5, 6, 9, 2, 1 | 4 |
| 15 | 4 | Fault,淘汰 5 | 6, 9, 2, 1, 4 | 5 |
| 16 | 3 | Fault,淘汰 6 | 9, 2, 1, 4, 3 | 6 |
| 17 | 4 | Hit | 9, 2, 1, 3, 4 | 6 |
| 18 | 5 | Fault,淘汰 9 | 2, 1, 3, 4, 5 | 7 |
第 5 題2 分
Which of the following statement is INCORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查三種深度學習模型的基本功能與訓練方式:
- Auto-encoder:透過較少的潛在特徵重建原始輸入。
- GAN(Generative Adversarial Network):由 Generator 產生樣本,Discriminator 判別樣本是真實資料或生成資料。
- CNN(Convolutional Neural Network):利用卷積運算擷取局部特徵,卷積本質上可視為一種 filtering operation。
- RNN(Recurrent Neural Network):處理序列資料,訓練時通常須沿時間展開並使用 Backpropagation Through Time(BPTT)。
解題時只要判斷各選項是否符合上述模型的定義與訓練機制,即可找出不正確的敘述。
解題方法
逐一檢查各敘述:
- Auto-encoder 是否使用較少特徵重建輸入?
- GAN 的 Discriminator 是否同時接觸真實與生成樣本?
- RNN 的訓練是否比 CNN 容易?
- GAN 的 Generator 是否提供生成樣本給 Discriminator 判別?
- CNN 的 convolution 是否具有 filtering 的功能?
其中第 3 項與深度學習的訓練特性相反。RNN 通常因時間序列反向傳播與梯度消失問題,訓練難度高於一般 CNN,因此選 (C)。
選項分析
(A) The basic objective of auto-encoder is to reproduce its inputs by using a smaller set of features.
此敘述正確。
Auto-encoder 通常包含:
- Encoder:將輸入 壓縮成較低維度的特徵表示 。
- Decoder:由 重建輸出 。
可表示為:
訓練目標是使重建結果 儘可能接近原始輸入 ,例如最小化重建誤差:
當潛在特徵 的維度小於輸入維度時,模型必須學習保留資料中最重要的資訊,因此選項所述符合 auto-encoder 的基本概念。
(B) In generative adversarial network (GAN), the discriminator often has access to both the synthetic and real sample. Its task is to try to differentiate them as accurate as possible.
此敘述正確。
GAN 由兩個模型組成:
- Generator :根據隨機雜訊 產生假樣本 。
- Discriminator :判斷輸入樣本是真實資料,或是 Generator 產生的假資料。
Discriminator 會接收真實樣本 與生成樣本 ,並嘗試提高判別正確率。典型的 GAN 目標函數為:
因此,Discriminator 的確會同時接觸 real samples 與 synthetic samples,並學習區分兩者。
第 6 題2 分
Suppose a hashed file is constructed using the division hash algorithm of “key-value mod size”. Assume that indices of the hash table are labeled . The sequence of inserting the following key-values into the hash table is 24, 30, 3, 18, 15, 21, 9.
To read the keys out from the table following the order of of the hash table's indices, which of the following might be the possible sequence?
登入後即可作答並保存紀錄。
核心觀念
本題考查雜湊表的:
- 除法雜湊法(division hash algorithm)
- 雜湊函數
- 碰撞(collision)處理
- 依雜湊表索引 到 依序讀取資料
雜湊表共有 個位置,因此雜湊函數為:
當不同鍵值算出相同索引時,就會發生碰撞。本題採用鏈結法(separate chaining)處理碰撞,同一索引中的資料依插入順序排列。
解題方法
依序計算各鍵值的雜湊位置:
| 插入順序 | 鍵值 | 所在索引 | |
|---|---|---|---|
| 1 | 24 | 3 | |
| 2 | 30 | 2 | |
| 3 | 3 | 3 | |
| 4 | 18 | 4 | |
| 5 | 15 | 1 | |
| 6 | 21 | 0 | |
| 7 | 9 | 2 |
因此雜湊表內容如下:
| 索引 | 鏈結內容 |
|---|---|
| 0 | 21 |
| 1 | 15 |
| 2 | 30 → 9 |
| 3 | 24 → 3 |
| 4 | 18 |
| 5 | 空 |
| 6 | 空 |
依索引 到 讀取,得到:
這正是選項(E)。
選項分析
(A)24, 30, 3, 18, 15, 21, 9
此順序等同於原始插入順序,並非依索引 到 讀取。
例如:
- 24 應在索引 3,卻排在最前面
- 21 應在索引 0,卻排在倒數第二個位置
因此錯誤。
(B)3, 9, 15, 18, 21, 24, 30
此順序接近依鍵值大小排列,並非依雜湊索引排列。
例如:
第 7 題2 分
Elevator disk scheduling algorithm is a method to find the total number of seek operations performed to access all the requested tracks. In the following scenario:
Request sequence =
Initial head position = 50
Direction = left
What is the total number of seek operations if elevator disk scheduling algorithm is used?
登入後即可作答並保存紀錄。
核心觀念
本題考的是磁碟排程中的 Elevator algorithm,也就是 SCAN 演算法。
SCAN 的運作方式如下:
- 磁碟讀寫頭依目前方向移動。
- 沿途服務該方向上的所有請求。
- 到達磁碟邊界後反向。
- 再服務另一方向的請求。
- 總 seek operations 通常是指讀寫頭移動的總磁軌距離,而不是請求筆數。
本題已知:
- Request sequence:
- Initial head position:
- Direction:left
- 磁碟左側邊界視為磁軌
因此,讀寫頭會先向左移動至磁軌 ,再反向向右服務其餘請求。
解題方法
先將請求依照初始位置 分成左右兩側:
- 左側請求:
- 右側請求:
由於初始方向為 left,服務順序為:
其中, 是 SCAN 演算法向左移動時所到達的磁碟邊界。
逐段計算讀寫頭移動距離:
| 移動路徑 | Seek 距離 |
|---|---|
總 seek 距離為:
也可以用區段法快速計算:
- 向左:,距離為
- 反向向右:,距離為
因此:
題目問的是完成所有請求的總移動距離,因此讀寫頭服務到最後一個請求磁軌 即可停止,不必再移動到右側磁碟邊界。
逐步追蹤 Trace
| 步驟 | 讀寫頭位置 | 動作 |
|---|---|---|
| 0 | 初始位置,方向向左 | |
| 1 | 服務請求 | |
| 2 | 服務請求 | |
| 3 | 服務請求 | |
| 4 | 到達左側邊界,反向 | |
| 5 | 服務請求 | |
| 6 | 服務請求 | |
| 7 | 服務請求 | |
| 8 | 服務請求 |
第 8 題2 分
The technique that allows a computer with small RAM to execute a program of much bigger size is ____.
登入後即可作答並保存紀錄。
核心觀念
本題考的是作業系統中的 虛擬記憶體(virtual memory)。
虛擬記憶體讓程式使用的「邏輯記憶體空間」大於電腦實際安裝的 RAM。作業系統會將程式分成數個區塊,僅把目前執行所需的部分載入 RAM,其餘部分暫存在硬碟等輔助儲存裝置中;當程式需要尚未載入的區塊時,再將其換入 RAM。
因此,即使實體 RAM 容量較小,電腦仍能執行大小超過 RAM 的程式。
虛擬記憶體常搭配下列機制實作:
- Paging(分頁):將虛擬記憶體切成固定大小的 page,將實體記憶體切成固定大小的 frame。
- Page table(頁表):記錄虛擬頁面與實體頁框的對應關係。
- Page fault(頁面錯誤):程式存取的頁面不在 RAM 時,由作業系統從磁碟載入。
概念上可表示為:
這個關係是概念性描述,並非表示磁碟與 RAM 的存取速度相同。磁碟速度遠低於 RAM,因此過度使用虛擬記憶體會造成效能下降。
解題方法
題幹關鍵是:
allows a computer with small RAM to execute a program of much bigger size
題目描述「實體 RAM 很小,但仍能執行遠大於 RAM 的程式」,直接對應到虛擬記憶體的功能。
判斷步驟如下:
- 找出題幹的功能描述:以較小 RAM 執行較大程式。
- 判斷這需要將程式的一部分暫存於磁碟,並依需求載入 RAM。
- 這種由作業系統提供較大邏輯記憶體空間的技術稱為 virtual memory。
- 因此選擇 (B)。
選項分析
(A) paging
**Paging(分頁)**是記憶體管理機制,將記憶體切割成固定大小的頁面與頁框,以便於配置及搬移資料。
分頁確實常是虛擬記憶體的實作基礎,但「分頁」本身主要描述記憶體配置方式,不直接完整表達「利用磁碟空間延伸可用記憶體,使大型程式得以執行」這項功能。
因此,本題若詢問虛擬記憶體採用的管理方式,paging 可成為相關答案;但題目詢問的是整體技術名稱,官方答案為 virtual memory,所以 (A) 不選。
(B) virtual memory
第 9 題2 分
Numerical system conversion. Assume , please find the radix .
登入後即可作答並保存紀錄。
核心觀念
本題考查「不同進位制數字轉換為十進位」的位值表示法。
在 進位中,三位數 的各位值分別為:
- 位於 位
- 位於 位
- 位於 位
因此:
題目給定:
所以可列出方程式:
解題方法
將方程式整理:
由選項逐一代入驗算即可。
代入 :
因此:
故正確答案為 。
也可使用公式解二次方程式:
得到:
進位制必須為正整數,因此只有 合理。
選項分析
- (A) :錯誤
第 10 題2 分
Which of the following 8-bit pairs, 2’s-complement numbers will result in “overflow” when the numbers of the pairs are added?
登入後即可作答並保存紀錄。
核心觀念
本題考查 8-bit 二補數(2’s complement)有號整數的表示範圍與溢位(overflow)判斷。
8-bit 二補數可表示的整數範圍為:
判斷二補數加法是否溢位的規則:
- 兩個正數相加,結果變成負數:溢位。
- 兩個負數相加,結果變成正數:溢位。
- 一正一負相加:不會發生有號整數溢位。
也可以使用位元規則判斷:若兩個加數的最高位相同,但結果的最高位不同,即發生 overflow。
解題方法
先將各選項的 8-bit 二補數轉換成十進位,再檢查加總結果是否超出 到 的範圍。
負數的二補數轉換方式:
- 將位元反相。
- 加 。
- 加上負號。
選項分析
(A)
- 為負數,其絕對值:
因此:
相加:
結果為 ,在表示範圍 內,且一正一負相加不會 overflow。
所以 (A) 錯誤。
(B)
- 是 8-bit 二補數中最小值:
相加:
二進位加法為:
代表 ,仍在 的範圍內,因此沒有 overflow。
所以 (B) 錯誤。
(C)
兩個數的最高位皆為 ,表示兩者都是負數。
對 :
因此:
對 :
因此:
實際加總為:
第 11 題2 分
The following is a C program code:
int foo(int* ptr, int num){
*ptr = *ptr + num;
if (num==1)
return 1;
else
return num + foo(ptr, num-1);
}
void main() {
int a = X;
int b = foo(&a, a);
printf("Y=%d, Z=%d", a, b);
}
Which one of the following statement is CORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查三個 C 語言觀念:
- 指標傳址
foo(&a, a)將變數a的位址傳入ptr。- 因此
*ptr就是a本身,函式內修改*ptr會直接改變主程式中的a。
- 遞迴函式
if (num == 1)
return 1;
else
return num + foo(ptr, num-1);
- 等差級數累加
a每次增加目前的num。foo的回傳值則是從 累加到初始的num。
解題方法
設初始值為 。
一、計算 a 的最後值
初始時:
int a = X;
int b = foo(&a, a);
第一次呼叫時,num=X。之後依序遞迴:
每次執行:
*ptr = *ptr + num;
因為 ptr 指向 a,所以 a 總共增加:
因此最後的 a 為:
二、計算 b 的回傳值
令 表示 foo(ptr,n) 的回傳值,則:
且當 時:
因此:
所以:
以 逐步追蹤
初始:
a = 5
| 遞迴呼叫 | 執行加法後的 a | 回傳值 |
|---|---|---|
foo(&a, 5) | ||
foo(&a, 4) | ||
foo(&a, 3) | ||
foo(&a, 2) | ||
foo(&a, 1) |
回溯計算:
第 12 題2 分
There are two code sequences for a particular computer, and three classes of instructions (A, B, and C) in the instruction set. The CPI (Cycle Per Instruction) and instruction counts for the instruction class are as follows:
CPI for this instruction class:
| Instruction class | A | B | C |
|---|---|---|---|
| CPI | 3 | 2 | 5 |
Instruction counts for each code sequence:
| Code sequence | A | B | C |
|---|---|---|---|
| 1 | 1 | 1 | 3 |
| 2 | 1 | 4 | 2 |
What is the CPI for code sequences 1 and 2? The answer shall be in the order: (code sequence 1, code sequence 2).
登入後即可作答並保存紀錄。
核心觀念
本題考查不同指令類別混合執行時的「平均 CPI(Cycles Per Instruction,每指令週期數)」。
各指令類別的 CPI 不同,因此整段程式的 CPI 不能直接取算術平均,而要依照各類別的指令數量加權計算:
其中:
解題方法
Code sequence 1
指令數量如下:
- A 類: 條,每條需要 cycles
- B 類: 條,每條需要 cycles
- C 類: 條,每條需要 cycles
總執行週期數:
總指令數:
因此 Code sequence 1 的 CPI 為:
Code sequence 2
指令數量如下:
- A 類: 條,每條需要 cycles
- B 類: 條,每條需要 cycles
- C 類: 條,每條需要 cycles
總執行週期數:
總指令數:
因此 Code sequence 2 的 CPI 為:
所以兩組程式的 CPI 依序為:
選項分析
(A)
正確。
- Code sequence 1:
- Code sequence 2:
第 13 題2 分
RSA (Rivest–Shamir–Adleman) is one of public-key cryptosystems and is widely used for secure data transmission. In RSA, if public key , private key , and ciphertext is 11, what is the corresponding plaintext?
登入後即可作答並保存紀錄。
核心觀念
RSA 解密使用私密金鑰 ,其公式為:
其中:
- :密文(ciphertext)
- :明文(plaintext)
- :私密指數
- :模數
題目給定:
因此明文為:
解題方法
直接計算模指數:
將 除以 :
所以:
接著計算四次方:
由於:
因此:
最後:
所以:
因為:
故對應的明文為:
金鑰關係驗證
RSA 中通常要求:
因為:
所以:
第 14 題2 分
The Karnaugh map is a method of simplifying Boolean algebra expressions. Which of the following statements is the most simplified formula of the Boolean function below?
🖼️【此處有附圖,請對照原卷】
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查 Karnaugh map(卡諾圖)中相鄰最小項的合併,以及布林代數的化簡規則。
原式可讀為:
其中未出現的變數代表該變數可為 或 。
解題方法
將相鄰項兩兩合併。
第一組:
因為 。
第二組:
第三組:
因此:
這正是選項 (E)。
選項分析
(A)
錯誤。第一組 應合併為 ,不能只保留 ,否則會漏掉 的情況。
第 15 題2 分
Consider the following set of processes and the length of the CPU-burst time given in milliseconds. The processes are assumed to have arrived in the order P1, P2, P3, P4, all at time 0.
What is the average waiting time of these processes using Non-Preemptive Shortest Job First (SJF) scheduling?
| Process | Burst time |
|---|---|
| P1 | 4 |
| P2 | 6 |
| P3 | 5 |
| P4 | 1 |
登入後即可作答並保存紀錄。
核心觀念
本題考查非搶先式最短工作優先排程(Non-Preemptive Shortest Job First, SJF)。
SJF 的規則是:每次 CPU 選擇「尚未執行且 CPU burst time 最短」的程序。非搶先式表示程序一旦開始執行,必須完成後,CPU 才能選擇下一個程序。
程序的等待時間定義為:
本題所有程序均於時間 到達,因此只需計算各程序開始執行的時間。
解題方法
各程序的 CPU burst time 如下:
| Process | Burst time |
|---|---|
| P1 | 4 |
| P2 | 6 |
| P3 | 5 |
| P4 | 1 |
依照 burst time 由小到大排序:
因為所有程序都在時間 到達,所以不需考慮後續到達的程序。
排程與等待時間如下:
| 執行順序 | Process | Burst time | 開始時間 | 等待時間 |
|---|---|---|---|---|
| 1 | P4 | 1 | 0 | |
| 2 | P1 | 4 | 1 | |
| 3 | P3 | 5 | 5 | |
| 4 | P2 | 6 | 10 |
因此平均等待時間為:
所以答案為選項 (A) 4。
選項分析
- (A) 4:正確。
依非搶先式 SJF 排程順序 ,平均等待時間為 毫秒。
第 16 題2 分
If a company has an IP network and they want to divide the network into two subnets with 32 addresses in each subnet, what is the net mask of these two subnets?
(Note: To ignore the IP address available or not after subnetting)
登入後即可作答並保存紀錄。
核心觀念
本題考查 IPv4 子網切割(subnetting)、CIDR 表示法與子網路遮罩的換算。
/26表示前 26 位為網路位元,原網路共有:
個 IP 位址。
- 要切成兩個子網路,每個子網路有 32 個位址:
因此主機位元需要保留 5 位,網路位元數為:
所以每個子網路應為 /27。
解題方法
原網路為:
要將 /26 切成兩個大小相同的子網路,相當於從主機位元借用 1 位:
/27 的遮罩為:
將二進位轉換為十進位:
因此兩個子網路的遮罩皆為:
原 /26 網段範圍為 192.115.227.128 至 192.115.227.191,切割後為:
| 子網路 | 位址範圍 | 位址數 |
|---|---|---|
| 第 1 個子網路 | 192.115.227.128~192.115.227.159 | 32 |
| 第 2 個子網路 | 192.115.227.160~192.115.227.191 | 32 |
題目特別註明忽略子網路位址、廣播位址等是否可配置,因此直接以每個子網路的總位址數 32 計算。
選項分析
(A) 255.255.255.248
最後一段 248 的二進位為:
共有 29 個網路位元,即 /29。每個子網路位址數為:
第 17 題2 分
Refer to Tables 1 and 2 below. Please choose the CORRECT outputs (A) and (B) resulted from the execution of the following SQL statements:
SELECT students.Name, math.Score
FROM students
INNER JOIN math
ON students.S_ID = math.S_ID
Output:
| Name | Score |
|---|---|
| (A) | 95 |
| Jerry | (B) |
Table 1. students
| S_ID | Name | Phone Number | Gender | Birth |
|---|---|---|---|---|
| 1010001 | Jerry | 7895846 | Male | 1999/08/23 |
| 1010002 | Mary | 9584628 | Female | 1999/03/16 |
| 1010003 | Sam | 6038498 | Male | 1998/07/01 |
Table 2. math
| No. | Score | S_ID |
|---|---|---|
| 1 | 80 | 1010003 |
| 2 | 55 | 1010011 |
| 3 | 60 | 1010005 |
| 4 | 95 | 1010001 |
| 5 | 73 | 1010006 |
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的 INNER JOIN(內部連接)。
SELECT students.Name, math.Score
FROM students
INNER JOIN math
ON students.S_ID = math.S_ID;
INNER JOIN 只會保留兩個資料表中,連接欄位值相同的資料列。本題的連接條件為:
因此,必須比對兩表的 S_ID。
解題方法
逐筆比對 math 表中的 S_ID:
| math.S_ID | math.Score | students 中是否有相同 S_ID | 對應姓名 |
|---|---|---|---|
| 1010003 | 80 | 有 | Sam |
| 1010011 | 55 | 無 | 不列入 |
| 1010005 | 60 | 無 | 不列入 |
| 1010001 | 95 | 有 | Jerry |
| 1010006 | 73 | 無 | 不列入 |
因此,INNER JOIN 的結果只包含:
| Name | Score |
|---|---|
| Sam | 80 |
| Jerry | 95 |
題目已將 Jerry 的姓名與空格位置固定呈現為:
| Name | Score |
|---|---|
| (A) | 95 |
| Jerry | (B) |
所以:
選項分析
- (A) Name = Sam, Score = 80:正確。
Sam的S_ID為1010003,而math表中有相同的S_ID,其成績為 。
第 18 題2 分
A sorting algorithm is stable if two objects with equal keys appear in the same order in sorted output as they appear in the input array to be sorted.
Among the following five sorting algorithms, which is an “UNSTABLE” sorting algorithm?
登入後即可作答並保存紀錄。
核心觀念
本題考查排序演算法的「穩定性」(stability)。
若兩筆資料的排序鍵值相同,排序後仍維持它們在原始陣列中的先後順序,則稱為穩定排序;若相同鍵值的資料順序可能被交換,則稱為不穩定排序。
例如原始資料為:
其中括號內是排序鍵值, 與 的鍵值相同,且 原本位於 前面。
穩定排序後應為:
若結果為:
雖然鍵值已排序正確,但 、 的相對順序改變,因此是不穩定排序。
解題方法
判斷排序演算法是否穩定,主要觀察:
- 相同鍵值的元素是否可能互相交換。
- 演算法是否會讓距離較遠的元素直接交換位置。
- 合併或插入時,遇到相同鍵值是否保留原始先後順序。
本題依一般教科書中的標準實作判斷:
- Bubble Sort:穩定
- Heap Sort:不穩定
- Merge Sort:穩定
- Radix Sort:穩定,但前提是每一位所使用的排序方法穩定
- Insertion Sort:穩定
因此官方答案為 (B) Heap Sort。
選項分析
(A) Bubble Sort:錯誤
Bubble Sort 通常只在前一元素大於後一元素時交換:
if A[j] > A[j + 1]:
swap(A[j], A[j + 1])
若兩元素鍵值相同,因為不滿足 ,所以不會交換。因此相同鍵值的元素會保留原本的相對順序。
所以標準 Bubble Sort 是穩定排序。
時間複雜度:
- 最佳情況:,已排序且採用提早終止
- 平均、最差情況:
- 額外空間:
(B) Heap Sort:正確
Heap Sort 透過建立 heap,反覆將 heap 的根節點與末端元素交換。
這種交換可能跨越多個元素,使相同鍵值的元素相對順序改變,因此 Heap Sort 不具穩定性。
例如原始資料為:
此陣列已符合 max heap 的條件。進行第一次取出最大值時,根節點 與末端的 交換:
接著調整 heap,並再次取出 。最後排序結果為:
原本相同鍵值的順序是 在 前,排序後卻變成 在 前,故順序被改變。
時間複雜度:
額外空間通常為:
Heap Sort 的重點是「原地排序且不穩定」。
(C) Merge Sort:錯誤
Merge Sort 的合併階段,若左右兩邊目前元素鍵值相同,優先取左邊元素即可保留原始順序:
第 19 題2 分
Which one of the following statement is INCORRECT about Complete Binary Tree with 1000 nodes filled in with 1 to 1000 from root?
登入後即可作答並保存紀錄。
核心觀念
本題考查完全二元樹(Complete Binary Tree)的結構、層數、樹高與葉節點數量。
完全二元樹具有以下特性:
- 除最後一層外,其餘各層皆填滿。
- 最後一層的節點由左至右連續排列。
- 若節點沒有左子節點,則不可能有右子節點,因此該節點必為葉節點。
- 若以陣列採「由根開始、逐層由左至右」編號,節點編號為 時:
- 左子節點位置為
- 右子節點位置為
- 葉節點位置通常為 至
本題共有 個節點,且根節點編號為 。
解題方法
1. 判斷節點 377 所在的 level
若根節點所在層定義為第 1 層,則第 層包含的節點編號範圍為:
第 9 層的編號範圍為:
至
因為:
所以節點 位於第 9 層。
2. 判斷樹高
第 10 層的第一個節點編號為:
第 10 層最多可容納至:
由於 落在 至 之間,因此第 10 層有節點,樹的高度為 10 層。
也可利用:
3. 判斷葉節點數量
在以陣列表示的完全二元樹中,編號大於 的節點沒有子節點,因此皆為葉節點。
本題:
所以葉節點編號為:
數量為:
因此不是 501 個,而是 500 個。
選項分析
第 20 題2 分
Which one of the following statement about shortest path problem is INCORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查圖論中的最短路徑問題(shortest path problem)及其常見演算法:
- Dijkstra’s algorithm:適用於所有邊權重皆為非負數的圖。
- Bellman–Ford algorithm:可處理含有負邊權重的圖,並能偵測負權重循環。
- 最短路徑定義:在圖中尋找兩個頂點之間,使路徑上所有邊權重總和最小的路徑。
其中,若圖中存在可到達的負權重循環,最短距離可能沒有有限值,因為沿著負循環繞行即可使總權重無限減小。
解題方法
本題問的是 INCORRECT,也就是找出錯誤的敘述。
判斷重點在於各演算法能否處理負邊權重:
- Dijkstra 需要邊權重皆為非負數。
- Bellman–Ford 可處理負邊權重。
- 最短路徑就是使邊權重總和最小的路徑。
- 最短路徑問題可定義於無向圖、有向圖或混合圖。
因此,聲稱 Dijkstra 同時能處理非負與負邊權重的選項錯誤,答案為 (A)。
選項分析
(A) Dijkstra's algorithm solves the single-source shortest path problem with both non-negative and negative edge weights.
錯誤。
Dijkstra’s algorithm 的正確適用條件是:
也就是圖中的每一條邊權重都必須是非負數。
Dijkstra 的核心機制是:
- 從尚未確定的頂點中,選出目前暫定距離最小的頂點。
- 將該頂點標記為「最短距離已確定」。
- 利用該頂點進行邊鬆弛(relaxation)。
這種「一旦選定就不必再修改」的貪婪策略,依賴於邊權重非負。若存在負邊,原本看似最短的路徑,之後可能透過負邊被進一步縮短,因此先前確定的距離可能不再正確。
例如:
S ──2──> A ──(-5)──> B
\
──1──────────────────> B
直接由 到 的距離為 ,但經過 的路徑距離為:
若演算法過早將 的距離視為確定值,就可能得到錯誤結果。
因此,Dijkstra 一般不能處理負邊權重。本選項為本題錯誤敘述。
(B) Bellman–Ford algorithm solves the single-source problem with possible negative edge weights.
正確。
Bellman–Ford 可處理含有負邊權重的單一起點最短路徑問題(single-source shortest path problem)。
其主要作法是反覆對所有邊進行鬆弛:
若圖有 個頂點,最多只需進行 輪鬆弛,因為不包含循環的最短路徑最多經過 條邊。
此外,Bellman–Ford 可以再進行一輪檢查:
- 若仍有任何距離可以被更新,表示圖中存在從起點可到達的負權重循環。
因此,Bellman–Ford 適合處理可能含有負邊權重的圖。
複雜度為:
第 21 題2 分
The following Python code is applied for the four arrays –.
import numpy as np
def func(x, y):
c = np.ndarray(x.shape)
for i in range(len(x)):
a = x[i]
b = y[i]
c[i] = (a or b) and (not(a and b))
return c
d1 = np.array([1, 0, 0, 1, 0, 0])
d2 = np.array([0, 1, 0, 1, 1, 0])
d3 = np.array([0, 0, 0, 0, 0, 0])
d4 = np.array([1, 1, 0, 0, 1, 0])
Consider the following statements.
(a) func(d1, d2)[2] = 0
(b) func(d2, d4) = d3
(c) func(d1, d2) = d4
(d) func(func(d1, d4), d2) = d3
Which of the above statements is CORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查三個重點:
- Python 的布林運算:
or、and、not - NumPy 陣列逐元素運算
- XOR(互斥或)的判斷與陣列追蹤
函式中的核心敘述為:
c[i] = (a or b) and (not(a and b))
對於 :
- :至少一個為
- :兩個皆為
- :不是兩個皆為
因此整體條件表示「恰有一個為 」,也就是 XOR:
XOR 的真值表如下:
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
所以 func(x, y) 等同於對兩個陣列逐項進行 XOR。
解題方法
四個陣列為:
計算
逐項 XOR:
| 索引 | XOR 結果 | ||
|---|---|---|---|
| 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 1 |
| 2 | 0 | 0 | 0 |
| 3 | 1 | 1 | 0 |
| 4 | 0 | 1 | 1 |
| 5 | 0 | 0 | 0 |
因此:
所以:
計算
因此它不等於 。
計算
先計算:
再代入外層函式:
第 22 題2 分
Consider the following C code:
int main(){
int arr[] = {203, 151, 164, 154, 194};
int p = arr;
p++ += 10;
(p++) += 11;
(++p) += 9;
for (int i = 0; i < 5; i++)
printf("%d ", arr[i]);
return 0;
}
What is the output of above program?
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言中的:
- 指標與陣列的關係:
arr可視為指向arr[0]的指標。 - 後置遞增
p++:先使用原本的指標位置,再讓指標往後移動。 - 前置遞增
++p:先讓指標往後移動,再使用新的指標位置。 - 運算子優先順序:
*p++等同於*(p++)- 不等同於
(*p)++ - 複合指定運算子
+=:例如x += 10等同於x = x + 10。
解題方法與逐步追蹤
初始陣列與指標狀態如下:
| 索引 | arr[0] | arr[1] | arr[2] | arr[3] | arr[4] |
|---|---|---|---|---|---|
| 初始值 | 203 | 151 | 164 | 154 | 194 |
一開始:
第 1 行
*p++ += 10;
由於後置遞增的優先順序高於解參照運算子,此式解析為:
*(p++) += 10;
執行順序:
- 先使用
p原本所指向的arr[0] arr[0]加上p往後移動至arr[1]
因此:
此時:
陣列變為:
213 151 164 154 194
第 2 行
*(p++) += 11;
此式明確表示先使用目前的 p,再遞增 p。
目前 p 指向 arr[1],因此:
執行後:
陣列變為:
213 162 164 154 194
第 3 行
*(++p) += 9;
這次使用前置遞增 ++p:
p先從arr[2]移動至arr[3]- 再對
arr[3]加上
因此:
執行後:
最終陣列為:
213 162 164 163 194
for 迴圈依序印出五個元素,因此輸出為:
第 23 題2 分
A security attack that makes users unable to access a service is called ____.
登入後即可作答並保存紀錄。
核心觀念
本題考的是網路安全中的阻斷服務攻擊(Denial of Service, DoS)。
DoS 是攻擊者透過大量請求、消耗系統資源、破壞服務程式,或阻塞網路頻寬,使正常使用者無法存取原本可用的服務,例如:
- 網站無法開啟
- 線上遊戲無法連線
- 郵件伺服器無法收發信件
- 網路服務因資源耗盡而停止回應
題幹中的關鍵敘述是:
makes users unable to access a service
也就是「使使用者無法存取服務」,正是 Denial of Service 的定義。
解題方法
先將題幹中的英文描述對應到資訊安全術語:
- 使用者無法存取服務:服務可用性遭到破壞
- 服務可用性被阻斷:Denial of Service
- 縮寫為 DoS
因此正確選項為 (B) DoS。
DoS 攻擊的主要目標是資訊安全中的「可用性(Availability)」,並非竊取資料或竄改資料。攻擊者不一定要取得系統管理權限,只要能使服務無法正常提供給合法使用者,即符合阻斷服務攻擊的概念。
選項分析
(A) DoD
DoD 通常是 Department of Defense 的縮寫,意指美國國防部,並不是一種使使用者無法存取服務的攻擊名稱。
因此此選項錯誤。
(B) DoS
DoS 是 Denial of Service 的縮寫,中文為「阻斷服務攻擊」或「拒絕服務攻擊」。
其目的在於消耗目標系統的網路頻寬、CPU、記憶體、連線數量等資源,使正常使用者無法使用服務,完全符合題幹描述。
因此此選項正確。
(C) zombie
Zombie 是「殭屍電腦」,指已被攻擊者入侵並受其控制的電腦。這些電腦可能被植入惡意程式,等待攻擊者下達指令,並可被用來發動大量網路攻擊。
第 24 題2 分
A binary tree can be described as a one-dimensional array which level-wise retains all nodes from the root. Consider the following 1-D array as a binary tree and the following statements.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| K | A | O | H | S | I | U | N | G |
(a) If the root is at level 0, the height of the binary tree is 3.
(b) The left-child of is .
(c) Post-order traversal of the tree (left-node first): H, U, S, A, N, G, I, O, K
(d) In-order traversal of the tree (left-node first): H, A, S, U, K, N, I, G, O
(e) The average search complex of such binary trees is .
Which of the above statements is CORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查四個重點:
- 二元樹的陣列表示法與節點層級。
- 以陣列索引求左右子樹的位置。
- 二元樹的走訪順序:Post-order、In-order。
- 二元樹搜尋的時間複雜度。
題目給定陣列:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| K | A | O | H | S | I | U | N | G |
根節點為 ,根的層級為 。
解題方法
(a) 樹高為 3
以 0-based 陣列表示完整二元樹時,各層索引範圍為:
- Level 0:索引
- Level 1:索引
- Level 2:索引
- Level 3:索引
陣列中最深的非空節點位於索引 ,這些索引都在 Level 3,因此樹高為:
所以 (a) 正確。
(b) 左子節點為
0-based 陣列表示二元樹時,節點 的子節點位置為:
例如根節點 :
因此左子節點不是 ,而是 。
所以 (b) 錯誤。
(c) Post-order traversal
Post-order 的基本順序是:
依照本題官方採用的樹形與「left-node first」走訪方式,得到:
因此依官方答案的命題解讀,(c) 正確。
(d) In-order traversal
In-order 的基本順序是:
第 25 題2 分
Consider the following C code and the statements (A)~(E).
int myfunc(int n){
if ((n == 0) || (n == 1))
return 1;
else
return myfunc(n-1) + myfunc(n-2);
}
(a)
(b)
(c)
(d)
(e)
Which of the above statements is CORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 遞迴函式(recursion)
- 基本條件(base case)
- 費波那契數列的遞迴計算
- 負數輸入造成的無限遞迴
- 遞迴演算法的時間與空間複雜度
函式定義如下:
int myfunc(int n){
if ((n == 0) || (n == 1))
return 1;
else
return myfunc(n-1) + myfunc(n-2);
}
當 或 時,函式直接回傳 :
當 時:
因此其數值序列為:
其中第 項與第 項皆為 。
解題方法:逐步建立數值
依照遞迴定義計算:
因此:
關鍵程式追蹤
以 為例:
以 為例:
以 為例:
選項分析
(a)
因為 符合基本條件:
if ((n == 0) || (n == 1))
return 1;
所以:
因此 (a) 正確。
(b)
第 26 題2 分
According to the following routing table, where will the router send a packet destined for 10.1.5.65?
| Network | Interface | Next-hop |
|---|---|---|
| 10.1.1.0/24 | e0 | Directly connected |
| 10.1.2.0/24 | e1 | Directly connected |
| 10.1.3.0/25 | s0 | Directly connected |
| 10.1.4.0/24 | s1 | Directly connected |
| 10.1.5.0/24 | e0 | 10.1.1.2 |
| 10.1.5.64/28 | e1 | 10.1.2.2 |
| 10.1.5.64/29 | s0 | 10.1.3.3 |
| 10.1.5.64/27 | s1 | 10.1.4.4 |
登入後即可作答並保存紀錄。
核心觀念
本題考查路由器的「最長前綴匹配」(Longest Prefix Match)。
當目的 IP 同時符合多筆路由時,路由器會選擇前綴長度最大的路由:
前綴越長,代表網路範圍越小、路由越精確。
解題方法
目的 IP 為:
逐一判斷其是否落在各路由的網路範圍內。
| 路由 | 可涵蓋的 IP 範圍 | 是否符合 |
|---|---|---|
| 符合 | ||
| 符合 | ||
| 符合 | ||
| 符合 |
四筆路由都涵蓋 ,因此必須比較前綴長度:
最精確的路由是:
其介面為 s0,下一跳為:
因此路由器會將封包轉送至 10.1.3.3。
選項分析
(A) Directly connected:錯誤
目的 IP 雖然符合多筆路由,但最長前綴匹配到的 路由,其 Next-hop 是 10.1.3.3,不是 Directly connected。
「Directly connected」僅表示封包目的地位於路由器直接連接的網路中;本題的最佳匹配路由是經由下一跳轉送。
(B) 10.1.1.2:錯誤
第 27 題2 分
Which of the following statement is INCORRECT?
登入後即可作答並保存紀錄。
核心觀念
本題考查兩種常見網路服務:
- NAT(Network Address Translation,網路位址轉換):將內部私有 IP 位址轉換成外部可使用的公有 IP 位址,常搭配連接埠號碼,使多台內部主機共用同一個外部 IP。
- DHCP(Dynamic Host Configuration Protocol,動態主機組態協定):自動分配 IP 位址及其他網路參數,例如子網路遮罩、預設閘道與 DNS 伺服器位址。
本題關鍵在於:NAT 具有某種「類似防火牆」的阻擋效果,但 DHCP 本身只是 IP 組態分配服務,並不具備防火牆功能。
解題方法
題目問「INCORRECT」,應逐一判斷各敘述是否符合 NAT 與 DHCP 的功能:
- NAT 是否能讓多台主機同時共用外部 IP?
- DHCP 是否能動態分配多個 IP 給多台裝置?
- NAT 是否具有基本的封包阻擋效果?
- DHCP 是否具有防火牆功能?
- 「以上皆正確」是否成立?
只要找出一個錯誤敘述,即可判定該選項為答案。
選項分析
(A) NAT allows multiple hosts to share an external IP simultaneously.
此敘述正確。
NAT 路由器可將多台內部主機的私有 IP 轉換成同一個外部公有 IP。為了區分不同連線,通常還會使用不同的來源連接埠,這種方式稱為 PAT(Port Address Translation) 或 NAT overload。
例如:
| 內部連線 | NAT 後的外部連線 |
|---|---|
192.168.1.10:5000 | 203.0.113.5:40001 |
192.168.1.11:5000 | 203.0.113.5:40002 |
雖然兩台主機共用外部 IP 203.0.113.5,但透過不同連接埠仍可同時維持多條連線。因此 (A) 正確。
(B) DHCP allows multiple devices to share multiple IPs dynamically.
依本題命題語意,此敘述正確。
DHCP 伺服器可從 IP 位址池中,動態分配多個 IP 位址給多台裝置。各裝置通常取得不同的 IP,例如:
- 電腦取得
192.168.1.10 - 手機取得
192.168.1.11 - 印表機取得
192.168.1.12
DHCP 也會管理租約期限,使 IP 位址能在裝置離線或租約到期後回收再利用。
第 28 題2 分
Which of the following can be used in both error detections and error corrections in digital communications?
登入後即可作答並保存紀錄。
核心觀念
本題考查數位通訊中的「錯誤偵測」與「錯誤更正」:
- 錯誤偵測(error detection):判斷接收資料是否受到干擾而出錯,但不一定能指出錯誤位置並修復。
- 錯誤更正(error correction):除了發現錯誤,還能由附加的冗餘資訊推算錯誤位置,進而恢復原始資料。
判斷某種編碼能否同時偵測與更正錯誤,關鍵在於它是否提供足夠的冗餘位元,並能透過編碼規則定位錯誤。
解題方法
逐一檢查各選項的主要功能:
- 是否只能判斷「有沒有錯」?
- 是否能進一步判斷「哪一個位元錯誤」?
- 是否能依此修正錯誤?
能同時完成錯誤偵測與錯誤更正者,即為本題答案。
選項分析
(A) Hamming codes:正確
Hamming code 是一種具有錯誤更正能力的區塊編碼。它在資料位元中加入多個 parity bits,並利用不同 parity check 的結果形成 syndrome。
以單一位元錯誤為例:
- syndrome 為 :表示未偵測到錯誤。
- syndrome 為非零值:其數值可指出發生錯誤的位元位置。
- 找到錯誤位置後,將該位元反相即可完成更正。
若資料位元數為 ,parity bits 數為 ,通常需滿足:
右側的 分別代表所有資料位元與檢查位元的位置,再加上「沒有錯誤」的狀態。
基本 Hamming code 的最小漢明距離為 ,因此能夠:
- 偵測最多 個位元錯誤;
- 更正 個位元錯誤。
因此,Hamming codes 同時具備 error detection 與 error correction 能力,符合題目要求。
(B) Parity check:錯誤
Parity check 在資料後方加入一個 parity bit,使整體中 的個數維持偶數或奇數。
以 even parity 為例,若資料中 的個數為奇數,就將 parity bit 設為 ,使總數變成偶數。接收端重新計算 parity:
- parity 正確:表示未發現錯誤;
- parity 不符:表示資料中發生錯誤。
但單一 parity bit 無法指出哪一個位元錯誤,因此只能偵測部分錯誤,不能自行完成錯誤更正。
此外,若同時有偶數個位元翻轉,總 parity 仍可能不變,連錯誤都無法偵測。因此 parity check 不符合「同時偵測與更正」的要求。
(C) Checksum:錯誤
第 29 題2 分
What is the postfix of the expression ?
登入後即可作答並保存紀錄。
核心觀念
本題考查中序表示法(infix expression)轉換為後序表示法(postfix expression,也稱逆波蘭表示法)。
運算子優先順序如下:
- 括號優先處理。
- 乘法 、除法 優先於加法 。
- 與 優先順序相同,依由左至右的結合律處理。
原式為:
依優先順序,其運算結構為:
更精確地表示為:
後序表示法的規則是:每個運算子都放在其兩個運算元之後。
解題方法
先將原式依運算優先順序分組:
再依由內而外的順序轉換:
後序為:
後序為:
先列出左運算元,再列出右運算元,最後放除法運算子:
最後列出 與右側運算式,並將加法運算子放在最後:
因此後序表示法為:
逐步堆疊追蹤
使用運算子堆疊進行中序轉後序:
| 讀入符號 | 輸出結果 | 運算子堆疊 |
|---|---|---|
| 結束 |
讀入 時,堆疊頂端的 與 優先順序相同,因此依左結合律先輸出 ,這是本題判斷選項的關鍵。
選項分析
第 30 題2 分
The gradient descent has been run for 15 iterations with learning rate and the corresponding loss function is computed after each iteration. You find that the value of decreases quickly and then levels off.
Based on this observation, which one of the following conclusion seems most plausible?
登入後即可作答並保存紀錄。
核心觀念
本題考查梯度下降法(Gradient Descent)中「學習率 」對損失函數 收斂情形的影響。
梯度下降法的更新公式為:
其中:
- :模型參數
- :損失函數
- :損失函數對參數的梯度
- :學習率,決定每次更新的步長
學習率的大小會影響訓練速度與穩定性:
- 過大:更新步長太大,可能越過最低點,造成震盪,甚至發散。
- 過小:更新步長太小,損失下降速度緩慢,需要較多次迭代。
- 合適:損失函數能快速下降,最後逐漸趨於穩定。
題目指出使用 執行 15 次迭代後,「先快速下降,之後趨於平緩」。這正是學習率適當、模型逐漸接近極小值的典型現象。
解題方法
觀察損失函數曲線的兩個階段:
- 前期快速下降
表示每次更新都能有效降低 ,學習率沒有小到使訓練過度緩慢。
- 後期趨於平緩
表示參數已逐漸接近損失函數的最低點。接近最低點時,梯度大小通常變小,因此每次參數更新幅度也會減少:
當 接近 時,即使 ,更新幅度也會變小,損失函數便會逐漸平穩。
因此,這種「快速下降後趨於平穩」的現象,最符合學習率 已經是有效選擇的判斷。
選項分析
(A) 使用更大的學習率
錯誤。
目前的曲線已經呈現快速下降並逐漸穩定的狀態,代表 能有效引導參數接近極小值。
若改用更大的 ,每次更新步長會變大:
第 申論題 1 題10 分
Given integers , , and an integer array filled with non-negative integers, use dynamic programming technique to implement a program to find a path from top-left to bottom-right which minimizes the sum of all numbers along the path. You can only move down or right at any point. Your program only needs to output the sum. A sample test case input is given below. Implement your program in C, C++, Java, or Python.
Sample Input:
; ;
Sample Output:
10
Note: The sample solution walks from the top-left in the order: .
登入後即可作答並保存紀錄。
核心觀念
本題考查動態規劃(Dynamic Programming, DP),重點包括:
- 將大問題拆成較小的子問題。
- 利用子問題的最佳解組合出原問題的最佳解。
- 設計狀態、初始值與遞迴轉移式。
- 分析演算法的時間與空間複雜度。
從位置 走到右下角時,每一步只能:
- 向右:
- 向下:
因此,到達某一格 的最後一步必定來自上方或左方。
解題方法
定義:
表示「從左上角 走到位置 所能得到的最小累計總和」。
到達 之前只有兩種來源:
- 上方:
- 左方:
因此,對於一般位置:
也就是先選擇上方與左方兩條路徑中累計總和較小者,再加上目前格子的數值。
初始條件
左上角沒有前置位置,因此:
第一列只能一直向右:
第一欄只能一直向下:
範例逐步追蹤
原矩陣為:
逐格計算:
第一列:
第一欄:
其餘位置:
因此 DP 表為:
右下角的值即為最小路徑總和:
對應路徑為:
其總和為:
Python 參考程式碼
第 申論題 2 題10 分
The data of Table 1 are taken from a study investigating the use of a deep learning method as a diagnostic tool for detecting lung cancer. It is known that the sensitivity and specificity of this method are approximately 0.628 and 0.823, respectively.
(a) Determine the value of FN and FP in Table 1. (4pt)
(b) If a person receives a negative test result, what is the probability that he is healthy? (3pt)
(c) Determine the prevalence of lung cancer based on the result given in Table 1. (3pt)
Table 1:
| Disease Present | Disease Absent | Total | |
|---|---|---|---|
| Test Results: Positive | 302 | FP | |
| Test Results: Negative | FN | 372 | |
| Total |
登入後即可作答並保存紀錄。
核心觀念
本題考查診斷測試的混淆矩陣(confusion matrix)與下列定義:
- 真陽性():疾病存在且檢測陽性,本題
- 假陰性():疾病存在但檢測陰性
- 真陰性():疾病不存在且檢測陰性,本題
- 假陽性():疾病不存在但檢測陽性
敏感度(sensitivity):
特異度(specificity):
陰性預測值(negative predictive value, NPV):
疾病盛行率(prevalence):
解題方法
(a)求 與
已知敏感度約為 :
因此:
由於人數必須為整數,取:
驗算:
已知特異度約為 :
因此:
所以:
驗算:
(b)陰性檢測者為健康者的機率
第 申論題 3 題10 分
“Overfitting” is a typical problem in statistics and machine learning.
(a) Please explain overfitting. (4pt)
(b) Which of the following images belongs to overfitting? (2pt)
Fig. 1 Fig. 2 Fig. 3
🖼️【此處有附圖,請對照原卷】
(c) How to avoid this phenomenon? (4pt)
登入後即可作答並保存紀錄。
核心觀念
Overfitting(過度擬合)是指模型過度貼合訓練資料,甚至把資料中的雜訊與偶然誤差也學習進去,導致:
- 訓練資料上的錯誤率很低,甚至接近 。
- 面對未看過的測試資料時,預測能力變差,泛化能力低。
- 模型通常過於複雜,決策邊界出現不必要的彎曲與細節。
模型複雜度增加時,常見情況如下:
解題方法與圖形判斷
判斷圖形時,觀察分類邊界是否:
- 過於簡單,無法掌握資料分布;
- 形狀平滑且能掌握主要趨勢;
- 過度彎曲,甚至為了少數資料點形成不自然的小圈或凹陷。
選項分析
- Fig. 1:欠擬合(underfitting)
圖中的分類邊界近似直線,模型過於簡單,無法充分描述紅色叉號與藍色圓圈的分布,可能造成較多訓練資料分類錯誤。因此屬於欠擬合,不是 overfitting。
- Fig. 2:適當擬合
分類邊界呈現平滑曲線,能掌握兩類資料的主要分布趨勢,同時沒有為少數個別資料點產生過度複雜的彎折,具有較好的泛化能力。因此不屬於 overfitting。
- Fig. 3:過度擬合(overfitting)
第 申論題 4 題10 分
Please explain “TCP three-way handshake process” with diagram.
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
TCP(Transmission Control Protocol)是具連線導向、可靠傳輸與雙向確認功能的傳輸層協定。正式傳送資料前,必須透過三次握手建立連線,確認:
- 用戶端與伺服器雙方都具有收發能力。
- 雙方同步初始序號(Initial Sequence Number, ISN)。
- 建立後續可靠傳輸所需的 TCP 連線狀態。
解題方法:依序號與 ACK 值判讀三個封包
假設:
- 用戶端初始序號為
- 伺服器初始序號為
TCP 的 SYN 旗標會消耗一個序號,因此收到 SYN 後,確認號碼要加 。
TCP 三向交握流程圖
用戶端 伺服器
| |
| ① SYN, Seq = x |
|------------------------------------------>|
| |
| ② SYN + ACK |
| Seq = y, Ack = x + 1 |
|<------------------------------------------|
| |
| ③ ACK |
| Seq = x + 1, Ack = y + 1 |
|------------------------------------------>|
| |
| TCP 連線建立,可以傳送資料 |
三個步驟說明
① 用戶端送出 SYN
用戶端向伺服器提出建立連線的要求:
用戶端進入 SYN-SENT 狀態,表示等待伺服器回應。
② 伺服器回傳 SYN + ACK
伺服器收到用戶端的 SYN 後,同時完成兩件事:
- 以
SYN表示伺服器也同意建立連線,並提供自己的初始序號 。 - 以
ACK確認已收到用戶端的 SYN。
因此封包內容為: