高雄醫學大學 112 年 《計算機概論與程式設計》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 1 題2 分

“Hash Table” is an effective data structure for implementing dictionaries. What is a hash table and how does it work?

(A) A hash table is a data structure that uses a hash function to map keys to values, allowing for fast retrieval of data.

(B) A hash table is a data structure that stores data in a sorted manner for fast searching.

(C) A hash table is a data structure that allows for efficient sorting of data.

(D) A hash table is a data structure that stores data in a hierarchical manner for fast searching.

(E) None of the above.

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

這一題的完整詳解

核心觀念

本題考查字典(dictionary)資料結構與雜湊表(hash table)的基本定義及運作方式。

字典資料結構以「鍵(key)—值(value)」儲存資料,例如:

  • 鍵:學生學號
  • 值:學生姓名與成績

雜湊表使用雜湊函數(hash function)將鍵轉換成陣列索引:

index=h(key)index=h(key)

資料便可依照該索引存入表格中。查詢時,再對相同的鍵套用雜湊函數,即可快速找到資料。

例如表格大小為 1010,雜湊函數為:

h(k)=k mod 10h(k)=k \bmod 10

若鍵值為 123123:

h(123)=123 mod 10=3h(123)=123\bmod 10=3

因此資料會被放入索引 33 的位置。

雜湊碰撞

不同的鍵可能產生相同的索引,例如:

h(123)=3,h(133)=3h(123)=3,\qquad h(133)=3

這種情況稱為雜湊碰撞(collision)。常見處理方式包括:

  1. 鏈結法(separate chaining):每個表格位置連接一個串列,碰撞資料放在同一串列中。
  2. 開放定址法(open addressing):發生碰撞時,依照線性探測、平方探測等方式尋找其他空位。

在雜湊函數良好、資料分布均勻的情況下,插入、查詢、刪除的平均時間複雜度通常為:

O(1)O(1)

若碰撞嚴重,最壞情況可能退化為:

O(n)O(n)

空間複雜度通常為:

O(m)O(m)

其中 mm 為雜湊表的容量。

解題方法

判斷選項是否正確時,抓住雜湊表的三個關鍵特徵:

  1. 使用雜湊函數。
  2. 將鍵映射到表格位置。
  3. 透過鍵快速取得對應的值。

只有描述「使用 hash function 將 keys 對應到 values,並快速取回資料」的選項,符合雜湊表的正式定義。

選項分析

(A) 正確

“A hash table is a data structure that uses a hash function to map keys to values, allowing for fa

🔒

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

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

免費註冊

第 2 題2 分

Overfitting is an undesirable machine learning behavior that occurs when the machine learning model gives accurate predictions for training data but not for new data. There are some techniques that could ease or even solve this problem. Which of the following techniques can NOT avoid overfitting problem?

(A) Increasing layers / number of units per layer.

(B) Using Lasso / Ridge regularization.

(C) Early stopping while training model.

(D) Adding dropout between layers.

(E) Cross-validation.

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

這一題的完整詳解

核心觀念

本題考查機器學習中的 Overfitting(過度擬合)。

過度擬合是指模型過度記憶訓練資料中的細節與雜訊,因此在訓練資料上表現很好,面對未看過的新資料時,預測能力卻下降。

常見現象如下:

  • Training accuracy 高
  • Validation/test accuracy 低
  • Training loss 持續下降,但 validation loss 開始上升

降低過度擬合的基本方向,是限制模型複雜度、增加泛化能力,或利用驗證資料及早發現模型開始過度學習。


解題方法

逐一判斷各選項是否具有降低過度擬合的作用:

  1. 是否限制模型複雜度?
  2. 是否對模型參數加入懲罰?
  3. 是否防止模型在訓練過久?
  4. 是否降低神經網路對特定神經元的依賴?
  5. 是否利用驗證資料選擇較具泛化能力的模型?

若某方法反而增加模型表達能力,使模型更容易記憶訓練資料,便是「不能避免過度擬合」的選項。


選項分析

(A) Increasing layers / number of units per layer

此選項表示增加神經網路的層數,或增加每層的神經元數量。

增加層數與神經元數會提高模型容量,使模型能表達更複雜的函數。模型參數數量增加後,雖然有機會提升訓練資料上的準確率,但也更容易學習訓練資料中的雜訊與特殊模式。

因此,模型複雜度過高時,過度擬合風險會上升:

模型容量增加⇒記憶訓練資料的能力增加\text{模型容量增加} \Rightarrow \text{記憶訓練資料的能力增加}

在沒有搭配正則化、Dropout、資料增強等控制措施時,單純增加層數或單層神經元數量不能避免過度擬合。

本選項為正確答案。


(B) Using Lasso / Ridge regularization

Lasso 與 Ridge 都屬於正則化方法,會在損失函數中加入對模型參數的懲罰項。

Ridge regularization

Ridge 使用 L2L_2 正則化:

J(θ)=Loss(θ)+λ∑iθi2J(\theta) = \text{Loss}(\theta) + \lambda \sum_i \theta_i^2

其中 λ\lambda 控制正則化強度。較大的權重會受到較大的懲罰,使模型傾向使用較小且較平滑的參數。

Lasso regularization

Lasso 使用 L1L_1 正則化:

J(θ)=Loss(θ)+λ∑i∣θi∣J(\theta) = \text{Loss}(\theta) + \lambda \sum_i |\theta_i|

Lasso 會促使部分參數變成 00,因此具有特徵選擇與降低模型複雜度的效果。

兩者都能抑制模型過度依賴訓練資料,降低過度擬合。

本選項能協助避免過度擬合,為錯誤選項。


(C) Early stopping while training model

🔒

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

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

免費註冊

第 3 題2 分

What is the result of −22-22 in the two’s complement representation with an 8-bit allocation?

(A) 0001 0101

(B) 0001 0110

(C) 1110 1010

(D) 1110 1001

(E) None of the above.

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

這一題的完整詳解

核心觀念

本題考查 8 位元二補數(two’s complement)表示法。

二補數表示負整數的標準步驟:

  1. 先寫出該正整數的二進位。
  2. 將所有位元反相,0↔10 \leftrightarrow 1。
  3. 最後加上 11。
  4. 結果限制在指定的位元數內。

8 位元二補數可表示的整數範圍為:

−27∼27−1=−128∼127-2^{7} \sim 2^{7}-1 = -128 \sim 127

因此,−22-22 可以用 8 位元二補數表示。

解題方法

先將 2222 轉換成 8 位元二進位:

22=16+4+222=16+4+2

所以:

2210=0001 0110222_{10}=0001\ 0110_2

接著逐位反相:

0001 0110⟶1110 10010001\ 0110 \longrightarrow 1110\ 1001

再加上 11:

1110 1001+0000 00011110 1010\begin{array}{r} 1110\ 1001\\ +0000\ 0001\\ \hline 1110\ 1010 \end{array}

因此:

−22=1110 1010-22 = 1110\ 1010

選項分析

  • (A) 0001 0101

最高位為 00,代表這是正數。其值為:

0001 01012=16+4+1=210001\ 0101_2=16+4+1=21

這代表 +21+21,不是 −22-22,因此錯誤。

  • (B) 0001 0110

最高位為 00,代表正數,且:

0001 01102=220001\ 0110_2=22

這是 +22+22 的 8 位元表示,不是 −22-22,因此錯誤。

🔒

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

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

免費註冊

第 4 題2 分

Given the boolean function F=AB′C′+BCD′+CD+B′C′D′F=AB'C'+BCD'+CD+B'C'D', what is the maximum number of terms that it can be simplified to?

(A) 1

(B) 2

(C) 3

(D) 4

(E) 5

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

這一題的完整詳解

核心觀念

本題考查布林代數的化簡、Karnaugh map(卡諾圖)分組,以及「乘積項數」的判定。

原函數為

F=AB′C′+BCD′+CD+B′C′D′F=AB'C'+BCD'+CD+B'C'D'

每一個乘積項代表一組使 F=1F=1 的輸入組合。化簡時,利用相鄰最小項合併,消去不必要的變數,目標是以最少的 SOP(Sum of Products)乘積項表示函數。


解題方法:利用布林代數化簡

先處理中間兩項:

BCD′+CDBCD'+CD

提出 CC:

BCD′+CD=C(BD′+D)BCD'+CD=C(BD'+D)

利用布林定律

X+X′Y=X+YX+X'Y=X+Y

可得

D+BD′=B+DD+BD'=B+D

因此

C(BD′+D)=C(B+D)=BC+CDC(BD'+D)=C(B+D)=BC+CD

所以原式可化為

F=AB′C′+BC+CD+B′C′D′F=AB'C'+BC+CD+B'C'D'

目前得到四個乘積項:

AB′C′,BC,CD,B′C′D′AB'C',\quad BC,\quad CD,\quad B'C'D'

接著判斷這四項是否還能繼續合併。

  • AB′C′AB'C' 負責涵蓋 A=1,B=0,C=0A=1,B=0,C=0 的情況。
  • B′C′D′B'C'D' 負責涵蓋 B=0,C=0,D=0B=0,C=0,D=0 的情況。
  • BCBC 負責涵蓋 B=1,C=1B=1,C=1 的情況。
  • CDCD 負責涵蓋 C=1,D=1C=1,D=1 的情況。

四個區域各自都有無法由其他項完整涵蓋的最小項,因此不能再刪除任何一項。

故化簡後需要四個乘積項:

F=AB′C′+BC+CD+B′C′D′F=AB'C'+BC+CD+B'C'D'

以卡諾圖觀察必要項

原式涵蓋的最小項為:

AB′C′→m8,m9BCD′→m6,m14CD→m3,m7,m11,m15B′C′D′→m0,m8\begin{aligned} AB'C'&\rightarrow m_8,m_9\\ BCD'&\rightarrow m_6,m_{14}\\ CD&\rightarrow m_3,m_7,m_{11},m_{15}\\ B'C'D'&\rightarrow m_0,m_8 \end{aligned}

可形成的主要群組為:

🔒

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

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

免費註冊

第 5 題2 分

Consider the page reference string of size 12:

1,2,3,4,5,1,3,1,6,3,2,31, 2, 3, 4, 5, 1, 3, 1, 6, 3, 2, 3

with a frame size of 4, which means that a maximum of 4 pages can be in a frame. Use the First In First Out (FIFO), Least Recently Used (LRU), and Optimal Page Replacement (OPT) algorithms to calculate page faults.

What are the page faults for each algorithm?

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

這一題的完整詳解

核心觀念

本題考查作業系統的「分頁(Paging)」與「頁面置換(Page Replacement)」演算法。當頁面參考字串中的頁面不在目前的 4 個頁框(frame)中時,會發生一次 page fault;若頁面已在頁框中,則為 page hit。

三種演算法定義如下:

  • FIFO(First In First Out):置換最早載入頁框的頁面,不考慮最近是否使用。
  • LRU(Least Recently Used):置換最久未被使用的頁面。
  • OPT(Optimal):置換未來最晚才會再次使用,或未來不會再使用的頁面。此法需要預知未來,因此主要用於理論上的最佳比較。

頁面參考字串為:

1,2,3,4,5,1,3,1,6,3,2,31,2,3,4,5,1,3,1,6,3,2,3

頁框數為 44。


解題方法:FIFO

FIFO 依照頁面進入頁框的先後順序置換,使用佇列概念追蹤。

次序參考頁面頁框內容結果
111Fault
221, 2Fault
331, 2, 3Fault
441, 2, 3, 4Fault
552, 3, 4, 5Fault,置換 1
613, 4, 5, 1Fault,置換 2
733, 4, 5, 1Hit
813, 4, 5, 1Hit
964, 5, 1, 6Fault,置換 3
1035, 1, 6, 3Fault,置換 4
1121, 6, 3, 2Fault,置換 5
1231, 6, 3, 2Hit

因此:

FIFO page faults=9\text{FIFO page faults}=9

解題方法:LRU

LRU 每次發生頁面錯誤時,置換「最近最久沒有被使用」的頁面。

次序參考頁面頁框內容結果
111Fault
221, 2Fault
331, 2, 3Fault
441, 2, 3, 4Fault
552, 3, 4, 5Fault,置換最久未用的 1
613, 4, 5, 1Fault,置換 2
733, 4, 5, 1Hit
813, 4, 5, 1Hit
963, 5, 1, 6Fault,置換最久未用的 4
1033, 5, 1, 6Hit
1123, 1, 6, 2Fault,置換最久未用的 5
1233, 1, 6, 2Hit

因此:

LRU page faults=8\text{LRU page faults}=8

解題方法:OPT

OPT 查看每次置換點之後的未來參考字串,置換未來最晚才會使用或永遠不再使用的頁面。

前四次載入:

1,2,3,41,2,3,4

第 5 次參考頁面 55 時,頁框為 1,2,3,41,2,3,4。未來的參考字串為:

1,3,1,6,3,2,31,3,1,6,3,2,3

其中:

🔒

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

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

免費註冊

第 6 題2 分

Assuming a memory access time of 250 nanoseconds and an average page fault handling time of 70 microseconds, what is the expected page fault rate if you want to ensure that the effective access time is less than 270 nanoseconds?

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

這一題的完整詳解

核心觀念

本題考查虛擬記憶體中的「有效存取時間」(Effective Access Time, EAT)與「page fault rate」之間的關係。

  • 一般記憶體存取時間:250250 ns
  • Page fault handling time:7070 μs
  • 要求有效存取時間小於:270270 ns
  • Page fault rate:設為 pp

發生 page fault 時,處理時間遠大於一般記憶體存取時間,因此少量的 page fault 也會顯著增加平均存取時間。


解題方法

先統一時間單位:

70 μs=70,000 ns70\ \mu s=70,000\ ns

若未發生 page fault,存取時間為 250250 ns;若發生 page fault,處理時間約為 70,00070,000 ns。因此有效存取時間可表示為:

EAT=(1−p)(250)+p(70,000)EAT=(1-p)(250)+p(70,000)

題目要求:

(1−p)(250)+p(70,000)<270(1-p)(250)+p(70,000)<270

展開:

250−250p+70,000p<270250-250p+70,000p<270 69,750p<2069,750p<20 p<2069,750p<\frac{20}{69,750} p<0.0002867p<0.0002867

換算成百分比:

p<0.0002867×100%p<0.0002867\times 100\% p<0.02867%p<0.02867\%

因此,page fault rate 必須低於約 0.0287%0.0287\%。選項中最接近此上限的是:

0.02%\boxed{0.02\%}

所以依官方公布答案選 (B)。


選項分析

(A) 0.002%

🔒

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

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

免費註冊

第 7 題2 分

Which of the following activation functions is commonly used in the output layer of neural networks and performs well in multi-class classification problems?

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

這一題的完整詳解

核心觀念

本題考查神經網路輸出層的 activation function(啟動函數)與分類任務的對應關係。

在「多分類(multi-class classification)」問題中,每筆資料只能屬於多個類別中的一類,例如:

  • 貓、狗、鳥三選一
  • 多個疾病類別中擇一
  • 手寫數字 00~99 擇一

此時輸出層通常使用 Softmax,將各類別的原始輸出值轉換成總和為 11 的機率分布。

Softmax 函數定義如下。若輸出層共有 KK 個神經元,第 ii 個神經元的原始輸出為 ziz_i,則:

Softmax⁡(zi)=ezi∑j=1Kezj\operatorname{Softmax}(z_i) = \frac{e^{z_i}}{\displaystyle\sum_{j=1}^{K}e^{z_j}}

其輸出具有以下特性:

  1. 每個輸出值皆介於 00 與 11 之間。
  2. 所有類別的輸出值總和為 11。
  3. 輸出值可解釋為各類別的預測機率。
  4. 通常選擇機率最高的類別作為預測結果。

例如,某輸出層得到:

[2.0, 1.0, 0.1][2.0,\ 1.0,\ 0.1]

經過 Softmax 後,會轉換為三個總和為 11 的機率,代表三個類別的相對信心。

解題方法

判斷輸出層的啟動函數時,先確認分類任務的類型:

  • 多分類:通常使用 Softmax。
  • 二元分類:通常使用 Sigmoid。
  • 多標籤分類:每個類別可同時成立,通常對各輸出分別使用 Sigmoid。
  • 隱藏層:常使用 ReLU、Leaky ReLU 或 Tanh。

題目明確指出是「multi-class classification problems」,因此應選擇能將多個類別輸出轉換成總和為 11 的機率分布之函數,即 Softmax。

選項分析

(A) Softmax:正確

Softmax 最常用於多分類問題的輸出層。它會將多個神經元的原始輸出轉換為機率分布:

∑i=1Kpi=1\sum_{i=1}^{K}p_i=1

其中 pip_i 代表輸入屬於第 ii 類別的預測機率。因此符合題目所描述的「輸出層」與「多分類問題」。

(B) Leaky ReLU:錯誤

Leaky ReLU 通常用於隱藏層,目的是改善 ReLU 在輸入值小於 00 時梯度為零的問題。其函數為:

🔒

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

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

免費註冊

第 8 題2 分

Which of the followings is an example of a race condition in a multi-threaded program?

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

這一題的完整詳解

核心觀念

本題考查多執行緒程式中的 race condition(競爭條件)。

競爭條件是指:

多個執行緒同時存取共享資料,其中至少一個執行緒會修改資料,且程式未使用適當同步機制,導致結果取決於執行順序。

因此,程式結果可能因執行緒排程不同而改變,造成資料錯誤或結果不一致。

常見需要同步保護的共享資源包括:

  • 全域變數
  • 共用記憶體
  • 檔案
  • 資料庫資料
  • 共用計數器或佇列

解題方法

判斷 race condition 可依序檢查:

  1. 是否有兩個以上執行緒同時執行?
  2. 是否存取同一份共享資料?
  3. 是否至少有一個執行緒會修改該資料?
  4. 是否缺乏 mutex、lock、semaphore 等同步機制?

符合以上條件,即屬於競爭條件。

例如以下程式:

int count = 0;

void *worker(void *arg) {
 count = count + 1;
 return NULL;
}

表面上 count = count + 1 是一個動作,實際上通常可拆成:

  1. 讀取 count
  2. 將讀取值加 11
  3. 寫回 count

假設兩個執行緒同時執行,初始值為 00:

執行順序Thread 1Thread 2count
1讀取 0000
2讀取 0000
3計算 0+10+100
4計算 0+10+100
5寫回 1111
6寫回 1111

理想結果應為 22,實際結果卻可能是 11。這種因執行順序造成的結果不確定性,就是 race condition。

若加入互斥鎖:

lock(mutex);
count = count + 1;
unlock(mutex);

同一時間只有一個執行緒能修改 count,即可避免此問題。

選項分析

(A) A thread waiting indefinitely for a resource.

錯誤。

此敘述描述的是執行緒長時間等待資源,可能涉及:

  • starvation(飢餓):執行緒持續無法取得所需資源。
  • blocking(阻塞):執行緒暫停,等待某項條件成立。

它本身沒有指出多個執行緒未同步存取共享資料,因此不是 race condition 的定義。

(B) A deadlock caused by two threads trying to acquire each other's locks.

錯誤。

此敘述是 deadlock(死結)。

例如:

🔒

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

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

免費註冊

第 9 題2 分

In operating system, which scheduling algorithm can obtain the shortest waiting time for all processes in average?

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

這一題的完整詳解

核心觀念

本題考的是 CPU 排程(CPU Scheduling)中,各演算法對「平均等待時間(average waiting time)」的影響。

  • 等待時間(Waiting Time):程序在就緒佇列(ready queue)中等待 CPU 的總時間。
  • 平均等待時間:
Average Waiting Time=∑各程序等待時間程序總數\text{Average Waiting Time} = \frac{\sum \text{各程序等待時間}}{\text{程序總數}}

**Shortest-Job-First(SJF,最短工作優先)**會優先執行 CPU burst time 最短的程序。在所有程序同時到達、且已知各程序 CPU burst time 的條件下,SJF 能使所有程序的平均等待時間最小。


解題方法

判斷重點是:哪一種排程方式能讓「較短的工作先完成」,以降低後續程序累積的等待時間。

假設三個程序同時到達,CPU burst time 如下:

程序CPU burst time
P18
P24
P32

若採用 FCFS

執行順序為:

P1→P2→P3P1 \rightarrow P2 \rightarrow P3

各程序等待時間:

  • P1:00
  • P2:88
  • P3:8+4=128+4=12

平均等待時間:

0+8+123=203≈6.67\frac{0+8+12}{3} = \frac{20}{3} \approx 6.67

若採用 SJF

執行順序為:

P3→P2→P1P3 \rightarrow P2 \rightarrow P1

各程序等待時間:

  • P3:00
  • P2:22
  • P1:2+4=62+4=6

平均等待時間:

0+2+63=83≈2.67\frac{0+2+6}{3} = \frac{8}{3} \approx 2.67

SJF 讓短工作先完成,避免短程序被長程序阻塞,因此平均等待時間最低。

從兩個相鄰程序來看,若先執行工作時間較長的程序 LL,再執行較短的程序 SS,兩者對總等待時間的貢獻為:

0+L=L0+L=L

若改成先執行短程序 SS,再執行長程序 LL,總等待時間為:

0+S=S0+S=S

因為 S<LS<L,所以先執行短工作能降低總等待時間。將此原則套用到所有程序,即得到 SJF 的排序方式。


選項分析

(A) First-Come-First-Served

錯誤。

FCFS 按照程序到達順序執行,具有公平、實作簡單的優點,但不考慮 CPU burst time。

若長程序先到達,後面的短程序必須長時間等待,會產生 convoy effect(護航效應),使平均等待時間增加。因此 FCFS 不保證平均等待時間最短。

(B) Priority scheduling

錯誤。

Priority scheduling 依照優先權執行程序,優先權高的程序先獲得 CPU。

🔒

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

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

免費註冊

第 10 題2 分

Which term specifically refers to the entity created by encapsulating data within data-link layer headers and trailers?

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

這一題的完整詳解

核心觀念

本題考查 OSI 模型各層資料單位(Protocol Data Unit, PDU)的名稱,以及資料在不同網路層級進行封裝(encapsulation)後的稱呼。

在資料鏈結層(Data Link Layer)中,上一層交付下來的資料會被加上:

  • 資料鏈結層標頭(header)
  • 資料鏈結層尾端資訊(trailer),通常包含錯誤偵測用的 FCS(Frame Check Sequence)

其完整格式為:

Frame=Data-link Header+Payload+Data-link Trailer\text{Frame} = \text{Data-link Header} + \text{Payload} + \text{Data-link Trailer}

因此,經過資料鏈結層標頭與尾端封裝後所形成的資料單位,稱為 Frame(訊框)。

解題方法

題幹的關鍵字是:

data-link layer headers and trailers

只要看到「資料鏈結層」以及「標頭與尾端」,即可直接判斷資料單位是 Frame。

常見的 OSI 各層資料單位如下:

OSI 層級常見資料單位
Transport Layer 傳輸層Segment
Network Layer 網路層Packet
Data Link Layer 資料鏈結層Frame
Physical Layer 實體層Bits

資料由上而下傳送時,會逐層加上控制資訊:

Application Data→Segment→Packet→Frame→Bits\text{Application Data} \rightarrow \text{Segment} \rightarrow \text{Packet} \rightarrow \text{Frame} \rightarrow \text{Bits}

本題指定的是資料鏈結層封裝完成後的名稱,所以答案為 Frame。

選項分析

(A) Data

「Data」是較泛稱的資料,常用來描述應用層或上層交付的原始內容,並非資料鏈結層加入 header 與 trailer 後的標準 PDU 名稱。

因此錯誤。

(B) Chunk

🔒

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

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

免費註冊

第 11 題2 分

A company has a network address of 192.168.1.64 with a subnet mask of 255.255.255.192. The company wants to create two subnetworks that would contain 10 hosts and 18 hosts respectively. Which of the following networks would achieve that?

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

這一題的完整詳解

核心觀念

本題考查:

  1. 由主網路切割子網路(subnetting)
  2. 子網路遮罩的前綴長度(CIDR notation)
  3. 子網路可容納的主機數量
  4. VLSM(Variable Length Subnet Mask,變動長度子網路遮罩)

題目給定:

  • 網路位址:192.168.1.64
  • 子網路遮罩:255.255.255.192

將遮罩換成 CIDR 表示法:

255.255.255.192=/26255.255.255.192 = /26

因此原始網路為:

192.168.1.64/26192.168.1.64/26

其位址範圍為:

192.168.1.64∼192.168.1.127192.168.1.64 \sim 192.168.1.127

其中:

  • 網路位址:192.168.1.64
  • 廣播位址:192.168.1.127
  • 可用主機位址:192.168.1.65~192.168.1.126
  • 可用主機數:26−2=622^6-2=62

解題方法

第一步:計算 10 hosts 所需的子網路大小

可用主機數公式為:

2h−2≥所需主機數2^h-2 \geq \text{所需主機數}

其中 hh 是主機位元數。

對於 10 台主機:

2h−2≥102^h-2 \geq 10

當 h=4h=4 時:

24−2=142^4-2=14

因此 10 台主機需要:

  • 主機位元:4 bits
  • 網路前綴:32−4=2832-4=28
  • 子網路:/28/28
  • 每個子網路可用主機數:14

第二步:計算 18 hosts 所需的子網路大小

對於 18 台主機:

2h−2≥182^h-2 \geq 18

當 h=5h=5 時:

25−2=302^5-2=30

因此 18 台主機需要:

  • 主機位元:5 bits
  • 網路前綴:32−5=2732-5=27
  • 子網路:/27/27
  • 每個子網路可用主機數:30

第三步:在原本的 /26 網路中進行切割

原始網路是:

192.168.1.64/26192.168.1.64/26

一個 /26 網路可以切成兩個 /27 網路:

子網路位址範圍可用主機數
192.168.1.64/27192.168.1.64~192.168.1.9530
192.168.1.96/27192.168.1.96~192.168.1.12730

為了配置 18 台與 10 台主機,可將其中一個 /27 再切成兩個 /28:

  • 192.168.1.64/27:容納 18 台主機
  • 192.168.1.96/28:容納 10 台主機
  • 192.168.1.112/28:剩餘子網路,可供未來使用

因此完整配置可以是:

用途子網路可用主機範圍
18 hosts192.168.1.64/27192.168.1.65~192.168.1.94
10 hosts192.168.1.96/28192.168.1.97~192.168.1.110

選項中列出的 192.168.1.64/27 正是可容納 18 台主機的主要子網路,因此依官方答案選 B。


選項分析

(A) 192.168.1.16/28

/28 的確可以提供:

24−2=142^4-2=14

可用主機位址,足以容納 10 台主機。

🔒

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

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

免費註冊

第 12 題2 分

The DARPA technology includes a set of network standards that specify the details of how computers communicate, as well as a set of conventions for interconnecting networks and forwarding traffic. Officially named the TCP/IP Internet Protocol Suite and commonly referred to as TCP/IP (after the names of its two main standards), it can be used to communicate across any set of interconnected networks. Which of the following statements about TCP/IP is INCORRECT?

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

這一題的完整詳解

核心觀念

本題考查 TCP/IP Internet Protocol Suite 中,TCP、IP 與 UDP 的基本特性:

  • TCP(Transmission Control Protocol):傳輸層、具連線導向(connection-oriented)、可靠、依序傳輸。
  • IP(Internet Protocol):網路層、無連線(connectionless)、採最佳努力傳遞(best-effort delivery)。
  • UDP(User Datagram Protocol):傳輸層、無連線、低額外負擔,但不保證可靠傳輸。
  • TCP 三向交握(three-way handshake):建立 TCP 連線時使用的程序。

本題要求找出「INCORRECT」,因此只要找出與上述定義矛盾的選項即可。

解題方法

逐一比對各選項與 TCP/IP 的標準特性:

  1. TCP/IP 是否為網際網路通訊協定組合?
  2. TCP 是否具備連線導向與可靠傳輸特性?
  3. IP 是否採無連線與最佳努力傳遞?
  4. TCP 是否以三向交握建立連線?
  5. UDP 的可靠性是否高於 TCP?

前四項皆符合標準定義,第五項將 UDP 與 TCP 的可靠性關係倒置,因此為錯誤敘述。

選項分析

(A) TCP/IP is a suite of protocols for communication over the internet.

正確。

TCP/IP 並非單一協定,而是一組用於網路通訊的協定集合,包含不同層級的協定,例如:

  • 應用層:HTTP、DNS、FTP
  • 傳輸層:TCP、UDP
  • 網路層:IP、ICMP
  • 網路存取層:Ethernet、Wi-Fi 等

因此,TCP/IP 確實是用於網際網路通訊的協定組合。

(B) TCP is a connection-oriented protocol that guarantees reliable delivery of data.

正確。

TCP 是連線導向協定。資料傳送前,雙方必須先建立連線;資料傳送期間,TCP 會透過多種機制提高可靠性,包括:

  • 序號(Sequence Number):確保資料可依序重組。
  • 確認應答(Acknowledgment):接收端回覆已收到的資料。
  • 逾時重傳(Retransmission):資料遺失時重新傳送。
  • 流量控制(Flow Control):避免接收端緩衝區溢位。
  • 壅塞控制(Congestion Control):降低網路壅塞造成的封包遺失。

因此,在一般計算機網路的考試定義中,TCP 被視為提供可靠的資料傳輸服務。

嚴格而言,TCP 無法保證在主機故障、網路完全中斷等情況下資料必定送達;此敘述中的「guarantees」是採用考試常見的標準化表述,意指 TCP 相較於 UDP 提供可靠傳輸機制。

🔒

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

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

免費註冊

第 13 題2 分

The pre-order traversal of a Binary Search Tree (BST) is 31, 27, 21, 12, 25, 30, 29, 38, 33, 41 and its in-order traversal is 12, 21, 25, 27, 29, 30, 31, 33, 38, 41.

When the element to be deleted is in a non-leaf node that has two children, the element is replaced by the largest element in its left subtree.

When a key value 36 is inserted into the binary search tree, which of the following statements is CORRECT?

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

這一題的完整詳解

核心觀念

本題考查:

  1. 由 pre-order traversal 與 in-order traversal 還原 BST。
  2. BST 的性質:
  • 左子樹所有鍵值小於根節點。
  • 右子樹所有鍵值大於根節點。
  1. BST 插入與刪除:
  • 插入時,從根節點逐層比較。
  • 刪除只有一個子節點的節點時,由其唯一子節點接替原位置。
  • 刪除有兩個子節點的節點時,題目指定以左子樹最大值取代。

解題方法:先還原原始 BST

Pre-order 的第一個元素一定是根節點,因此根為 3131。

In-order 中,3131 左側的元素屬於左子樹,右側的元素屬於右子樹:

  • 左子樹:12,21,25,27,29,3012,21,25,27,29,30
  • 右子樹:33,38,4133,38,41

依照 pre-order 順序,可逐層建立:

  • 3131 的左子樹根為 2727
  • 3131 的右子樹根為 3838
  • 2727 的左子樹根為 2121
  • 2727 的右子樹根為 3030
  • 2121 的左子節點為 1212
  • 2121 的右子節點為 2525
  • 3030 的左子節點為 2929
  • 3838 的左子節點為 3333
  • 3838 的右子節點為 4141

原始 BST 為:

 31
 / \
 27 38
 / \ / \
 21 30 33 41
 / \ /
12 25 29

插入鍵值 3636

依照 BST 插入規則逐步比較:

  1. 36<3136 < 31 不成立,因此往右走至 3838。
  2. 36<3836 < 38,往左走至 3333。
  3. 36>3336 > 33,往右插入。

插入後:

 31
 / \
 27 38
 / \ / \
 21 30 33 41
 / \ / \
12 25 29 36

關鍵插入程式可表示為:

insert(root, key):
 if root == null:
 return new Node(key)

 if key < root.key:
 root.left = insert(root.left, key)
 else:
 root.right = insert(root.right, key)

 return root

鍵值 3636 的追蹤路徑為:

31→38→33→3631 \rightarrow 38 \rightarrow 33 \rightarrow 36

因此,3636 的父節點是 3333。


選項分析

(A) The key value 38 is the parent of key value 36.

錯誤。

插入 3636 時,雖然先由 3131 走到 3838,但因為 36<3836 < 38,必須進入 3838 的左子樹;接著因為 36>3336 > 33,最後插入為 3333 的右子節點。

因此:

parent⁡(36)=33\operatorname{parent}(36)=33

3838 是 3636 的祖先,但不是直接父節點。


(B) The key value 30 has two children.

錯誤。

節點 3030 的左子節點是 2929,右側沒有子節點:

30
/
29

插入 3636 發生在 3333 的右子樹,不會改變節點 3030 的結構。因此 3030 只有一個子節點。


🔒

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

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

免費註冊

第 14 題2 分

What is the value of the node at index 2, with the root at index 1, in a max-heap that is represented as an array, after inserting the following 6 numbers in this precise order: 8, 12, 12, 9, 10, 11?

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

這一題的完整詳解

核心觀念

本題考查:

  1. **Max-heap(最大堆積)**的性質:每個父節點的值都大於或等於其子節點。
  2. 以陣列表示二元堆積,且根節點位於索引 11。
  3. 插入元素時的上濾(sift-up / bubble-up):
  • 新元素先放在陣列最後。
  • 與父節點比較。
  • 若新元素大於父節點,便交換並繼續向上比較。

由於根節點位於索引 11,所以索引 ii 的父節點為:

parent⁡(i)=⌊i2⌋\operatorname{parent}(i)=\left\lfloor \frac{i}{2}\right\rfloor

索引 ii 的左、右子節點分別為:

2i,2i+12i,\qquad 2i+1

本題要求的是最後陣列中索引 22 的節點值。

解題方法與逐步追蹤

採用標準最大堆積插入法:每次將新數字加到陣列尾端,再向上與父節點比較。

插入 88

陣列為:

[8][8]

88 位於根節點,無須上濾。

插入 1212

先放在索引 22:

[8,12][8,12]

索引 22 的父節點是索引 11,比較:

12>812>8

交換後:

[12,8][12,8]

插入 1212

先放在索引 33:

[12,8,12][12,8,12]

索引 33 的父節點是索引 11,比較:

12=1212=12

最大堆積允許父子節點相等,因此不必交換。

目前陣列為:

[12,8,12][12,8,12]

插入 99

先放在索引 44:

[12,8,12,9][12,8,12,9]

索引 44 的父節點為:

⌊42⌋=2\left\lfloor \frac{4}{2}\right\rfloor=2

比較索引 44 與索引 22:

9>89>8

交換:

[12,9,12,8][12,9,12,8]

此時索引 22 的父節點為索引 11,比較:

9<129<12

停止上濾。

插入 1010

先放在索引 55:

[12,9,12,8,10][12,9,12,8,10]

索引 55 的父節點為索引 22:

10>910>9

交換後:

[12,10,12,8,9][12,10,12,8,9]

索引 22 的值為 1010,且:

10<1210<12

因此停止上濾。

插入 1111

🔒

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

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

免費註冊

第 15 題2 分

Suppose we have two tables, as shown below named STUDENT_TABLE and AGE_TABLE, respectively.

STUDENT_TABLE:

S_ID | Name | Sex
1 | David | Male
2 | Peter | Male
3 | John | Male
4 | Emma | Female
5 | Jack | Male

AGE_TABLE:

T_ID | Age | STID
1 | 18 | 2
2 | 20 | 4
3 | 21 | 1
4 | 24 | 5
5 | 28 | 3

Consider the following SQL query:

SELECT * FROM AGE_TABLE
JOIN STUDENT_TABLE ON STUDENT_TABLE.S_ID = AGE_TABLE.STID

Regarding the result of executing this query, which of the following comments is CORRECT?

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

這一題的完整詳解

核心觀念

本題考查 SQL 的 JOIN,以及資料表之間透過外鍵欄位進行配對的方式。

查詢語句為:

SELECT * FROM AGE_TABLE
JOIN STUDENT_TABLE
ON STUDENT_TABLE.S_ID = AGE_TABLE.STID;

此處未指定 INNER、LEFT 等類型時,JOIN 預設為 INNER JOIN。執行機制如下:

  1. 取出 AGE_TABLE 的一筆資料。
  2. 以 AGE_TABLE.STID 對照 STUDENT_TABLE.S_ID。
  3. 兩欄數值相等時,合併兩表該筆資料。
  4. SELECT * 會顯示兩個資料表的所有欄位。

解題方法

依照 STID = S_ID 逐筆配對:

T_IDAgeSTID對應 S_IDNameSex
11822PeterMale
22044EmmaFemale
32111DavidMale
42455JackMale
52833JohnMale

因此,合併後的重要資料為:

  • Peter:18 歲
  • Emma:20 歲
  • David:21 歲
  • Jack:24 歲
  • John:28 歲

選項分析

(A) Peter’s age is 20

Peter 的 S_ID = 2,需尋找 AGE_TABLE.STID = 2 的資料。

對應資料為:

T_ID=1,Age=18T\_ID=1,\quad Age=18

所以 Peter 的年齡是 18 歲,不是 20 歲。此選項錯誤。


(B) The average age of Male is 21.75

性別為 Male 的學生為:

🔒

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

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

免費註冊

第 16 題2 分

Which one of the options below is NOT a sorting algorithm that performs in-place sorting in their typical implementations?

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

這一題的完整詳解

核心觀念

本題考查「in-place sorting(原地排序)」的定義。

原地排序是指:

  • 直接在原陣列上 rearrange(重新排列)元素;
  • 只使用固定大小或相對很小的額外記憶體;
  • 不需建立與輸入資料量 nn 同階的輔助陣列。

判斷重點不是只看時間複雜度,而是看排序過程是否需要額外的 O(n)O(n) 空間。

常見排序法比較如下:

排序法典型時間複雜度典型額外空間是否通常為原地排序
Bubble sortO(n2)O(n^2)O(1)O(1)是
Insertion sortO(n2)O(n^2)O(1)O(1)是
Merge sortO(nlog⁡n)O(n\log n)O(n)O(n)否
Heap sortO(nlog⁡n)O(n\log n)O(1)O(1)是
Quick sort平均 O(nlog⁡n)O(n\log n)平均 O(log⁡n)O(\log n) 堆疊通常視為是

因此,官方答案為 (C) Merge sort。


解題方法

判斷每個排序演算法的典型實作是否需要一個與輸入資料量 nn 同階的輔助陣列。

Merge sort 的基本流程是:

  1. 將陣列分成左右兩半;
  2. 遞迴排序左右兩半;
  3. 將兩個已排序的子陣列合併。

合併時,典型實作會配置暫存陣列:

mergeSort(A, left, right):
 if left >= right:
 return

 mid = (left + right) / 2
 mergeSort(A, left, mid)
 mergeSort(A, mid + 1, right)
 merge(A, left, mid, right)

典型的 merge:

merge(A, left, mid, right):
 temp = new array of size right - left + 1

 i = left
 j = mid + 1
 k = 0

 while i <= mid and j <= right:
 if A[i] <= A[j]:
 temp[k] = A[i]
 i = i + 1
 else:
 temp[k] = A[j]
 j = j + 1
 k = k + 1

 copy remaining elements from A[i...mid] into temp
 copy remaining elements from A[j...right] into temp

 copy temp back to A[left...right]

每一層遞迴的合併工作總量為 O(n)O(n),共有 O(log⁡n)O(\log n) 層,因此時間複雜度為:

T(n)=2T(n2)+O(n)=O(nlog⁡n)T(n)=2T\left(\frac{n}{2}\right)+O(n)=O(n\log n)

但是 temp 陣列最多需要儲存 nn 個元素,因此額外空間為:

S(n)=O(n)S(n)=O(n)

這使得典型 Merge sort 不符合原地排序的分類。


Merge sort 的逐步追蹤

假設輸入為:

[8,3,5,4][8, 3, 5, 4]

分割階段:

[8, 3, 5, 4]
 / \
 [8, 3] [5, 4]
 / \ / \
[8] [3] [5] [4]

合併階段:

merge([8], [3]) -> temp = [3, 8]
merge([5], [4]) -> temp = [4, 5]

最後合併:

merge([3, 8], [4, 5])

比較 3 與 4:取 3
比較 8 與 4:取 4
比較 8 與 5:取 5
剩下 8

結果為 [3, 4, 5, 8]

過程中的 temp 就是典型 Merge sort 的 O(n)O(n) 額外空間來源。


選項分析

(A) Bubble sort

Bubble sort 反覆比較相鄰元素,若順序錯誤就交換:

🔒

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

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

免費註冊

第 17 題2 分

What is the difference between a fully connected layer and a convolutional layer in a neural network?

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

這一題的完整詳解

核心觀念

本題考查神經網路中全連接層(fully connected layer, FC layer)與卷積層(convolutional layer, convolutional layer)的連接方式與結構差異。

  • 全連接層:每一個輸入神經元都與每一個輸出神經元相連。若輸入有 nn 個神經元、輸出有 mm 個神經元,權重數量通常為 n×mn \times m,另加上 mm 個偏置。
  • 卷積層:每個輸出神經元只與輸入資料中的局部區域相連,這個局部區域稱為感受野(receptive field)。卷積核會在輸入資料上滑動,重複使用同一組權重,因此具有局部連接與權重共享的特性。

卷積層的設計特別適合影像資料,因為影像中相鄰像素通常具有較強的空間關聯性。


解題方法

判斷本題的關鍵是比較兩種層的「連接範圍」:

  1. 全連接層採取全域連接,每個輸入神經元都連到每個輸出神經元。
  2. 卷積層採取局部連接,每個輸出神經元只查看輸入資料的一小部分區域。
  3. 因此,描述「全連接」與「局部連接」差異的選項即為正確答案。

例如,輸入資料有 100100 個神經元,輸出層有 1010 個神經元:

  • 全連接層需要連接 100×10=1000100 \times 10 = 1000 條權重。
  • 卷積層的每個輸出位置只使用局部感受野,例如每次只查看 99 個輸入值,因此不會讓每個輸入直接連接到每個輸出位置。

選項分析

(A) Fully connected layers are only used in supervised learning, while convolutional layers are used in unsupervised learning.

錯誤。

全連接層與卷積層都是神經網路的組成元件,並不限定只能用於特定的學習方式。

  • 全連接層可以用於監督式學習、非監督式學習及自編碼器等模型。
  • 卷積層也可以用於監督式影像分類、非監督式特徵學習、生成模型等。

因此,兩者的差異不是監督式學習與非監督式學習的區分。


(B) Fully connected layers require less computation than convolutional layers.

錯誤。

一般情況下,全連接層需要大量參數與乘加運算,尤其當輸入資料維度很高時,計算量通常相當可觀。

全連接層的參數數量約為:

NFC=nin×nout+noutN_{\text{FC}} = n_{\text{in}} \times n_{\text{out}} + n_{\text{out}}

卷積層則使用較小的卷積核,並在不同位置共享相同權重。例如卷積核大小為 k×kk \times k、輸入通道數為 cinc_{\text{in}}、輸出通道數為 coutc_{\text{out}},其參數數量約為:

NConv=k2×cin×cout+coutN_{\text{Conv}} = k^2 \times c_{\text{in}} \times c_{\text{out}} + c_{\text{out}}
🔒

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

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

免費註冊

第 18 題2 分

Ackermann's function is an example of a recursive function which is not primitive recursive. It is interesting from the point of view of benchmarking because it "grows faster than any primitive recursive function."

Ackermann's function is defined as follows:

A(0,n)=n+1A(0,n)=n+1

A(m,0)=A(m−1,1)A(m,0)=A(m-1,1)

A(m,n)=A(m−1,A(m,n−1))A(m,n)=A(m-1,A(m,n-1))

What is the A(1,3)A(1,3) return value of the following program?

int A(int m, int n)
{
if (m==0)
return n+1;
else if (n==0)
return A(m-1,1);
else
return A(m-1,A(m,n-1));
}

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

這一題的完整詳解

核心觀念

本題考查 Ackermann function 的遞迴定義,以及程式中巢狀遞迴呼叫的執行方式。

函式定義為:

A(0,n)=n+1A(0,n)=n+1 A(m,0)=A(m−1,1)A(m,0)=A(m-1,1) A(m,n)=A(m−1,A(m,n−1))A(m,n)=A(m-1,A(m,n-1))

本題要求:

A(1,3)A(1,3)

由於 m=1m=1,且 n>0n>0,必須套用第三個遞迴規則:

A(1,n)=A(0,A(1,n−1))A(1,n)=A(0,A(1,n-1))

而 A(0,x)=x+1A(0,x)=x+1,因此可逐步計算。

解題方法與逐步推導

先從 n=0n=0 開始:

A(1,0)=A(0,1)=1+1=2A(1,0)=A(0,1)=1+1=2

接著計算 A(1,1)A(1,1):

A(1,1)=A(0,A(1,0))=A(0,2)=2+1=3\begin{aligned} A(1,1) &=A(0,A(1,0))\\ &=A(0,2)\\ &=2+1\\ &=3 \end{aligned}

計算 A(1,2)A(1,2):

A(1,2)=A(0,A(1,1))=A(0,3)=3+1=4\begin{aligned} A(1,2) &=A(0,A(1,1))\\ &=A(0,3)\\ &=3+1\\ &=4 \end{aligned}

計算 A(1,3)A(1,3):

A(1,3)=A(0,A(1,2))=A(0,4)=4+1=5\begin{aligned} A(1,3) &=A(0,A(1,2))\\ &=A(0,4)\\ &=4+1\\ &=5 \end{aligned}

因此:

A(1,3)=5\boxed{A(1,3)=5}

程式碼逐步追蹤

關鍵程式碼為:

else if (n==0)
 return A(m-1,1);
else
 return A(m-1,A(m,n-1));

對 A(1,3)A(1,3) 的主要追蹤如下:

A(1,3)→A(0,A(1,2))→A(0,A(0,A(1,1)))→A(0,A(0,A(0,A(1,0))))→A(0,A(0,A(0,A(0,1))))→A(0,A(0,A(0,2)))→A(0,A(0,3))→A(0,4)→5\begin{aligned} A(1,3) &\to A(0,A(1,2))\\ &\to A(0,A(0,A(1,1)))\\ &\to A(0,A(0,A(0,A(1,0))))\\ &\to A(0,A(0,A(0,A(0,1))))\\ &\to A(0,A(0,A(0,2)))\\ &\to A(0,A(0,3))\\ &\to A(0,4)\\ &\to 5 \end{aligned}
🔒

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

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

免費註冊

第 19 題2 分

Given the head of a linked list, determine whether the linked list has a cycle. If it does have a cycle, return true; otherwise, return false. The example and algorithm are shown below.

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

bool hasCycle(ListNode *head){

if(head==NULL||head->next==NULL)
    return false;

ListNode *a=head;
ListNode *b=head->next;

while(a!=b){

    if(b==NULL||b->next==NULL)
        return false;

    // Q1 //

    // Q2 //
}

return true;

}

Which of the followings should be "Q1" and "Q2" in the algorithm?

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 7 頁

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

這一題的完整詳解

核心觀念

本題考 Floyd’s Cycle Detection Algorithm(龜兔賽跑演算法):

  • 指標 a 每次前進 11 個節點,作為慢指標。
  • 指標 b 每次前進 22 個節點,作為快指標。
  • 若 linked list 有 cycle,兩個指標最後一定會在環內相遇。
  • 若沒有 cycle,快指標會先到達 NULL。

因此應填入:

Q1: a = a -> next;
Q2: b = b -> next -> next;

解題方法與逐步追蹤

原程式設定:

ListNode *a = head;
ListNode *b = head->next;

在每次迴圈中:

a = a -> next; // a 前進 1 步
b = b -> next -> next; // b 前進 2 步

以圖中 Example 1:

3→2→0→−43 \rightarrow 2 \rightarrow 0 \rightarrow -4

且 −4-4 又指回 22。

指標移動如下:

迴圈階段ab
初始3322
第 1 次移動後22−4-4
第 2 次移動後0000

兩個指標在節點 00 相遇,因此回傳 true。

以沒有 cycle 的 Example 2:

1→2→0→−4→NULL1 \rightarrow 2 \rightarrow 0 \rightarrow -4 \rightarrow NULL

當 b 移動到尾端時,條件

if(b == NULL || b->next == NULL)
 return false;

會成立,因此回傳 false。


為什麼選 E 正確

Q1: a = a -> next;
Q2: b = b -> next -> next;

a 每次走一步,b 每次走兩步,符合 Floyd 演算法的設計:

  • 有環:快慢指標在環內必定相遇。
  • 無環:b 會先抵達 NULL,程式安全回傳 false。

所以官方答案為 E。

🔒

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

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

免費註冊

第 20 題2 分

What is the output of the following C program?

int i = 15, j = 9, *s = &i, *t = &j;
i = 3;

printf(“%d\n”, 10*(*s+*t)+3);

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

這一題的完整詳解

核心觀念

本題考查 C 語言的:

  • 指標(pointer)與取值運算子 *
  • 位址運算子 &
  • 指標所指向變數的連動關係
  • 指派運算對變數值的影響
  • 運算式的括號與算術運算順序

程式中的宣告為:

int i = 15, j = 9, *s = &i, *t = &j;

其意義如下:

  • i 的初始值為 1515
  • j 的初始值為 99
  • s 儲存變數 i 的位址,因此 *s 代表 i
  • t 儲存變數 j 的位址,因此 *t 代表 j

因此:

∗s=i,∗t=j*s=i,\qquad *t=j

解題方法與逐步追蹤

先依照程式執行順序建立變數狀態:

執行階段ij*s*t
初始宣告後159159
執行 i = 3; 後3939

關鍵在於:s 儲存的是 i 的位址,而不是把 i 當時的數值複製一份。因此,執行:

i = 3;

會直接改變 i 的內容;之後透過 *s 取值時,取得的是最新的 i 值 33。

接著計算 printf 中的運算式:

10 * (*s + *t) + 3

代入:

∗s=3,∗t=9*s=3,\qquad *t=9

因此:

10×(3+9)+310\times(3+9)+3 =10×12+3=10\times12+3 =120+3=123=120+3=123

所以程式輸出:

123

選項分析

🔒

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

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

免費註冊

第 21 題2 分

Which of the following statements correctly describes the output of the following C program, where the function foo is called at least three times with different arguments?

#include <stdio.h>

int foo(int x) {
static int y = 0;
y += x;
return y;
}

int main() {
int a = foo(2);
int b = foo(4);
int c = foo(6);
printf("%d\n", a + b + c);
return 0;
}

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

這一題的完整詳解

核心觀念

本題考查 C 語言函式內部的 static 區域變數。

int foo(int x) {
 static int y = 0;
 y += x;
 return y;
}

static int y = 0; 具有以下特性:

  • y 只在第一次執行到宣告時初始化為 00。
  • y 的作用域仍限定在函式 foo 內,函式外無法直接存取。
  • y 的生命週期持續整個程式執行期間。
  • 函式 foo 返回後,y 的值不會消失;下一次呼叫會沿用前一次的值。

因此,三次呼叫並非每次都從 00 開始計算。

解題方法與逐步追蹤

依照程式執行順序追蹤 y、函式回傳值及變數內容:

呼叫傳入的 x執行 y += x 後的 y回傳值接收變數
foo(2)220+2=20+2=222a = 2
foo(4)442+4=62+4=666b = 6
foo(6)666+6=126+6=121212c = 12

所以:

a+b+c=2+6+12=20a+b+c=2+6+12=20

程式最後執行:

printf("%d\n", a + b + c);

輸出為:

20

選項分析

(A) The program will not compile because of an error in the function foo.

錯誤。函式中的 static 區域變數宣告方式完全合法:

static int y = 0;

y += x; 及 return y; 也都是合法的 C 語法,程式可以正常編譯與執行。

🔒

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

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

免費註冊

第 22 題2 分

What is the output of the following C code?

int i=8, j=7, *s=&i, *t=&j;

printf("%d ", (*s+*t)/2);

printf("%d ", *s-*t);

printf("%d ", (*s)++);

printf("%d ", ++(*t));

printf("%d ", (*s)++);

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

這一題的完整詳解

核心觀念

本題考查 C 語言中的:

  1. 指標與位址:
  • s 指向變數 i
  • t 指向變數 j
  • *s 代表 i 的值
  • *t 代表 j 的值
  1. 整數除法:
  • (*s+*t)/2 的運算結果為整數,因此小數部分會被捨去。
  1. 前置與後置遞增:
  • (*s)++:先使用原值,再使 *s 加 1。
  • ++(*t):先使 *t 加 1,再使用新值。

初始狀態為:

i=8,j=7i=8,\qquad j=7

因為:

int i=8, j=7, *s=&i, *t=&j;

所以:

*s == i == 8
*t == j == 7

解題方法與逐步追蹤

第 1 個 printf

printf("%d ", (*s+*t)/2);

代入初始值:

∗s+∗t2=8+72=152=7\frac{*s+*t}{2} = \frac{8+7}{2} = \frac{15}{2} = 7

C 語言的整數除法會捨去小數部分,因此輸出:

7

此時變數值不變:

i=8,j=7i=8,\qquad j=7

第 2 個 printf

printf("%d ", *s-*t);

代入數值:

∗s−∗t=8−7=1*s-*t=8-7=1

輸出:

1

此時:

i=8,j=7i=8,\qquad j=7

第 3 個 printf

printf("%d ", (*s)++);

(*s)++ 是後置遞增,先輸出原本的 *s,再將 *s 加 1。

因此先輸出:

∗s=8*s=8

輸出後:

i=9i=9

此時:

i=9,j=7i=9,\qquad j=7

第 4 個 printf

printf("%d ", ++(*t));

++(*t) 是前置遞增,先將 *t 加 1,再輸出新值。

原本:

∗t=j=7*t=j=7

遞增後:

j=8j=8

因此輸出:

8

此時:

i=9,j=8i=9,\qquad j=8
🔒

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

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

免費註冊

第 23 題2 分

Which of the following techniques can be used to help prevent SQL injection attacks?

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

這一題的完整詳解

核心觀念

本題考查 SQL Injection(SQL 注入)攻擊與防禦方法。

SQL Injection 是指攻擊者將惡意 SQL 語句或條件,插入應用程式原本要執行的 SQL 指令中,使資料庫執行非預期操作,例如:

  • 繞過登入驗證
  • 讀取機密資料
  • 修改或刪除資料
  • 取得資料庫管理權限

其根本原因通常是:應用程式直接將使用者輸入串接到 SQL 語句中,導致「程式指令」與「外部資料」混在一起。

例如不安全的寫法:

SELECT * FROM users
WHERE username = '使用者輸入'
AND password = '使用者輸入';

若未妥善處理輸入內容,攻擊者可能輸入特殊字串,使原本的查詢條件遭到改變。

防禦 SQL Injection 的常見方法包括:

  1. 使用參數化查詢(prepared statements)
  2. 使用適當設計的 stored procedures(預存程序)
  3. 進行輸入驗證
  4. 限制資料庫帳號權限
  5. 避免將錯誤訊息暴露給使用者

解題方法

判斷各選項是否能防止 SQL Injection,重點在於確認該方法是否能避免使用者輸入直接改變 SQL 指令結構。

若方法能將 SQL 指令與使用者資料分離,便具有防禦效果;若只是將資料直接存放、改名,或完全忽略驗證,則無法解決注入問題。

本題官方答案為 B,因為設計良好的 stored procedures 可以將資料庫操作封裝在預先定義的程序中,並透過參數傳遞使用者資料,降低輸入內容被當成 SQL 指令執行的風險。

選項分析

(A) Concatenating user input with SQL queries.

錯誤。

將使用者輸入直接與 SQL 查詢串接,是 SQL Injection 最典型的成因。例如:

query = "SELECT * FROM users WHERE name = '" + userInput + "'";

此寫法未將輸入內容與 SQL 指令分離。若使用者輸入包含引號、註解符號或額外的 SQL 條件,就可能改變原本查詢語句的意義。

因此,直接串接使用者輸入不但不能防禦 SQL Injection,反而會提高遭受攻擊的風險。

(B) Using stored procedures.

正確,為本題官方答案。

Stored procedure(預存程序)是事先儲存在資料庫中的程式化 SQL 操作。應用程式呼叫預存程序時,可將使用者輸入作為參數傳入,而不是直接將輸入字串拼接到 SQL 語句中。

概念上可寫成:

CREATE PROCEDURE GetUser
 @username VARCHAR(50)
AS
BEGIN
 SELECT *
 FROM users
 WHERE username = @username;
END;

應用程式呼叫:

🔒

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

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

免費註冊

第 24 題2 分

Which of the following statements is related to a characteristic or application of asymmetric encryption?

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

這一題的完整詳解

核心觀念

本題考查「對稱式加密」與「非對稱式加密」的特性及應用。

比較項目對稱式加密非對稱式加密
金鑰數量使用同一把共享金鑰加密與解密使用公開金鑰與私密金鑰成對運作
速度快,適合大量資料較慢,不適合直接加密大量資料
主要用途大量資料加密、即時通訊數位簽章、金鑰交換、數位信封
金鑰分配須安全傳遞共享金鑰公開金鑰可公開,私密金鑰須保密

非對稱式加密常見的金鑰用途如下:

  • 機密性:寄件者使用收件者的公開金鑰加密,只有收件者能用自己的私密金鑰解密。
  • 數位簽章:寄件者使用自己的私密金鑰簽署,收件者使用寄件者的公開金鑰驗證。
  • 數位信封:以非對稱式加密保護對稱式加密所使用的工作金鑰,再以對稱式加密處理大量內容。

解題方法

判斷各選項是否正確時,抓住三個核心特徵:

  1. 非對稱式加密使用「公開金鑰+私密金鑰」,不是同一把金鑰。
  2. 非對稱式加密運算較慢,通常不直接用來加密大量資料。
  3. 非對稱式加密的重要應用包括數位簽章與數位信封。

符合上述特徵的選項即為正確答案。

選項分析

(A) 錯誤

選項聲稱非對稱式加密「非常有效率地加密大量資料」,並且是雲端儲存的主要選擇。

非對稱式加密涉及複雜的數學運算,例如大數運算,速度通常比對稱式加密慢,因此不適合直接加密大量檔案或大量資料。

雲端儲存常採用混合式加密:

  1. 產生一把隨機的對稱式工作金鑰。
  2. 使用對稱式加密處理實際的大量資料。
  3. 使用非對稱式加密保護這把對稱式工作金鑰。

因此,非對稱式加密主要用來保護金鑰,而非直接高效率地加密大量資料。

(B) 正確

非對稱式加密廣泛應用於:

  • 數位簽章(digital signature):簽署者使用私密金鑰產生簽章,驗證者使用其公開金鑰驗證簽章,可確認資料來源及內容是否遭到竄改。
  • 數位信封(digital envelope):使用對稱式加密快速加密資料,再使用收件者的公開金鑰加密對稱式工作金鑰,以兼顧效率與安全性。

數位信封的基本流程可表示為:

Cdata=Enc⁡Ks(M)C_{\text{data}}=\operatorname{Enc}_{K_s}(M)

其中 MM 是原始資料,KsK_s 是對稱式工作金鑰。

接著使用收件者的公開金鑰加密工作金鑰:

🔒

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

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

免費註冊

第 25 題2 分

A DDoS attack attempts to consume the target’s resources so that it cannot provide service. What is a distributed denial of service (DDoS) attack and how does it work?

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

這一題的完整詳解

核心觀念

本題考查分散式阻斷服務攻擊(Distributed Denial of Service, DDoS)的定義與運作機制。

DDoS 的主要目的,是在短時間內由「多個來源」向目標伺服器、網路設備或服務大量傳送請求與封包,使目標的下列資源被耗盡:

  • 網路頻寬
  • CPU 與記憶體
  • 連線數量
  • 應用程式處理能力
  • 防火牆、負載平衡器等網路設備資源

當正常使用者的請求無法獲得處理時,目標服務便會變慢、中斷,甚至完全無法提供服務。

攻擊者通常會先控制大量受感染的電腦、伺服器、物聯網裝置或其他網路設備,形成殭屍網路(botnet),再要求這些裝置同時對目標發動流量攻擊。因此,DDoS 的關鍵特徵是:

  1. 攻擊目標是服務可用性。
  2. 攻擊流量來自多個來源。
  3. 主要手段是大量流量或請求造成資源超載。

解題方法

判斷本題可抓住題幹中的兩個關鍵描述:

  • 「consume the target’s resources」:消耗目標資源。
  • 「cannot provide service」:使目標無法提供服務。

再對照選項,只有選項 (C) 同時包含:

  • overload:使伺服器或網路超載;
  • traffic from multiple sources:流量來自多個來源。

這正是 DDoS 的核心定義與運作方式,因此選擇 (C)。

選項分析

(A) A type of malware that infects multiple machines and spreads through a network.

錯誤。

此選項描述的是一種可感染多部電腦並透過網路散播的惡意程式,較接近電腦病毒、蠕蟲或其他惡意軟體的概念。

DDoS 本身是「攻擊行為或攻擊型態」,不是惡意軟體。攻擊者確實可能利用惡意軟體感染多部機器,再建立 botnet 發動 DDoS;但感染機器、散播惡意程式只是攻擊前置手段,並非 DDoS 的定義。

校方釋疑也指出,選項 (A) 所描述的惡意軟體可被用來進行 DDoS,但它並沒有定義 DDoS 攻擊本身。

(B) A type of cyber attack that targets an individual user's personal information.

錯誤。

此選項描述的是以個人資料為目標的攻擊,例如竊取帳號、密碼、身分資料或信用卡資訊。其主要影響是資訊機密性與個人隱私。

DDoS 的主要目標則是服務的可用性,重點在於讓伺服器或網路無法正常服務,而不是竊取個人資料。

🔒

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

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

免費註冊

第 26 題2 分

RSA (Rivest Shamir Adleman) is a public-key cryptosystem that is widely used for secure data transmission. In RSA, if the public key (e,N)(e,N) is (5,77)(5,77), the private key (d,N)(d,N) is (9,77)(9,77), and the plaintext is 4, what is the corresponding ciphertext?

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

這一題的完整詳解

核心觀念

RSA 加密使用公開金鑰 (e,N)(e,N),其加密公式為:

C≡Me(modN)C \equiv M^e \pmod N

其中:

  • MM:明文(plaintext)
  • CC:密文(ciphertext)
  • ee:公開指數
  • NN:模數

本題給定:

e=5,N=77,M=4e=5,\qquad N=77,\qquad M=4

因此需計算:

C≡45(mod77)C\equiv 4^5\pmod{77}

解題方法

直接套用 RSA 加密公式:

C≡45(mod77)C\equiv 4^5\pmod{77}

先計算次方:

45=10244^5=1024

再求 10241024 除以 7777 的餘數:

1024=77×13+231024=77\times 13+23

所以:

45≡23(mod77)4^5\equiv 23\pmod{77}

因此密文為:

C=23C=23

快速計算與逐步追蹤

也可使用模運算逐步化簡:

42=164^2=16 44≡162=256≡25(mod77)4^4\equiv 16^2=256\equiv 25\pmod{77}

因為:

256=77×3+25256=77\times 3+25

接著:

45≡44⋅4≡25⋅4=100≡23(mod77)4^5\equiv 4^4\cdot 4 \equiv 25\cdot 4 =100 \equiv 23\pmod{77}

因為:

100=77+23100=77+23

故仍得到:

C=23C=23

此方法屬於模冪運算。若使用快速冪演算法,指數為 ee 時,乘法次數約為 O(log⁡e)O(\log e),額外空間複雜度為 O(1)O(1)。


選項分析

  • (A) 7:錯誤。
    77 不是 454^5 除以 7777 所得的餘數。正確餘數為 2323。
🔒

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

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

免費註冊

第 27 題2 分

Which of the following statements about Big O notation is CORRECT?

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

這一題的完整詳解

核心觀念

Big O notation(大 O 記號)用來描述演算法的漸近成長率,也就是當輸入規模 nn 很大時,演算法的執行時間或記憶體使用量如何成長。

若某演算法的執行時間為

T(n)=3n2+5n+10T(n)=3n^2+5n+10

當 nn 增大時,主導成長的是 n2n^2 項,因此可表示為

T(n)=O(n2)T(n)=O(n^2)

在漸近分析中,會忽略:

  1. 固定的乘法常數,例如 3n23n^2 中的 33。
  2. 較低階的項,例如 5n5n、1010 相對於 n2n^2 的影響。

因此,Big O 主要反映演算法的成長趨勢,不代表實際執行秒數。

解題方法

逐一檢查各選項對 Big O 的描述是否符合定義:

  • Big O 是否表示精確執行時間?
  • Big O 是否只適用於相似演算法?
  • Big O 是否表示最佳情況?
  • Big O 是否忽略常數與低階項?
  • Big O 是否只用於排序問題?

符合 Big O 漸近分析定義的選項,即為正確答案。

選項分析

(A) Big O notation provides the exact running time of an algorithm.

錯誤。

Big O 不提供演算法的精確執行時間,只描述其成長率上界。例如:

T(n)=100n+50T(n)=100n+50

可寫成

T(n)=O(n)T(n)=O(n)

但 O(n)O(n) 並未指出實際需要多少秒,也沒有反映處理器速度、程式語言、編譯器與硬體環境等因素。

因此,Big O 是漸近複雜度表示法,不是精確計時工具。

(B) Big O notation can be used to compare algorithms only if they are similar algorithms.

錯誤。

Big O 可用來比較解決相同問題的不同演算法,即使它們的設計方法完全不同。例如,排序演算法可比較:

  • Bubble Sort:O(n2)O(n^2)
  • Merge Sort:O(nlog⁡n)O(n\log n)
  • Heap Sort:O(nlog⁡n)O(n\log n)

這些演算法的核心機制不同,但仍可透過時間複雜度比較其輸入規模增大時的效率。

嚴格而言,演算法比較通常應建立在「解決相同問題」及「相同輸入條件」上,而不是要求演算法本身相似。

(C) Big O notation provides the best-case running time of an algorithm.

🔒

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

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

免費註冊

第 28 題2 分

What is the difference between a generative and a discriminative model?

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

這一題的完整詳解

核心觀念

本題考查機器學習中 generative model(生成模型) 與 discriminative model(判別模型) 的基本差異。

  • 生成模型:學習資料的機率分布,例如 P(X)P(X) 或聯合機率 P(X,Y)P(X,Y),試圖描述「資料如何生成」。學會分布後,可以進一步產生新資料,或利用貝氏定理進行分類。
  • 判別模型:直接學習類別與輸入資料之間的關係,例如條件機率 P(Y∣X)P(Y\mid X),或直接學習分類所需的決策函數與決策邊界。

在二元分類中,判別模型的決策可表示為:

f(X)={Class 1,f(X)>0Class 2,f(X)≤0f(X)= \begin{cases} \text{Class 1}, & f(X)>0\\ \text{Class 2}, & f(X)\leq 0 \end{cases}

其中 f(X)=0f(X)=0 所形成的分界,即為 decision boundary(決策邊界)。


解題方法

判斷本題的關鍵,是比較兩種模型「主要學習的對象」:

  1. 生成模型先描述資料本身的分布,例如:
P(X∣Y),P(Y),P(X,Y)P(X\mid Y),\quad P(Y),\quad P(X,Y)

接著可透過貝氏定理求得:

P(Y∣X)=P(X∣Y)P(Y)P(X)P(Y\mid X)=\frac{P(X\mid Y)P(Y)}{P(X)}

因此,生成模型著重於學習資料的生成機制與機率分布。

  1. 判別模型直接根據輸入 XX 判斷輸出類別 YY,學習:
P(Y∣X)P(Y\mid X)

或直接學習分類函數、類別分界與決策邊界。

所以,選項 (A) 所描述的差異正確。


選項分析

(A) 正確

A generative model learns the underlying probability distribution of the data, while a discriminative model learns the decision boundary between classes.

生成模型學習資料背後的機率分布,例如 P(X,Y)P(X,Y) 或 P(X∣Y)P(X\mid Y);判別模型直接學習如何區分類別,常表現為學習 P(Y∣X)P(Y\mid X) 或決策邊界。

此敘述符合兩者的核心定義,故為正確答案。

常見例子如下:

  • 生成模型:Naive Bayes、Gaussian Mixture Model、Hidden Markov Model、Variational Autoencoder、Generative Adversarial Network
  • 判別模型:Logistic Regression、Support Vector Machine、一般分類用途的 Neural Network

(B) 錯誤

🔒

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

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

免費註冊

第 29 題2 分

ChatGPT is a large-scale language model trained by OpenAI, which is mainly trained to understand and generate natural language. Which of the following statements about ChatGPT is CORRECT?

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

這一題的完整詳解

核心觀念

本題考查 ChatGPT 與 GPT(Generative Pre-trained Transformer)的訓練方式、模型架構,以及對多輪對話上下文的處理方法。

四個主要觀念如下:

  1. ChatGPT 曾經使用微調(fine-tuning)。
  2. ChatGPT 會利用先前對話內容維持上下文。
  3. GPT 是建立在 Transformer 架構上。
  4. ChatGPT 的訓練流程包含監督式學習(supervised learning)。

因此,若 A~D 皆正確,選項 E「All of the above」即為正確答案。


解題方法

本題不是計算題,而是逐一判斷 ChatGPT 的技術特徵。判斷重點在於區分:

  • 預訓練(pre-training)
  • 微調(fine-tuning)
  • 監督式學習(supervised learning)
  • 強化學習(reinforcement learning)
  • Transformer 模型架構
  • 對話上下文(conversation context)

只要確認 A、B、C、D 均可成立,即可選 E。


選項分析

(A) ChatGPT has used fine-tuning.

正確。

ChatGPT 的訓練流程包含微調。一般流程可概括為:

  1. 預訓練:利用大量文字資料,學習預測下一個詞,建立語言理解與生成能力。
  2. 監督式微調:使用人工撰寫的高品質問答範例,使模型學習較符合人類期待的回答方式。
  3. 人類回饋強化學習(RLHF):根據人類對回答品質的評分,進一步調整模型行為。

因此,ChatGPT 確實使用了 fine-tuning,A 正確。


(B) It handles context through a history of previous conversation turns.

正確。

在多輪對話中,系統通常會將先前的對話內容放入模型輸入,使模型能夠根據前文理解代名詞、省略內容與延續問題。

例如:

  • 使用者:台北是台灣的首都嗎?
  • 使用者:那裡的人口大約多少?

第二句中的「那裡」需要參考前一輪的「台北」,才能正確理解。這就是透過先前對話紀錄處理上下文。

需要注意的是,這種上下文主要來自當次對話中所提供的歷史內容,並不等同於模型永久記住所有使用者過去的對話。因此,B 所描述的機制仍然正確。


(C) The GPT model is developed based on the Transformer architecture.

正確。

GPT 中的 Transformer 是模型的核心架構。Transformer 使用注意力機制(attention mechanism),特別是自注意力(self-attention),分析輸入文字中不同詞語之

🔒

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

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

免費註冊

第 30 題2 分

Which of the following statements about ROC curve and AUC is INCORRECT?

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

這一題的完整詳解

核心觀念

ROC(Receiver Operating Characteristic)曲線用來評估二元分類模型在不同分類門檻下的表現:

  • 縱軸:真正率(True Positive Rate, TPR),又稱敏感度(Sensitivity)或召回率(Recall)
TPR=TPTP+FN\mathrm{TPR}=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}
  • 橫軸:假陽性率(False Positive Rate, FPR)
FPR=FPFP+TN=1−Specificity\mathrm{FPR}=\frac{\mathrm{FP}}{\mathrm{FP}+\mathrm{TN}} =1-\mathrm{Specificity}

隨著分類門檻改變,模型會產生一系列 (FPR,TPR)(\mathrm{FPR},\mathrm{TPR}) 座標,連結後即為 ROC 曲線。

AUC(Area Under the Curve)是 ROC 曲線下面積,用一個數值概括模型在所有分類門檻下的整體區分能力:

  • AUC=1AUC=1:完美分類。
  • AUC=0.5AUC=0.5:與隨機猜測相當。
  • AUC<0.5AUC<0.5:模型的預測方向傾向與真實類別相反。

解題方法

本題問的是「INCORRECT」,也就是找出錯誤敘述。

判斷重點在於 AUC<0.5AUC<0.5 的意義。若模型預測結果與真實類別呈現穩定反向關係,只要將模型輸出反轉,原本的錯誤方向即可變成正確方向。理想情況下,反轉後的 AUC 約為:

AUC反轉=1−AUC原模型AUC_{\text{反轉}}=1-AUC_{\text{原模型}}

例如:

AUC=0.2⇒AUC反轉=1−0.2=0.8AUC=0.2 \quad\Rightarrow\quad AUC_{\text{反轉}}=1-0.2=0.8

因此,AUC<0.5AUC<0.5 並不代表模型「在任何方面都不會比隨機預測好」,而是表示模型可能具有反向預測能力。


選項分析

(A) Usually, the y-axis is the true positive rate.

正確。

ROC 曲線通常以真正率 TPR 為縱軸,以假陽性率 FPR 為橫軸。因此,選項所述符合 ROC 曲線的標準定義。


(B) AUC is used as an indicator of the quality of the model.

正確。

AUC 可衡量模型在所有分類門檻下的整體區分能力,因此常被用來作為分類模型品質的指標。

AUC 越接近 11,通常代表模型越能區分正類與負類;AUC 接近 0.50.5,代表模型缺乏區分能力。


🔒

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

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

免費註冊

第 1 題10 分

In a disk scheduling system with 100 tracks indexed from 0 to 99, there are three track access requests: 1, 45, and 15, arriving in this sequence. Suppose that the disk head is currently positioned at track 24 and moving towards track 99, please use the following algorithms to calculate the total distance that the disk arm will move.

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

這一題的完整詳解

核心觀念

本題考查磁碟排程(disk scheduling)中的:

  • SCAN(Elevator)演算法
  • C-SCAN(Circular SCAN)演算法
  • 磁碟磁頭移動距離的計算

磁碟共有 100 條磁道,編號為 00 至 9999。磁頭目前位於第 2424 條磁道,且正朝向較大的磁道編號移動;待處理請求為:

1, 45, 151,\ 45,\ 15

磁頭移動距離的計算公式為:

總移動距離=∑∣相鄰兩次磁頭位置之差∣\text{總移動距離} = \sum \left|\text{相鄰兩次磁頭位置之差}\right|

請求的到達順序對 SCAN 與 C-SCAN 的主要移動方向不具決定性,因為兩種演算法都是依照磁頭目前移動方向與磁道位置處理請求,而非單純按照到達順序處理。


解題方法

目前磁頭位於 2424,向 9999 方向移動。

因此:

  • 位於右側、尚未處理的請求:4545
  • 位於左側的請求:15、115、1

磁頭會先向右處理 4545,再依演算法規則處理左側請求。


(A) SCAN(Elevator)演算法

SCAN 的運作方式如同電梯:

  1. 磁頭沿目前方向移動。
  2. 處理該方向上的請求。
  3. 到達該方向端點後反向移動。
  4. 反向時處理另一側的請求。

本題的移動路徑為:

24→45→99→15→124 \rightarrow 45 \rightarrow 99 \rightarrow 15 \rightarrow 1

各段移動距離如下:

第 1 段:24→4524 \rightarrow 45

45−24=2145-24=21

第 2 段:45→9945 \rightarrow 99

99−45=5499-45=54

第 3 段:99→1599 \rightarrow 15

磁頭反向後,經過第 1515 條磁道:

99−15=8499-15=84

第 4 段:15→115 \rightarrow 1

繼續反向移動並處理第 11 條磁道:

15−1=1415-1=14

因此總移動距離為:

21+54+84+14=17321+54+84+14=173

所以:

SCAN 總移動距離=173 tracks\boxed{\text{SCAN 總移動距離}=173\text{ tracks}}

(B) C-SCAN(Circular SCAN)演算法

C-SCAN 的運作方式為:

  1. 磁頭只沿一個方向處理請求。
  2. 到達磁碟末端後,直接移動到另一端。
  3. 從另一端重新沿原方向處理請求。
  4. 回到起點的過程不處理請求,但仍須計入磁頭移動距離。

本題磁頭固定向較大的磁道編號移動,因此路徑為:

24→45→99→0→1→1524 \rightarrow 45 \rightarrow 99 \rightarrow 0 \rightarrow 1 \rightarrow 15

第 1 段:24→4524 \rightarrow 45

45−24=2145-24=21

第 2 段:45→9945 \rightarrow 99

99−45=5499-45=54

第 3 段:99→099 \rightarrow 0

C-SCAN 從磁碟末端回到起始端:

99−0=9999-0=99

這一段即使沒有服務任何請求,也必須計入總移動距離。校方釋疑公告所說的「to the beginning of the disk without servicing the return trip」正是此意義。

第 4 段:0→10 \rightarrow 1

1−0=11-0=1

第 5 段:1→151 \rightarrow 15

15−1=1415-1=14

因此總移動距離為:

21+54+99+1+14=18921+54+99+1+14=189
🔒

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

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

免費註冊

第 2 題10 分

Given the block diagram of a 2-to-4 decoder with enable, design a 1-to-16 demultiplexer (DeMUX) with one input signal II, four selection signals from S0S_0 to S3S_3, and sixteen output signals from O0O_0 to O15O_{15} by using block diagrams of 2-to-4 decoder.

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

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 11 頁
校方公布看官方參考答案 ▾
官方參考答案A校方公布

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

這一題的完整詳解

核心觀念

本題考查:

  • 22-to-44 decoder 的解碼功能。
  • Enable(En)控制端的使用方式。
  • 以兩層解碼器組合出 11-to-1616 demultiplexer。
  • Demultiplexer 的功能是:由四條選擇線決定輸入訊號 II 被送到哪一條輸出線,其餘輸出為 00。

題圖中的 22-to-44 decoder 具有:

  • 選擇輸入:A,BA,B
  • 致能輸入:EnEn
  • 輸出:Y0,Y1,Y2,Y3Y_0,Y_1,Y_2,Y_3

假設 Enable 為高電位有效,decoder 的輸出為高電位有效。


解題方法

11-to-1616 DeMUX 有四條選擇訊號,因此可分成兩組:

  • 高位選擇訊號:S3,S2S_3,S_2
  • 低位選擇訊號:S1,S0S_1,S_0

需要使用:

  • 第 11 層:11 個 22-to-44 decoder
  • 第 22 層:44 個 22-to-44 decoder

總共使用 55 個 decoder。

第一層 decoder 用來解碼高兩位選擇訊號:

A=S3,B=S2,En=1A=S_3,\qquad B=S_2,\qquad En=1

其四個輸出分別控制第二層四個 decoder 的 Enable:

Y0→En0,Y1→En1,Y2→En2,Y3→En3Y_0\rightarrow En_0,\quad Y_1\rightarrow En_1,\quad Y_2\rightarrow En_2,\quad Y_3\rightarrow En_3

第二層的四個 decoder 都接收:

A=S1,B=S0A=S_1,\qquad B=S_0

輸入訊號 II 接至每個第二層 decoder 的 Enable 端。如此一來,只有被高兩位選中的 decoder 會被啟用,且輸入 II 會被送至該 decoder 所選定的輸出。


輸出配置

第一層輸出決定哪一組輸出被啟用:

S3S2S_3S_2被啟用的第二層 decoder輸出範圍
0000Decoder 0O0∼O3O_0\sim O_3
0101Decoder 1O4∼O7O_4\sim O_7
1010Decoder 2O8∼O11O_8\sim O_{11}
1111Decoder 3O12∼O15O_{12}\sim O_{15}

第二層再利用 S1S0S_1S_0 選擇該組中的一條輸出:

S1S0S_1S_0該組選出的輸出
0000第 00 條
0101第 11 條
1010第 22 條
1111第 33 條

例如:

  • S3S2=00S_3S_2=00、S1S0=00S_1S_0=00,則 II 送至 O0O_0。
  • S3S2=01S_3S_2=01、S1S0=10S_1S_0=10,則 II 送至 O6O_6。
  • S3S2=10S_3S_2=10、S1S0=11S_1S_0=11,則 II 送至 O11O_{11}。
  • S3S2=11S_3S_2=11、S1S0=01S_1S_0=01,則 II 送至 O13O_{13}。

一般化表示為:

O4k+j=IO_{4k+j}=I

其中

k=2S3+S2,j=2S1+S0k=2S_3+S_2,\qquad j=2S_1+S_0

其餘輸出皆為 00。


文字方塊圖

第一層:

🔒

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

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

免費註冊

第 3 題10 分

For an AI prediction model of a specified disease, its confusion matrix is as follows.

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

(Show the result with percentage, e.g. 0.78256 should be stated as 78.26%.)

True Positive (TP): 400

False Positive (FP): 200

False Negative (FN): 100

True Negative (TN): 2300

本題附圖正在準備中,以下為原卷對應頁面:
原卷第 11 頁

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

這一題的完整詳解

核心觀念

本題考查分類模型混淆矩陣(confusion matrix)及其評估指標:

  • TP(True Positive):實際有病,模型判定有病
  • FP(False Positive):實際無病,模型誤判有病
  • FN(False Negative):實際有病,模型誤判無病
  • TN(True Negative):實際無病,模型判定無病

總樣本數為:

TP+FP+FN+TN=400+200+100+2300=3000TP+FP+FN+TN=400+200+100+2300=3000

解題方法與計算

(A) Precision

Precision 表示「模型判定為陽性的樣本中,真正為陽性的比例」:

Precision=TPTP+FP=400400+200=400600=0.6667\text{Precision}=\frac{TP}{TP+FP} =\frac{400}{400+200} =\frac{400}{600} =0.6667

因此:

Precision=66.67%\boxed{\text{Precision}=66.67\%}

(B) Recall

Recall 又稱敏感度(Sensitivity),表示「所有實際陽性樣本中,被模型正確找出的比例」:

Recall=TPTP+FN=400400+100=400500=0.8\text{Recall}=\frac{TP}{TP+FN} =\frac{400}{400+100} =\frac{400}{500} =0.8

因此:

Recall=80.00%\boxed{\text{Recall}=80.00\%}

(C) Accuracy

Accuracy 表示「所有樣本中,模型正確分類的比例」:

Accuracy=TP+TNTP+FP+FN+TN=400+23003000=27003000=0.9\text{Accuracy} =\frac{TP+TN}{TP+FP+FN+TN} =\frac{400+2300}{3000} =\frac{2700}{3000} =0.9

因此:

Accuracy=90.00%\boxed{\text{Accuracy}=90.00\%}

這也是官方答案所指定的 C。因為正確分類的樣本包括 TP 與 TN,故分子為 400+2300400+2300;分母則為全部樣本數 30003000。

(D) Specificity

Specificity 表示「所有實際陰性樣本中,被模型正確判定為陰性的比例」:

Specificity=TNTN+FP=23002300+200=23002500=0.92\text{Specificity}=\frac{TN}{TN+FP} =\frac{2300}{2300+200} =\frac{2300}{2500} =0.92

因此:

Specificity=92.00%\boxed{\text{Specificity}=92.00\%}

(E) F1 score

🔒

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

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

免費註冊

第 4 題10 分

What will be shown on the screen after running the following program? (10%)

int main() {
char s[] = "01234";
char *p = s;
printf ("%c", *p++);
printf ("%c", *++p);
printf ("%c", *(++p));
printf ("%c", *(p++));
printf ("%c", (*p)++);
}

校方公布看官方參考答案 ▾
官方參考答案D校方公布

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

這一題的完整詳解

核心觀念

本題考查 C 語言中:

  • 指標遞增運算 p++ 與 ++p 的差異
  • 解參照運算子 *
  • 後置遞增 (*p)++ 的作用
  • 陣列與指標的對應關係
  • printf("%c", ...) 輸出字元

陣列內容為:

索引01234
s'0''1''2''3''4'

一開始:

char *p = s;

因此 p 指向 s[0]。


解題方法與逐步追蹤

逐行判斷「先取值還是先移動指標」,並記錄 p 所指向的位置。

程式碼執行效果輸出執行後 p
printf("%c", *p++);先取出 *p,再令 p 後移s[0] = '0'指向 s[1]
printf("%c", *++p);先令 p 前移,再取出 *ps[2] = '2'指向 s[2]
printf("%c", *(++p));先令 p 前移,再解參照s[3] = '3'指向 s[3]
printf("%c", *(p++));先取出目前內容,再令 p 後移s[3] = '3'指向 s[4]
printf("%c", (*p)++);先取出 *p,再將該字元遞增s[4] = '4'仍指向 s[4]

因此五次輸出依序為:

0→2→3→3→40 \rightarrow 2 \rightarrow 3 \rightarrow 3 \rightarrow 4

畫面顯示:

02334
🔒

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

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

免費註冊

其他考古題

112 年高雄醫學大學的其他科目

高雄醫學大學《計算機概論與程式設計》其他年度

其他學校的《計算機概論與程式設計》