108 專技高考高等考試 電子工程技師 電子計算機原理 考古題詳解
第 一 題25 分
以下是一個演算法,給定一個含有 個數字元素的陣列 ,它會輸出其中最大的元素。(每小題 5 分,共 25 分)
(一) 此演算法若使用 C 或 C++ 程式語言來實作,請問其中「」應該用什麼符號來表示?
(二) 給定一個含有 個數字元素的陣列 ,請問最後會輸出 的值為何?
(三) 給定一個含有 個數字元素的陣列 ,請問此演算法的第 3 行指令「if then」總共被執行了多少次?
(四) 給定一個含有 個數字元素的陣列 ,請問此演算法的第 4 行指令「」總共被執行了多少次?
(五) 此演算法處理一個含有 個數字元素的陣列時,其執行時間 的複雜度(time complexity)為何?
登入後即可作答並保存紀錄。
核心觀念
本題考查逐一掃描陣列以尋找最大值,以及根據迴圈次數與條件判斷次數分析時間複雜度。
演算法先將 設為目前最大值,再依序檢查 至 。若 ,便更新目前最大值。符號 包含相等,因此遇到相同的最大值時,第 4 行也會執行。
解題方法
(一) C 或 C++ 中,賦值運算子使用 =,所以「」以 = 表示。例如:
currentMax = A[1];
(二) 依序追蹤目前最大值:
| 比較結果 | 執行後的 currentMax | ||
|---|---|---|---|
| 初始 | 設定初值 | 8 | |
| 2 | 22 | ,更新 | 22 |
| 3 | 22 | ,更新 | 22 |
| 4 | 13 | ,不更新 | 22 |
| 5 | 34 | ,更新 | 34 |
第 二 題25 分
下圖可用來表示程式執行時間 的成長圖。其中有 、、、、、 等 6 種函數。(每小題 5 分,共 25 分)
🖼️【此處有附圖,請對照原卷】
(一) 請問其中哪些函數是屬於 polynomial-time growth?
(二) 傳統的 Merge sort 在排序 個資料時,其時間複雜度是這 6 種函數的哪一種?
(三) 傳統的 Quick sort 在排序 個資料時,在最糟的狀況下,時間複雜度是這 6 種函數的哪一種?
(四) 傳統的 Selection sort 在排序 個資料時,其時間複雜度是這 6 種函數的哪一種?
(五) 傳統的 Heap sort 在排序 個資料時,其時間複雜度是這 6 種函數的哪一種?
登入後即可作答並保存紀錄。
核心觀念
多項式時間是指存在固定常數 ,使執行時間可由 上界描述。依此定義,、、、 都屬於 polynomial-time growth; 與 則不是。
解題方法與各小題
(一)Polynomial-time growth
逐一看函數是否能以某個固定次方的 作為上界:
- :屬於多項式時間,且成長慢於 。
- :屬於多項式時間。
- :屬於多項式時間;例如對足夠大的 ,,所以 。
- :屬於多項式時間。
- :指數成長,不屬於多項式時間。
- :階乘成長,不屬於多項式時間。
因此,屬於 polynomial-time growth 的函數是 、、、。
(二)Merge sort
每次將資料分成兩半遞迴排序,再以線性時間合併,故遞迴式為
依主定理,,對應圖中的 。
(三)Quick sort 最糟狀況
第 三 題25 分
在電腦內部有許多工作(job)及程序(process)同時在爭用資源,因此需要安排很多 queue 來將它們做先後順序的排列。下圖顯示 Job queue、Ready queue、I/O queue 等 3 種 queue 在處理 job 及 process 的整體流程圖。(每小題 5 分,共 25 分)
🖼️【此處有附圖,請對照原卷】
(一) 請問工作(job)及程序(process)的主要差別為何?
(二) 請問圖中「Time slot exhausted」所指意思為何?
(三) 請問圖中「I/O satisfied」所指意思為何?
(四) 請問 Ready queue 儲存的內容為何?
(五) 在實作 queue 時,一般常用 FIFO queue,請問 FIFO 意義為何?
登入後即可作答並保存紀錄。
核心觀念
本題考查作業系統中的 job 與 process、多重佇列、CPU 時間片輪替及 FIFO。依圖示,工作由 Job queue 進入處理流程;已載入記憶體且可使用 CPU 的程序排入 Ready queue;需要 I/O 的程序等待 I/O 完成,完成後回到 Ready queue。
解題方法
判讀流程圖中程序移動的原因:CPU 時間片用完,程序回到 Ready queue;程序提出 I/O 要求,就進入 I/O queue;I/O 完成後,程序再回到 Ready queue。再依作業系統的定義,說明各佇列所存放的對象及 FIFO 的服務順序。
各小題詳解
(一) 工作(job)及程序(process)的主要差別
Job 是使用者提交給電腦、等待系統處理的工作單位,通常包含程式及相關資料。Process 則是程式正在執行時的實例,具有執行狀態、程式計數器、暫存器內容及所需資源等資訊。
簡言之,job 是等待處理的工作;process 是正在執行或等待執行的程序。Job 被系統接納並載入記憶體後,會進入程序管理與排程流程。
(二)「Time slot exhausted」的意思
「Time slot exhausted」表示程序獲得的 CPU 時間片(time quantum)已用完。在分時或輪轉排程中,作業系統會暫停該程序,將它放回 Ready queue,等待下一次取得 CPU。
第 四 題25 分
資料結構的分類可如下圖所示。(每小題 5 分,共 25 分)
🖼️【此處有附圖,請對照原卷】
(一) 請問 Linear Data Structure 和 Non-Linear Data Structure 兩者主要的差別為何?
(二) 請問圖中 Static 和 Dynamic 兩者主要的差別為何?
(三) 請問圖中何者亦稱為 LIFO?
(四) 在實作 LinkedList 時,每個元素通常會含有兩個部分:data 和 link。請問這兩個部分各存什麼資訊?
(五) 下面顯示一個 Graph 例子。在實作 Graph 時,通常有兩種做法:adjacency matrix 及 adjacency list,請使用上面的 Graph 例子,說明這兩個做法。
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查資料結構的分類、堆疊的存取順序、鏈結串列節點的欄位,以及圖形的兩種常見表示法。依題圖,Graph 為無向圖,節點為 ,邊為 、、、、;沒有自我迴圈,也沒有連接節點 與 的邊。
解題方法與各小題答案
(一) Linear Data Structure 與 Non-Linear Data Structure 的差別
線性資料結構中的元素依序排列,除首尾元素外,每個元素通常各有一個前驅和一個後繼,形成單一路徑,例如 Array、Linked List、Queue、Stack。
非線性資料結構中的元素不只依單一順序排列,一個元素可以連結多個其他元素,形成階層或網狀關係,例如 Tree 和 Graph。
判斷時看元素間的組織關係:單一序列屬於線性,多分支或網狀連結屬於非線性。
(二) Static 與 Dynamic 的差別
**Static(靜態)**資料結構的容量通常在建立時就決定,執行期間不易改變;圖中例子為 Array。
**Dynamic(動態)**資料結構可依執行需求增加或移除元素,大小可變;圖中例子包括 Linked List、Queue 和 Stack。動態結構通常透過配置與釋放記憶體調整容量。
(三) 圖中何者亦稱為 LIFO?
**Stack(堆疊)**亦稱為 LIFO(Last In, First Out,後進先出):最後放入的元素會最先取出。Queue 則是 FIFO(First In, First Out,先進先出)。