高雄醫學大學 111 年 《計算機概論與程式設計》
第 1 題2 分
Which one of the following algorithms is NOT a symmetric algorithm?
(A) DES
(B) AES
(C) Caesar Cipher
(D) RSA
(E) Playfair Cipher
登入後即可作答並保存紀錄。
核心觀念
本題考查**對稱式加密(symmetric encryption)與非對稱式加密(asymmetric encryption)**的分類。
1. 對稱式加密
對稱式加密使用同一把秘密金鑰進行加密與解密:
其中:
- :明文(Plaintext)
- :密文(Ciphertext)
- :共享秘密金鑰
- :使用金鑰 加密
- :使用金鑰 解密
加密者與解密者必須事先安全地共享金鑰。其特點是速度快,適合大量資料加密,但金鑰配送與管理較困難。
2. 非對稱式加密
非對稱式加密使用一對不同的金鑰:
- 公開金鑰(Public Key)
- 私密金鑰(Private Key)
公開金鑰可公開,私密金鑰必須保密。以保密傳輸為例:
這兩把金鑰在數學上相關,但不能視為同一把共享秘密金鑰。RSA 即屬於非對稱式加密演算法。
解題方法
判斷各選項所屬的加密類型即可:
- DES:對稱式分組加密。
- AES:對稱式分組加密。
- Caesar Cipher:使用同一個位移量加密與解密,屬於對稱式加密。
- RSA:使用公開金鑰與私密金鑰,屬於非對稱式加密。
- Playfair Cipher:使用同一個密鑰方格進行加密與解密,屬於對稱式加密。
因此,不是對稱式演算法的是 RSA。
選項分析
(A) DES
DES(Data Encryption Standard)是對稱式分組加密演算法。
DES 將資料切成固定大小的區塊,使用同一把秘密金鑰進行加密與解密。其核心架構為 Feistel network,標準金鑰長度為 56 位元。
因此,DES 是對稱式演算法,選項正確但不是本題答案。
(B) AES
AES(Advanced Encryption Standard)是對稱式分組加密演算法。
AES 使用相同的秘密金鑰進行加密與解密,支援 128、192、256 位元金鑰長度,資料區塊大小固定為 128 位元。
因此,AES 是對稱式演算法,選項正確但不是本題答案。
(C) Caesar Cipher
Caesar Cipher(凱薩密碼)是古典的對稱式替換加密法。
假設英文字母以 到 編號,加密位移量為 ,則:
解密時使用相反方向的位移:
加密與解密所使用的是同一個位移密鑰 ,因此屬於對稱式加密。
第 2 題2 分
Ping is a computer network administration utility used to test the reachability of a host on the Internet. Ping is implemented by which of the following protocols?
(A) IGMP
(B) XMPP
(C) RCTP
(D) ICMP
(E) SIP
登入後即可作答並保存紀錄。
核心觀念
本題考「ping 工具所使用的網路協定」。
ping 用來測試目的主機是否可達,以及估算封包往返時間。其運作機制是:
- 本機送出 ICMP Echo Request。
- 目的主機收到後回傳 ICMP Echo Reply。
- 本機根據回覆封包計算往返時間(Round-Trip Time, RTT),並判斷封包是否遺失。
因此,ping 使用的是 ICMP(Internet Control Message Protocol,網際網路控制訊息協定)。
ICMP 位於網路層,通常搭配 IP 使用;它不像 TCP 或 UDP 一樣透過連接埠(port)傳輸應用程式資料。
解題方法
看到題目問「Ping implemented by which protocol」,直接聯想到 ICMP 的兩種訊息:
- Echo Request:回應請求
- Echo Reply:回應封包
其基本流程可表示為:
若主機 B 成功回覆,主機 A 便可確認目的地具有網路可達性,並計算:
所以正確協定為 ICMP。
選項分析
(A) IGMP
IGMP(Internet Group Management Protocol,網際網路群組管理協定)用於管理主機與 IPv4 多播群組之間的關係,例如:
- 主機加入多播群組
- 主機離開多播群組
- 路由器查詢群組成員
IGMP 的用途是多播群組管理,不是測試單一主機是否可達,因此錯誤。
第 3 題2 分
For a specific CPU design, there are three instruction classes as depicted in Table 1 and run at a clock rate of 100 MHz.
Table 1 CPU Design
| Instruction Class | A | B | C |
|---|---|---|---|
| CPI | 1 | 3 | 2 |
For a given program, a compiler can produce the following executed instruction counts as depicted in Table 2. Please calculate the average CPI of this compiler.
Table 2 Given Program
| Instruction Class | A | B | C |
|---|---|---|---|
| Instruction Counts | 10 | 1 | 1 |
(A) 4
(B) 2
(C) 1.25
(D) 0.5
(E) All of the above are wrong.
登入後即可作答並保存紀錄。
核心觀念
本題考查 平均 CPI(Average Cycles Per Instruction) 的計算。
CPI 是每一類指令平均需要的時脈週期數。由於不同指令類別的 CPI 不同,平均 CPI 必須按照各類別的實際執行次數加權平均:
其中:
題目給出的 時脈率,是計算程式執行時間時使用的資訊;計算平均 CPI 時不需要使用。
解題方法
各類指令的執行資訊如下:
| 指令類別 | CPI | 執行次數 | 所需時脈週期 |
|---|---|---|---|
| A | 1 | 10 | |
| B | 3 | 1 | |
| C | 2 | 1 |
因此,總指令數為:
總時脈週期數為:
平均 CPI 為:
所以正確選項為 (C)。
選項分析
- (A) 4:錯誤。
並非依據加權平均公式計算出的平均 CPI,也不是各類 CPI 的正確合併結果。
第 4 題2 分
Which one MAX_VALUE of primitive data type in C is greater than others?
(A) int
(B) unsigned int
(C) signed int
(D) double
(E) long
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言基本資料型態的「可表示最大值」以及整數型態與浮點型態的差異。
主要比較:
int:有號整數signed int:與int相同unsigned int:無號整數long:長整數,通常為有號整數double:雙精度浮點數,可表示非常大的數值
在一般 C 語言實作與考試常見環境中:
- 整數型態的最大值通常落在 或 的量級。
double的最大有限值約為 。
因此,double 的最大可表示值遠大於其他選項。
解題方法
先區分資料型態:
1. 整數型態
對一個使用 位元儲存的有號整數,通常有 位元作為符號位元,因此最大值為:
對相同位元數的無號整數,所有位元皆用於表示數值,最大值為:
所以在位元數相同時:
2. 浮點型態
double 通常採用 IEEE 754 雙精度格式,使用:
- 1 位元符號位元
- 11 位元指數欄位
- 52 位元有效數字欄位
其最大有限值約為:
這個數值遠超過一般整數型態的最大值。
例如常見的 64 位元 long 最大值為:
比較數量級:
所以最大值最大的是 double。
選項分析
(A) int
int 是有號整數型態。
若 int 使用 32 位元,最大值為:
即約為:
小於 double 的最大值,因此錯誤。
(B) unsigned int
unsigned int 是無號整數型態。若使用 32 位元,最大值為:
雖然它比同樣位元數的 int 大,但仍只有約 ,遠小於 double 約 的
第 5 題2 分
Unsupervised learning is a type of algorithm that learns patterns from untagged data. Which of the following learning techniques is an unsupervised learning technique?
登入後即可作答並保存紀錄。
核心觀念
機器學習依訓練資料是否具有標籤,可分為:
- 監督式學習(Supervised Learning):訓練資料包含輸入資料與正確答案標籤,模型學習輸入與輸出之間的關係,常見任務為分類與迴歸。
- 非監督式學習(Unsupervised Learning):訓練資料沒有標籤,模型自行從資料中找出群組、結構或分布特徵,常見任務為分群與降維。
本題問的是「從未標記資料中學習模式」的技術,因此應判斷各選項是否屬於非監督式學習。
解題方法
逐一判斷各演算法的訓練方式:
- 是否需要事先提供正確答案標籤?
- 主要用途是分類、迴歸,還是分群?
- 是否由模型自行發現資料中的群組結構?
其中,若演算法將資料分成數個群組,且不需要事先知道每筆資料所屬類別,通常就是非監督式學習。
選項分析
(A) Decision tree
Decision tree(決策樹)通常是監督式學習方法。
在分類問題中,決策樹利用具有標籤的訓練資料,依據特徵切分資料。例如,根據體溫、咳嗽與年齡等特徵,判斷病人是否感染某種疾病。每筆訓練資料都必須有已知答案,模型才能學習切分規則。
決策樹也可用於迴歸問題,同樣需要已知的目標值。因此本選項不符合題目所問的非監督式學習。
(B) K-means clustering
K-means clustering(K 平均分群)是典型的非監督式學習方法,故為正確答案。
K-means 不需要資料標籤,只需指定欲分成的群數 。演算法會依據資料點之間的距離,自動將相似資料分到同一群。
基本流程如下:
- 指定群數 。
- 隨機選取 個初始群中心。
- 將每筆資料分配至距離最近的群中心。
- 分別計算每一群資料的平均值,更新群中心。
- 重複步驟 3 與步驟 4,直到群組分配穩定或群中心變化很小。
其最佳化目標通常是最小化群內平方距離:
其中:
- :群組數量
- :第 群的資料集合
- :第 群的中心
- :資料點與群中心之間的平方距離
因為訓練資料不需要預先提供類別標籤,而是由演算法自行找出資料群組,所以 K-means 屬於非監督式學習。
第 6 題2 分
Given a prefix expression “+ + (9) × (8) (7) × + × (6) (5) (4) (3)”, please calculate the result.
登入後即可作答並保存紀錄。
核心觀念
本題考「前序表示法」(prefix expression,也稱 Polish notation)。
前序表示法的規則是:
- 運算子寫在運算元之前。
- 本題所有運算子皆為二元運算子。
- 每個運算子必須搭配其後的兩個完整子運算式。
- 符號 表示乘法,符號 表示加法。
題目中的前序式為:
解題方法
由最外層的第一個 開始解析:
左子式從第二個 開始:
因此:
右子式為:
先解析其中的加法子式:
其結果為:
再乘以 :
最後計算最外層加法:
所以完整的中序表示為:
逐步追蹤(Trace)
也可以由右至左掃描前序式,遇到運算元就放入堆疊,遇到運算子就取出最靠近的兩個值計算:
| 掃描內容 | 動作 | 堆疊結果 |
|---|---|---|
| 放入 | ||
| 放入 | ||
| 放入 | ||
| 放入 | ||
第 7 題2 分
Which type of memory or storage components has the shortest response time?
登入後即可作答並保存紀錄。
核心觀念
本題考查電腦儲存階層(memory hierarchy)中,各類記憶體或儲存裝置的存取速度與反應時間。
一般而言,距離 CPU 越近、容量越小、成本越高的儲存元件,反應時間越短。由快至慢可排列為:
此處的「反應時間」可理解為 CPU 或系統提出資料需求後,元件開始提供資料所需的時間,也就是存取延遲(access latency)。
解題方法
判斷此題時,依據各元件與 CPU 的距離及其硬體功能進行比較:
- Processor registers 位於 CPU 內部,直接供算術邏輯單元與控制單元使用。
- CPU cache 位於 CPU 內部或緊鄰 CPU,但仍須經由快取控制機制搜尋資料。
- Main memory 通常指 RAM,位於 CPU 外部,需透過記憶體匯流排存取。
- Solid-state drive 使用非揮發性快閃記憶體,需經由儲存控制器與輸入輸出介面存取。
- Floppy disk drive 使用機械式磁碟與讀寫磁頭,機械移動造成很大的延遲。
因此,反應時間最短的是直接位於 CPU 內部的處理器暫存器。
選項分析
(A) Main memory
Main memory 主要是 RAM,用於存放目前執行中的程式與資料。它的速度比 SSD 與軟碟快,但位於 CPU 外部,CPU 必須透過記憶體控制器與匯流排存取,因此反應時間長於 CPU 內部的暫存器。
所以此選項錯誤。
(B) CPU cache
CPU cache 使用速度較快的記憶體技術,存放 CPU 最近使用或預測即將使用的資料,以減少存取主記憶體的次數。
雖然快取比主記憶體快,但 CPU 仍須依照快取階層進行標籤比對與資料搜尋。處理器暫存器直接位於 CPU 的運算路徑中,存取時間通常更短。
所以此選項錯誤。
(C) Processor registers
第 8 題2 分
Given a C code as follows, which random range initializes the array myList?
for (int i = 0; i < ARRAY_SIZE; i++)
{
myList[i] = rand() % 100;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言中:
rand產生的亂數範圍。%(取餘數)運算子的結果範圍。- 迴圈如何將亂數依序存入陣列。
在 C 語言中,rand 會產生介於 與 RAND_MAX 之間的非負整數:
本題的指定運算為:
rand % 100
對任何非負整數取 的餘數,結果只能是:
因此,myList[i] 的亂數範圍為 到 。
解題方法
令:
則:
r % 100
代表 除以 後的餘數。根據餘數定義:
因為餘數必須小於除數 ,所以:
程式會將這些數值依序指定給:
myList[0], myList[1], ..., myList[ARRAY_SIZE - 1]
因此陣列中的每個元素都會被初始化為 到 之間的整數。
程式逐步追蹤(Trace)
假設某次執行時,rand 依序產生下列數值:
rand 的結果 | 計算 | myList[i] 的值 |
|---|---|---|
| 135 | 35 | |
| 802 | 2 | |
| 99 | 99 | |
| 1000 | 0 |
可見結果包含 ,也包含 ,但不會出現 。
程式中的迴圈:
for (int i = 0; i < ARRAY_SIZE; i++)
{
myList[i] = rand % 100;
}
其執行流程為:
i=0,將一個 的亂數存入myList[0]。i=1,將一個 的亂數存入myList[1]。- 持續執行至
i=ARRAY_SIZE-1。
第 9 題2 分
Which one of the following sections is shared by the threads in the same multithreaded process?
登入後即可作答並保存紀錄。
核心觀念
本題考查「多執行緒行程(multithreaded process)」的記憶體配置與資源共享方式。
同一個 process 內可以包含多個 threads。這些 threads 通常共享 process 的資源,但每個 thread 仍須保有自己的執行狀態,才能獨立執行。
典型區分如下:
| 資源或區段 | 同一 process 內的 threads 是否共享 |
|---|---|
| Code section | 共享 |
| Data section | 共享 |
| Heap | 通常共享 |
| Stack | 不共享,各 thread 擁有自己的 stack |
| Registers | 不共享,各 thread 擁有自己的 registers |
| Program counter | 不共享,各 thread 擁有自己的 program counter |
解題方法
判斷本題可採用「process 共用資源、thread 個別執行狀態」的切入方式。
同一個 process 中的 threads:
- 共同執行同一份程式,因此共享 code section。
- 各自可能執行到不同指令,因此必須擁有自己的 program counter。
- 各自需要保存不同的暫存資料,因此必須擁有自己的 registers。
- 各自擁有函式呼叫與區域變數所需的執行堆疊,因此通常各自擁有自己的 stack。
- 動態配置的記憶體通常位於 heap,同一 process 內的 threads 可以共同存取。
依本題官方公布答案,命題者欲測驗的標準答案是「threads 共享同一份程式碼」,因此選擇 (A) code。
選項分析
(A) code:正確
Code section 儲存程式的指令內容。同一個 process 中的多個 threads 通常執行同一份程式碼,因此共享相同的 code section。
例如,一個 process 中有多個 threads 執行同一個函式,各 thread 可以位於該函式的不同執行位置,但所使用的指令仍來自同一份 code。
因此依官方答案,(A) 為正確選項。
(B) registers:錯誤
Registers 用來保存 thread 當下執行所需的資料,例如:
- 運算中的暫存值
- 函式參數
- 暫存器位址
- 執行狀態資訊
每個 thread 必須有自己的 registers 狀態。若所有 threads 共用同一組 registers,thread 切換時就無法保存各自的執行進度。
第 10 題2 分
Given a C code as follows, which one of the following is the return value of f(12, -20)?
int f(int a, int b)
{
return a - ((a - b) & ((a - b) >> 31));
}
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- C 語言的整數減法
- 位元運算
& - 有號整數右移
>> - 二補數表示法
- 位元技巧判斷兩數大小
在一般考試所採用的 32 位元整數、二補數系統中:
- 正整數右移 31 位後為
x & 0的結果一定為
解題方法與逐步追蹤
題目函式為:
int f(int a, int b)
{
return a - ((a - b) & ((a - b) >> 31));
}
代入 、。
先計算:
因此原式變為:
return 12 - (32 & (32 >> 31));
將 寫成二進位:
因為 是正數,右移 31 位後:
所以:
最後:
因此正確選項為:
這段程式的位元意義
令:
在 32 位元二補數系統中:
- 若 ,則
- 若 ,則 ,其二進位通常為全
因此:
- 時,,函式回傳
- 時,,函式回傳
本題中:
因此函式回傳較大的數 。這也是官方答案為 D 的原因。
選項分析
- (A) -32:錯誤
第 11 題2 分
Consider the following C code. Please indicate the values of and after execution.
int a = 10, b = 5;
int x, y;
x = (a++) + (a++) + (b++);
y = (++a) + (++a) + (++b);
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的:
- 後置遞增運算子
a++、b++ - 前置遞增運算子
++a、++b - 遞增運算後,變數值如何改變
- 運算式中各項的計算與累加
定義如下:
a++:先取出a的原值參與運算,再將a加 。++a:先將a加 ,再以新值參與運算。
依本題官方答案採用的命題慣例,將同一行的運算項依由左至右順序追蹤。
解題方法與逐步追蹤
初始值為:
一、計算
程式碼為:
x = (a++) + (a++) + (b++);
依序計算:
| 運算項 | 參與運算的值 | 運算後變數值 |
|---|---|---|
第一個 a++ | ||
第二個 a++ | ||
b++ |
因此:
執行完第一行後:
二、計算
程式碼為:
y = (++a) + (++a) + (++b);
此時從 、 開始。
依序計算:
| 運算項 | 先遞增後取值 | 運算後變數值 |
|---|---|---|
第一個 ++a | ||
第二個 ++a | ||
++b |
因此:
最後結果為:
第 12 題2 分
Which one is the actual execution order of the following statements in SQL?
[1] SELECT [DISTINCT]
[2] FROM
[3] WHERE
[4] GROUP BY
[5] ORDER BY
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的「邏輯查詢處理順序」。SQL 語句的書寫順序,與資料庫處理查詢時的邏輯順序不同。
題目列出的各階段,在一般考試規範下可排列為:
各階段功能如下:
- FROM:決定資料來源,建立初步資料集合。
- WHERE:篩選資料列,移除不符合條件的 records。
- GROUP BY:依指定欄位分組,形成群組。
- SELECT [DISTINCT]:決定輸出哪些欄位;
DISTINCT負責去除重複結果。 - ORDER BY:將最後產生的結果排序。
因此,官方答案為 (B)。
解題方法
判斷 SQL 邏輯處理順序時,可依「資料由來源逐步變成最後輸出」的流程思考:
第一步:先決定資料從哪裡來
必須先執行 FROM,才能知道要查詢哪些資料表。
FROM Student
此時資料庫先取得 Student 資料表的資料。
第二步:篩選資料列
接著執行 WHERE,只保留符合條件的資料。
WHERE score >= 60
此條件會先排除不及格資料,因此後續分組只針對篩選後的資料進行。
第三步:進行分組
若查詢包含 GROUP BY,資料會依指定欄位分成不同群組。
GROUP BY department
例如依系所分組後,才能計算各系所的平均成績、筆數或總和。
第四步:決定輸出欄位
SELECT 負責指定最後要顯示的欄位或運算結果。
SELECT department, AVG(score)
此時才形成查詢結果的欄位內容。若使用 DISTINCT,還會去除重複的輸出列。
第五步:排序最後結果
ORDER BY 通常作用在已經產生的結果上。
ORDER BY AVG(score) DESC
因此排序位於最後。
綜合以上流程:
對應選項為 (B)。
範例說明
考慮以下 SQL:
SELECT department, AVG(score) AS average_score
FROM Student
WHERE score >= 60
GROUP BY department
ORDER BY average_score DESC;
其邏輯處理流程如下:
- 從
Student資料表取得資料。 - 保留
score >= 60的資料列。 - 依
department分組。 - 對每組計算
AVG(score),並輸出department與平均分數。 - 按照
average_score由大到小排序。
若將 SELECT 放在 FROM 之前理解,便無法正確說明資料來源、篩選與分組的先後關係。
選項分析
(A) SELECT, WHERE, GROUP BY, FROM, ORDER BY
錯誤。
第 13 題2 分
Given a binary tree as follows, please indicate the result of pre-order traversal.
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查二元樹的前序走訪(pre-order traversal)。
前序走訪順序固定為:
每個節點都依照「先訪問自己,再完整走訪左子樹,最後走訪右子樹」的規則處理。
解題方法
依圖可讀出二元樹結構:
- 根節點為
- 的左子樹根為 ,右子樹根為
- 的左子節點為 ,右子節點為
- 的右子節點為
- 的左、右子節點分別為 、
- 的左子節點為
- 的左、右子節點分別為 、
- 的右子節點為
- 的右子節點為
- 的左子節點為
依前序走訪逐步排列:
- 先訪問根節點:
- 走訪 的左子樹:
- 的左子樹:
- 的右子樹:
- 走訪 的右子樹:
- 的左子樹:
- 的左子樹:
- 的右子樹:
因此前序走訪結果為:
第 14 題2 分
Given two prime numbers “3” and “7” and a private key “23”, what is a public key derived by RSA?
登入後即可作答並保存紀錄。
核心觀念
RSA 使用兩個質數 建立:
並計算歐拉函數:
公開金鑰指數 與私密金鑰指數 必須滿足:
本題給定:
要求公開金鑰中的指數 。
解題方法
先計算模數與歐拉函數:
因此 必須滿足:
因為:
所以改寫為:
觀察選項中的 :
而:
因此:
符合 RSA 的互為模反元素條件,所以:
嚴格而言,RSA 公開金鑰是 ,本題選項只列出公開金鑰指數,因此公開金鑰為:
選項分析
- (A) 3:錯誤
第 15 題2 分
Consider the following C code. Please indicate the value of after execution.
int i, j;
int x = 5;
for (i = 1; i < 3; i++)
{
for (j = 1; j < i * 2; j++)
x += 3;
}
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言的巢狀 for 迴圈,以及迴圈條件的判斷方式。
外層迴圈:
for (i = 1; i < 3; i++)
因此 依序取 。
內層迴圈:
for (j = 1; j < i * 2; j++)
x += 3;
在每一個固定的 值下, 都會從 開始,持續執行到 不成立為止。每執行一次內層迴圈, 增加 。
解題方法:逐步追蹤
初始值為:
當
內層條件為:
此時 的執行狀況如下:
| 條件 | 執行結果 | |
|---|---|---|
| 成立 | ||
| 不成立 | 離開內層迴圈 |
因此, 時,內層迴圈執行 次。
當
內層條件為:
此時 的執行狀況如下:
| 條件 | 執行結果 | |
|---|---|---|
| 成立 | ||
| 成立 | ||
| 成立 | ||
| 不成立 | 離開內層迴圈 |
因此, 時,內層迴圈執行 次。
總共執行次數為:
所以:
關鍵程式碼的執行流程可簡寫為:
第 16 題2 分
Consider a series of matrices , , , , . Concerning the most efficient way to multiply this sequence of matrices, how many multiplication operations does it need?
登入後即可作答並保存紀錄。
核心觀念
本題考的是「矩陣鏈乘法最佳化」(Matrix Chain Multiplication)。
矩陣乘法具有結合律:
但不同括號化方式,所需的「純量乘法次數」不同。若矩陣 為 、矩陣 為 ,則計算 需要:
次純量乘法,結果矩陣大小為 。
本題矩陣大小如下:
因此維度序列為:
解題方法:動態規劃
令 表示從第 個矩陣乘到第 個矩陣所需的最少純量乘法次數。
若最後一次分割在第 個矩陣之後,則:
其中 。
第一層:兩個矩陣相乘
第二層:三個矩陣
對 :
所以:
對 :
所以:
對 :
所以:
第三層:四個矩陣
對 :
此處需注意括號化成本應為:
所以:
對 :
所以:
第四層:五個矩陣
計算 的四種分割方式:
第 17 題2 分
Consider five processes as follows. They arrived in the order of P1, P2, P3, P4, and P5 at time 0. What is the total turnaround time of all processes by using the shortest-job-first (SJF) scheduling algorithm?
| Process | Burst time | Priority |
|---|---|---|
| P1 | 10 | 3 |
| P2 | 1 | 1 |
| P3 | 2 | 3 |
| P4 | 1 | 4 |
| P5 | 5 | 2 |
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統的 Shortest-Job-First(SJF,最短工作優先)排程演算法。
SJF 的規則是:CPU 每次從已到達、尚未執行的程序中,選擇 Burst time 最短者 執行。本題所有程序皆在時間 到達,因此一開始即可比較五個程序的 Burst time。
本題採用非搶先式 SJF,因為題目未提及程序執行期間會被中斷。非搶先式 SJF 一旦選定程序,就會讓該程序執行完畢。
各程序的周轉時間定義為:
由於所有程序的到達時間皆為 ,所以:
Priority 欄位不是 SJF 的判斷依據,因此本題不使用 Priority 排序。
解題方法
1. 依 Burst time 排列執行順序
各程序資料如下:
| Process | Burst time | Arrival time |
|---|---|---|
| P1 | 10 | 0 |
| P2 | 1 | 0 |
| P3 | 2 | 0 |
| P4 | 1 | 0 |
| P5 | 5 | 0 |
依 Burst time 由小到大排序:
P2 與 P4 的 Burst time 同為 ,因此依題目給定的到達順序,P2 先於 P4。
2. 繪製甘特圖
各程序的完成時間如下:
| Process | Burst time | 執行區間 | Completion time | Turnaround time |
|---|---|---|---|---|
| P2 | 1 | 1 | ||
| P4 | 1 | 2 | ||
| P3 | 2 | 4 | ||
| P5 | 5 | 9 |
第 18 題2 分
All datagrams leaving local network have same single source IP address , different source port numbers. What technology does such a mechanism rely on?
登入後即可作答並保存紀錄。
核心觀念
本題考查網路位址轉換(NAT, Network Address Translation),更精確地說,是 NAT 中的連接埠位址轉換(PAT, Port Address Translation),也常稱為 NAT overload。
內部網路使用私有 IP 位址,例如:
- 可用位址範圍通常為 至
這些私有 IP 位址不能直接在公 Internet 上路由。當封包離開區域網路時,NAT 路由器會將內部來源 IP 位址轉換成公有 IP 位址。
本題描述所有封包離開區域網路時:
- 來源 IP 都變成
- 來源埠號各不相同
其轉換概念如下:
雖然多台內部主機共用同一個公有 IP 位址,但透過不同的來源埠號,NAT 路由器仍能辨識各個連線,並將回傳封包送回正確的內部主機。
解題方法
判斷本題可抓住兩個關鍵特徵:
- 內部來源位址屬於 ,是私有 IP 網段。
- 對外使用相同的公有 IP ,再以不同來源埠號區分連線。
這正是 PAT 的典型運作方式。NAT 路由器會維護轉換表,例如:
| 內部來源 | 對外來源 | 目的地 |
|---|---|---|
| Web Server A | ||
| Web Server A |
收到回應封包時,路由器根據目的埠號查表:
- 目的地為 ,轉回
- 目的地為 ,轉回
因此,本題所描述的機制屬於 NAT,精確名稱是 PAT。
選項分析
(A) NAT:正確
NAT 會將私有 IP 位址轉換成公有 IP 位址,使內部多台主機能共用一個或少數幾個公有 IP。
第 19 題2 分
Consider the following C code:
int x = 5;
for (int a = 1; a < 6; a++)
{
int b = 1;
while (b < 9)
{
x += 2;
b += 2;
}
}
printf("%d", x);
After the code is executed, what is the output?
登入後即可作答並保存紀錄。
核心觀念
本題考查:
for迴圈的執行次數while迴圈的執行次數- 區域變數
b每次外層迴圈重新初始化 - 變數
x的累加運算
程式中:
int x = 5;
初始值為 。
解題方法與逐步追蹤
1. 計算外層 for 迴圈次數
for (int a = 1; a < 6; a++)
變數 a 依序為:
因此外層迴圈共執行 次。
2. 計算內層 while 迴圈次數
每次進入外層迴圈時,皆會執行:
int b = 1;
因此 b 每次都重新從 開始。
while (b < 9)
{
x += 2;
b += 2;
}
b 的變化如下:
執行前的 b | 是否滿足 b < 9 | 執行後的 b | x 增加量 |
|---|---|---|---|
| 1 | 是 | 3 | 2 |
| 3 | 是 | 5 | 2 |
| 5 | 是 | 7 | 2 |
| 7 | 是 | 9 | 2 |
| 9 | 否,停止 | — | — |
內層迴圈共執行 次,因此每次外層迴圈中:
3. 計算總累加結果
外層迴圈執行 次,每次使 增加 :
第 20 題2 分
Consider an infix expression: .
What is its prefix expression?
登入後即可作答並保存紀錄。
核心觀念
本題考查中序表示法(infix)轉前序表示法(prefix)。
- 中序:運算子位於兩個運算元之間,例如
- 前序:運算子放在兩個運算元之前,例如
- 前序表示式的根運算子必須最先出現,接著依序排列左子樹與右子樹。
原式為:
依運算優先順序與括號,可寫成:
最外層運算子是加法 。
解題方法
先將中序表示式依照運算結構分成左右兩部分:
最外層為:
左子式 的運算樹為:
- 根運算子:
- 左子樹:
- 右子樹:
因此其前序表示式為:
右子式 的運算樹為:
- 根運算子:
- 左子樹:
- 右子樹:
因此其前序表示式為:
最後,將最外層的 放在最前面:
所以正確選項為:
運算樹表示
整個運算樹如下:
+
/ \
* *
/ \ / \
+ C D -
/ \ / \
A B E F
按照前序走訪順序「根 → 左 → 右」:
串接後得到:
+*+ABC*D-EF
選項分析
(A) **A++BC-DEF
錯誤。
前序表示式的第一個運算子可以是 、、 等,但此選項開頭為兩個連續的乘法運算子:
* *
依前序結構,第一個 的左子樹會以第二個 開始,後續運算元排列無法形成原式的結構。原式最外層應為加法 ,不是乘法 。
(B) ++A*BC-*DEF
錯誤。
此選項開頭為:
+ + A ...
表示最外層加法的左子樹又是一個加法,但原式的最外層結構是:
第 21 題2 分
Consider the following C code:
int array[5] = {100, 215, 321, 254, 165};
int *k = &array[1];
*k-- += 5;
*(++k) += 9;
*(k++) += 7;
*k++ -= 15;
for (int i = 0; i < 5; i++)
printf("%d ", array[i]);
What is the output of the above program?
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言中的:
- 指標運算。
- 前置遞增
++k與後置遞增、遞減k++、k--的差異。 - 運算子優先順序。
- 複合指定運算子,如
+=、-=。
關鍵解析如下:
*k--會解讀為*(k--),因為後置遞減--的優先順序高於解參照運算子*。*(++k)先將指標k遞增,再存取新位置。*(k++)先存取目前位置,再將指標遞增。
初始狀態為:
且:
解題方法:逐行追蹤
第 1 行
*k-- += 5;
等價於:
*(k--) += 5;
先使用原本的 k,因此修改 array[1]:
完成存取後,k 後置遞減:
目前狀態:
array = {100, 220, 321, 254, 165}
k = &array[0]
第 2 行
*(++k) += 9;
先執行前置遞增,使:
再修改 array[1]:
目前狀態:
array = {100, 229, 321, 254, 165}
k = &array[1]
第 3 行
*(k++) += 7;
先使用目前的 k,所以修改 array[1]:
完成存取後,k 後置遞增:
目前狀態:
array = {100, 236, 321, 254, 165}
k = &array[2]
第 4 行
*k++ -= 15;
等價於:
*(k++) -= 15;
先修改目前 k 所指向的 array[2]:
完成存取後,k 遞增至:
最終陣列為:
第 22 題2 分
Which one of the following terms is NOT the advantages of paging in memory management?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統的 paging(分頁)記憶體管理及其優點。
分頁的基本機制如下:
- 將程序的邏輯記憶體切成固定大小的 page(頁)。
- 將實體記憶體切成相同大小的 frame(框)。
- 程序的各個 page 可以配置到不連續的 frame。
- 透過 page table(頁表) 將邏輯位址中的 page number 轉換為 frame number。
分頁的主要效果包括:
- 固定大小的 page 與 frame 便於配置。
- 不需要連續的實體記憶體,因此可避免外部碎裂。
- 頁表項目可加入權限位元,實現記憶體保護。
- 多個程序可共用相同的唯讀頁或共享函式庫,實現記憶體共享。
- 由於配置單位固定,最後一頁未完全使用時可能產生內部碎裂。
其中:
- 外部碎裂(external fragmentation):可用記憶體分散在許多不連續的小區塊,總空間足夠但無法配置連續區域。
- 內部碎裂(internal fragmentation):已分配的記憶體區塊內部有未被使用的空間。
解題方法
判斷每個選項是否為 paging 的優點即可。
分頁將記憶體切成固定大小的 frame,程序也切成固定大小的 page。由於 page 可以放入任意可用的 frame,程序不必佔據連續的實體記憶體,因此能消除外部碎裂。
但是,固定大小的分頁配置也可能使最後一頁只使用一部分,剩餘空間仍被保留給該程序,形成內部碎裂。因此「防止內部碎裂」不是 paging 的優點。
選項分析
(A) same page size
正確。Paging 採用固定大小的 page,而實體記憶體也切成相同大小的 frame。page 與 frame 大小相同,才能進行直接配置與位址轉換。
固定大小的配置單位能簡化:
- 記憶體配置與回收;
- 頁表設計;
- 邏輯位址到實體位址的轉換;
- 頁面置換與磁碟交換。
因此,使用相同大小的 page 與 frame 是 paging 的重要設計優點。
(B) preventing internal fragmentation
錯誤。這是本題答案。
Paging 使用固定大小的 frame。若程序大小不是 page size 的整數倍,最後一頁通常無法完全填滿。例如 page size 為 ,程序需要 ,必須配置:
實際配置空間為:
其中有:
第 23 題2 分
Which one of the following protocols is implemented on top of SSL/TLS?
登入後即可作答並保存紀錄。
核心觀念
本題考「應用層協定與 SSL/TLS 的關係」。
SSL/TLS 位於應用層協定與傳輸層 TCP 之間,主要提供:
- 加密,保護資料機密性
- 身分驗證,確認伺服器身分
- 完整性驗證,防止資料遭竄改
HTTPS 的全名是 HTTP Secure,本質上就是:
也就是將 HTTP 訊息交由 SSL/TLS 加密後,再透過 TCP 傳送。現代標準主要使用 TLS,SSL 已屬過時技術,但考題常以「SSL/TLS」合稱。
解題方法
看到題目問「哪一個協定實作在 SSL/TLS 之上」,直接尋找明確由「HTTP + SSL/TLS」組成的協定名稱。
- HTTP:未加密的網頁傳輸協定
- HTTPS:在 HTTP 之上加入 SSL/TLS 安全層的協定
因此:
故官方答案為 (B) HTTPS。
選項分析
(A) HTTP
HTTP 是用於傳送網頁資料的應用層協定,傳統 HTTP 通常透過 TCP 第 80 埠傳輸,內容以明文形式傳送。
HTTP 本身不包含 SSL/TLS 加密,因此不是本題所問的答案。當 HTTP 加上 SSL/TLS 後,才稱為 HTTPS。
(B) HTTPS
HTTPS 是 HTTP over SSL/TLS,表示 HTTP 訊息先經過 SSL/TLS 保護,再透過網路傳送,通常使用 TCP 第 443 埠。
因此 HTTPS 正是「實作在 SSL/TLS 之上」的協定。
此選項正確。
(C) POP3
POP3 是 Post Office Protocol version 3,用於電子郵件接收,通常使用 TCP 第 110 埠。
POP3 原本並非建立在 SSL/TLS 之上。若使用加密版本,常見形式包括:
第 24 題2 分
Refer to Table 3 and Table 4. Please indicate the CORRECT SQL statement that can output as depicted in Table 5.
Table 3: movies
| id | movie | year | actor |
|---|---|---|---|
| m_001 | The Matrix | 1999 | a_002 |
| m_002 | Iron Man | 2008 | a_010 |
| m_003 | Doctor Strange | 2016 | a_003 |
Table 4: actors
| id | name | salary |
|---|---|---|
| a_001 | Brad Pitt | 250M |
| a_002 | Keanu Reeves | 200M |
| a_003 | Benedict Cumberbatch | 150M |
Table 5: output
| movie | name |
|---|---|
| The Matrix | Keanu Reeves |
(A) SELECT * FROM movies
(B)
SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC
(C)
SELECT movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary
(D) All of the above can output the same results, as shown in Table 5.
(E) None of the above can output the same results, as shown in Table 5.
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查 SQL 的三個基本機制:
INNER JOIN:依照指定條件,合併兩個資料表中能互相匹配的資料。ORDER BY:依指定欄位排序;DESC代表遞減排序,由大到小。TOP 1:只擷取排序後的第一筆資料。
題目要求輸出:
| movie | name |
|---|---|
| The Matrix | Keanu Reeves |
也就是必須同時做到:
- 從
movies取得電影名稱; - 從
actors取得演員姓名; - 依演員薪資由高到低排序;
- 只保留薪資最高的第一筆。
解題方法與資料追蹤
movies.actor 對應 actors.id,因此連接條件為:
movies.actor = actors.id
逐筆比對:
| movies.movie | movies.actor | 是否在 actors.id 找到 | 對應姓名 | 薪資 |
|---|---|---|---|---|
| The Matrix | a_002 | 是 | Keanu Reeves | 200M |
| Iron Man | a_010 | 否 | 無 | 無 |
| Doctor Strange | a_003 | 是 | Benedict Cumberbatch | 150M |
由於是 INNER JOIN,Iron Man 沒有對應的演員資料,因此會被排除。
連接後的結果為:
| movie | name | salary |
|---|---|---|
| The Matrix | Keanu Reeves | 200M |
| Doctor Strange | Benedict Cumberbatch | 150M |
接著依 actors.salary DESC 由高到低排序:
- Keanu Reeves:200M
- Benedict Cumberbatch:150M
最後使用 TOP 1 只取第一筆:
| movie | name |
|---|---|
| The Matrix | Keanu Reeves |
因此正確 SQL 為:
SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC
選項分析
(A) SELECT * FROM movies
錯誤。
此指令只查詢 movies 資料表,不會連接 actors 資料表,因此:
- 無法取得演員姓名;
- 會輸出
id、movie、year、actor等欄位; - 會列出
movies中的所有三筆資料。
輸出欄位與資料內容都不符合 Table 5。
(B)
SELECT TOP 1 movies.movie, actors.name
FROM movies
INNER JOIN actors ON movies.actor = actors.id
ORDER BY actors.salary DESC
正確。
此指令的執行順序可概念化為:
第 25 題2 分
Consider a graph as follows. Starting from node D, what is the visiting sequence of all nodes by using depth-first search? If you have multiple choices, just follow the alphabetical order.
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查圖形的深度優先搜尋(Depth-First Search, DFS)。
DFS 的規則是:
- 從指定起點開始拜訪。
- 查看目前節點的相鄰節點。
- 若有尚未拜訪的相鄰節點,依字母順序選擇最前者,立即深入搜尋。
- 目前節點沒有尚未拜訪的相鄰節點時,回溯至上一個節點。
- 重複上述流程,直到所有節點都拜訪完畢。
圖上的邊權重只代表數值,與 DFS 的拜訪順序無關。
解題方法
從節點 開始。其相鄰節點依字母排序為:
因此先拜訪 。
依照 DFS 並採字母順序追蹤:
- 的未拜訪相鄰節點中, 最先,因此拜訪 。
- 的未拜訪相鄰節點為 ,因此拜訪 。
- 的未拜訪相鄰節點為 ,因此拜訪 。
- 的未拜訪相鄰節點依字母排序為 ,先拜訪 。
- 的未拜訪相鄰節點為 ,因此拜訪 。
- 的未拜訪相鄰節點依字母排序為 ,先拜訪 。
- 的未拜訪相鄰節點為 ,因此拜訪 。
- 的相鄰節點皆已拜訪,搜尋結束。
因此拜訪順序為:
選項分析
第 26 題2 分
Which one of the following has the best time complexity?
登入後即可作答並保存紀錄。
核心觀念
本題考查演算法的「時間複雜度」比較,通常以漸近分析(asymptotic analysis)判斷輸入規模 增大時,執行時間的成長速度。
比較時間複雜度時,重點是觀察函數的成長階:
其中常數倍不影響漸近複雜度:
因此,本題的「best time complexity」是指成長速度最慢、效率最佳的時間複雜度。
解題方法
將各選項依成長速度分類:
- 對數時間:
- 線性時間:、、
- 線性對數時間:
當 持續增大時,對數函數的成長速度遠低於線性函數;線性函數又低於線性對數函數。因此:
所以成長最慢、時間複雜度最佳的是 。
選項分析
(A) :正確
其時間複雜度為對數時間:
輸入規模增加很多倍時,執行步數只會緩慢增加。例如二分搜尋每次將搜尋範圍縮小為原來的一半,因此需要約 次操作。
對數函數的底數只會造成常數倍差異:
在 Big-O 分析中,常數倍會被忽略,因此不同底數的對數具有相同的漸近複雜度。此選項成長最慢,效率最佳。
(B) :錯誤
雖然 比 小,但常數係數 不影響漸近成長階:
因此它仍屬於線性時間,而非對數時間。當 很大時, 的成長速度仍遠高於 。
第 27 題2 分
Machine learning can be divided into supervised learning and unsupervised learning. The two problems most commonly dealt with in supervised learning are regression and classification. When you predict the target to be a continuous numerical value, we call it regression; if the target is discrete, we call it classification. Which one of the following common algorithms is NOT a classification algorithm?
登入後即可作答並保存紀錄。
核心觀念
監督式學習(supervised learning)利用已標記的資料訓練模型,主要任務分為:
- 迴歸(regression):預測連續數值,例如身高、房價、溫度。
- 分類(classification):預測離散類別,例如疾病/健康、是/否、良性/惡性。
本題要求找出「不是分類演算法」的選項,因此判斷重點是:該方法的典型用途是否為預測離散類別。
解題方法
逐一辨認各演算法的主要用途:
- SVM:常用於分類。
- Linear:通常指 Linear Regression(線性迴歸),用來預測連續數值。
- Decision trees:可建立分類樹。
- KNN:可用多數決進行分類。
- Naive Bayes:典型的分類方法。
因此,不屬於分類演算法的是線性迴歸,選擇 (B)Linear。
選項分析
(A)SVM
SVM(Support Vector Machine,支援向量機)常用於分類問題。
二元分類時,SVM 尋找一個決策超平面:
使不同類別的資料被分隔,並最大化分類邊界與最近資料點之間的間隔(margin)。這些最接近決策邊界的資料點稱為支援向量。
SVM 也能透過 kernel trick 處理非線性分類,因此屬於分類演算法。本選項錯誤。
典型訓練複雜度依實作與資料特性而異,常見最佳化方法約為 至 ;預測單筆資料通常與支援向量數量及特徵數有關。空間複雜度通常至少為 。
(B)Linear
本題中的「Linear」依考試慣例是指 Linear Regression(線性迴歸),其目標是預測連續數值。
線性迴歸模型可表示為:
其中 是預測結果,通常為連續數值。模型常以最小平方法最小化平方誤差:
例如根據年齡、血壓與體重預測血糖值,輸出可能是 ,而非「第 1 類」或「第 2 類」。
因此,Linear Regression 是迴歸演算法,不是典型的分類演算法,故為本題答案。
以最小平方法直接求解時,若特徵數為 ,常見矩陣計算複雜度約為 ,儲存資料與設計矩陣約需 空間;使用梯度下降時,單次迭代約為 。
(C)Decision trees
Decision Tree(決策樹)可用於分類,也可用於迴歸。
分類樹會根據特徵逐層切分資料,例如:
- 年齡是否大於 50 歲?
- 檢驗值是否超過某個門檻?
- 是否具有某項症狀?
最後的葉節點輸出類別,因此屬於分類演算法。
第 28 題2 分
Which of the following terms is NOT included in 5 V’s of Big Data?
登入後即可作答並保存紀錄。
核心觀念
本題考查 Big Data(大數據)的「5 V」特徵。高雄醫學大學本題採用的標準組合為:
- Volume:資料量
- Variety:資料多樣性
- Velocity:資料產生與處理速度
- Veracity:資料真實性與可信度
- Value:資料價值
因此,Volatility 並不列入本題所採用的 5 V。
解題方法
判斷各選項是否屬於大數據的 5 V,逐一對照標準名詞:
選項中只有 Volatility 不在上述五項之內,因此選擇 (E)。
選項分析
- (A) Volume:正確
Volume 指資料的數量與規模非常龐大,例如社群網站文章、影像、交易紀錄、感測器資料等,均可能在短時間內累積大量資料。這是 Big Data 的核心特徵之一。
- (B) Variety:正確
Variety 指資料來源與格式多樣,包含:
- 結構化資料:資料庫表格、交易紀錄
- 半結構化資料:JSON、XML
- 非結構化資料:文字、圖片、影音、語音
大數據不只處理傳統表格資料,也必須整合多種格式,因此 Variety 屬於 5 V。
- (C) Value:正確
Value 指資料經過分析後所能產生的實際價值,例如協助醫療診斷、預測疾病風險、改善商業決策。若資料只能大量累積,卻無法產生有用資訊,其應用價值便有限,因此 Value 是重要的大數據特徵。
- (D) Velocity:正確
第 29 題2 分
Regarding the evaluation of machine learning, a confusion matrix contains TP (true positive) = 500, FN (false negative) = 100, FP (false positive) = 50, and TN (true negative) = 550 is proposed. Please indicate the value of recall for this model.
登入後即可作答並保存紀錄。
核心觀念
本題考查分類模型評估指標中的 Recall(召回率,也稱 Sensitivity 或 True Positive Rate)。
Recall 用來衡量:
在所有實際為正類的樣本中,模型成功預測為正類的比例。
公式為:
其中:
- :實際為正類,且預測為正類
- :實際為正類,但預測為負類
因此,所有實際為正類的樣本數為:
解題方法
將題目數值代入 Recall 公式:
所以答案為:
Recall 的分母只計算「實際為正類」的樣本,也就是 ,不包含 或 。
選項分析
(A)
錯誤。
分子:
分母:
因此此選項代表的是 Accuracy(準確率):
它不是 Recall。
(B)
正確。
因此本題官方答案為 B。
(C)
錯誤。
分母 等於:
這是所有被模型預測為正類的樣本數,因此此選項代表 Precision(精確率):
第 30 題2 分
Which of the following subnets does NOT include IP address ?
登入後即可作答並保存紀錄。
核心觀念
本題考查 CIDR(Classless Inter-Domain Routing)子網路表示法,以及判斷某一個 IP 位址是否落在指定子網路的範圍內。
表示法:
其中 表示網路前綴長度,也就是子網路遮罩中連續的 的數量。主機所在子網路的範圍,可由「網路位址」與「廣播位址」判斷:
題目要找的是「不包含 」的子網路。
解題方法
針對每個選項,計算該子網路的位址區間,再檢查 是否落在其中。
選項分析
(A)
24 的子網路遮罩為:
因此第三個八位元組以前固定,主機範圍為:
目標 IP:
落在此範圍內,因此此選項包含目標 IP,並非答案。
(B)
22 的子網路遮罩為:
第三個八位元組的區塊大小為:
因此子網路會以第三個八位元組的 的倍數為起點。 是 的倍數,所以此子網路的範圍為:
目標 IP 的第三個八位元組為 ,落在 至 之間;第四個八位元組 也在合法範圍內。
因此:
此選項包含目標 IP,並非答案。
(C)
30 的子網路遮罩為:
第四個八位元組的區塊大小為:
因此子網路區塊為:
落在 至 的區塊,因此此子網路範圍為:
第 1 題10 分
Please explain the five states that a process may be in.
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中「行程(process)」的五狀態模型。行程在生命週期中,會依照建立、CPU 分配、I/O 等待及執行結束等事件,在下列五種狀態間轉換:
- New(新建立):行程正在被建立,尚未進入可執行狀態。
- Ready(就緒):行程已具備執行條件,只等待被排程器分配 CPU。
- Running(執行中):行程目前正在 CPU 上執行。
- Waiting/Blocked(等待/阻塞):行程等待 I/O 完成、資源取得或某項事件發生,因此暫時無法執行。
- Terminated/Exit(結束):行程已完成執行,或因錯誤、系統指令而被終止。
解題方法
判斷本題時,直接套用標準的 process five-state model。完整狀態集合為:
常見狀態轉換如下:
行程建立完成後,進入就緒佇列。
CPU 排程器選取該行程執行。
發生時間片用完、較高優先權行程搶占等情況。
行程提出 I/O 請求,或等待某項事件與資源。
I/O 或所等待的事件完成,行程重新具備執行資格。
第 2 題10 分
Alice writes the following code and expects that the process prints “Hello Kitty” four times. However, the process prints “Hello Kitty” three times only! Please describe the reason why Alice’s code prints “Hello Kitty” three times instead of four.
#include <stdio.h>
int main()
{
for (double f = 0.0; f <= 0.3; f += 0.1)
{
printf("Hello Kitty.\n ");
}
return 0;
}
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查:
for迴圈的執行順序。double浮點數的二進位表示與舍入誤差。- 浮點數不適合直接使用
==、<=進行精確邊界判斷。
0.1 在十進位中看似簡單,但轉換成二進位浮點數時通常無法精確表示,因此儲存的實際值會是非常接近 的近似值。
解題方法
for 迴圈的執行順序為:
- 執行初始化:
f = 0.0 - 判斷條件:
f <= 0.3 - 執行迴圈本體
- 執行增量:
f += 0.1 - 回到第 2 步判斷
程式可視為:
double f = 0.0;
while (f <= 0.3)
{
printf("Hello Kitty.\n ");
f += 0.1;
}
在一般使用 IEEE 754 double 的環境中,追蹤如下:
| 次數 | f 的概念值 | 條件 f <= 0.3 | 是否列印 |
|---|---|---|---|
| 第 1 次 | 成立 | 是 | |
| 第 2 次 | 約 | 成立 | 是 |
| 第 3 次 | 約 | 成立 | 是 |
| 第 4 次 | 約 | 不成立 | 否 |
關鍵在於,連續執行三次增量後,f 並不一定恰好等於十進位的 :
因此第四次進入迴圈前,實際判斷近似為:
0.30000000000000004 <= 0.3
結果為假,所以迴圈只執行三次。
為什麼官方答案是 D
官方答案 D 所代表的核心原因是:double 浮點數存在表示與累加舍入誤差,使得第三次加上 0.1 後的實際值略大於 0.3,導致條件 f <= 0.3 不成立。
所以程式列印三次,而非預期的四次。
逐步程式追蹤
for (double f = 0.0; f <= 0.3; f += 0.1)
等價於:
第 3 題10 分
Consider the following processes. Please draw the schedules (Gantt Chart) and calculate the average waiting time for the Preemptive Shortest Job First and Round Robin (time-quantum = 4 ms) scheduling policies, respectively.
| Process | Arrival Time | CPU Burst Time |
|---|---|---|
| P1 | 0 ms | 15 ms |
| P2 | 3 ms | 7 ms |
| P3 | 5 ms | 2 ms |
| P4 | 7 ms | 3 ms |
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查 CPU 排程中的:
- Preemptive Shortest Job First(SJF),又稱 Shortest Remaining Time First(SRTF)
- Round Robin(RR)
- Gantt Chart
- Waiting Time(等待時間)
- Average Waiting Time(平均等待時間)
每一個行程的等待時間可用下式計算:
平均等待時間為:
一、Preemptive Shortest Job First
解題方法
每當有新行程抵達,就比較目前所有可執行行程的「剩餘 CPU 執行時間」,選擇剩餘時間最短者執行。若新行程的剩餘時間更短,便立即搶占目前行程。
排程過程
只有 抵達,因此執行 。
- 執行區間:
- 時, 尚剩 ms
- 抵達,剩餘 ms
因此搶占 ,改執行 。
此時:
- 剩餘 ms
- 剩餘 ms
- 抵達,需 ms
的執行時間最短,因此搶占 。
執行完畢, 抵達。此時:
- 剩餘 ms
- 剩餘 ms
- 需 ms
選擇 執行。
完成,此時 剩餘 ms,短於 剩餘的 ms,因此執行 。
完成,最後執行 至完成。
Gantt Chart
0 3 5 7 10 15 30
| P1 | P2 | P3 | P4 | P2 | P1 |
等待時間計算
| Process | Completion Time | Arrival Time | Burst Time | Waiting Time |
|---|---|---|---|---|
| 30 | 0 | 15 | ||
| 15 | 3 | 7 | ||
| 7 | 5 | 2 | ||
| 10 | 7 | 3 |
因此:
二、Round Robin,時間量 ms
解題方法
Round Robin 使用循環佇列:
- 每個行程最多執行 ms。
- 若 ms 內完成,便離開佇列。
- 若尚未完成,則移至佇列尾端。
- 新抵達的行程加入就緒佇列尾端。
排程過程
先執行 ms,剩餘:
在 抵達,因此佇列為 。
執行 ms,剩餘:
在此期間:
- 於 抵達
- 於 抵達
佇列接續為 。
第 4 題10 分
Consider a weighted graph, where the edges show the costs, as follows. Please use the Kruskal Algorithm to get the corresponding minimum-cost spanning tree. Not only the result but also the whole procedure steps should be presented in your answer.
🖼️【此處有附圖,請對照原卷】
校方公布看官方參考答案 ▾收合 ▴
登入後即可作答並保存紀錄。
核心觀念
本題考查 Kruskal Algorithm 求最小成本生成樹(Minimum-Cost Spanning Tree, MST)。
- 生成樹必須連通所有頂點。
- 若圖有 個頂點,生成樹必有 條邊;本圖有 個頂點,因此最後需選出 條邊。
- Kruskal 法則是:將所有邊依成本由小到大排序,依序加入目前的邊;若加入後形成 cycle(迴圈),則捨棄該邊。
解題方法與排序
圖中的邊及成本依小到大排列如下:
| 成本 | 邊 |
|---|---|
| 8 | 、 |
| 9 | 、 |
| 11 | 、 |
| 12 | 、、 |
| 13 | |
| 14 | |
| 16 | |
| 19 | |
| 20 | |
| 21 | |
| 25 |
依 Kruskal Algorithm 逐步判斷:
| 步驟 | 考慮邊 | 判斷 | 目前選取邊 |
|---|---|---|---|
| 1 | ,8 | 不形成 cycle,加入 | |
| 2 | ,8 | 不形成 cycle,加入 | |
| 3 | ,9 | 不形成 cycle,加入 | 加入 |
| 4 | ,9 | 不形成 cycle,加入 | 加入 |
| 5 | ,11 | 不形成 cycle,加入 | 加入 |
| 6 | ,11 | 不形成 cycle,加入 | 加入 |
| 7 | ,12 | 不形成 cycle,加入 | 加入 |
| 8 | ,12 | 已在同一連通分量,形成 cycle,捨棄 | 不加入 |
| 9 | ,12 | 已在同一連通分量,形成 cycle,捨棄 | 不加入 |
| 10 | ,13 | 連接兩個不同分量,加入 | 加入 |