111 高普考高考三級 電力工程 計算機概論 考古題詳解
第 一 題20 分
(一) 請將十進位的 轉換成二進位。(5 分)
(二) 請將十進位的負整數 轉成 16-bit 的二補數(2’s complement)的二進位整數。(5 分)
(三) 下列整數都是以十六進位方式表示的 16-bit 二補數整數,請計算 的結果,並以十六進位方式表示其結果。(5 分)
(四) 下列整數是 8-bit 的二補數整數,那幾個式子計算結果是整數溢位(overflow)?並請說明之。(5 分)
(i)
(ii)
(iii)
(iv)
登入後即可作答並保存紀錄。
核心觀念
十進位實數轉換為二進位時,必須將「整數部分」與「小數部分」分開處理:
- 整數部分:採用連除法(除以 2 取餘數),由下而上(由最後一個商數至第一個餘數)排列,作為二進位整數的高位元至低位元。
- 小數部分:採用連乘法(乘以 2 取整數),由上而下依序取出每次相乘後產生的整數部分,直至小數部分為 0 或達到指定精度。
解題方法
-
整數部分 轉二進位: 由下往上讀取,得到 。
-
小數部分 轉二進位: 由上往下讀取,得到 。
-
合併整數與小數部分:
解題技巧
- 快速權重展開法(逆算驗算): 小數點後第一、二、三位的權重分別固定為 、、。觀察 ,即可心算得出小數部分為 。
【答案】
(二) 十進位負整數 轉成 16-bit 二補數(2's complement)
核心觀念
二補數(2's Complement)為現代計算機最常用的有號數表示法。求負數之二補數步驟如下:
- 先求該數之絕對值(正整數)的二進位表示。
- 將其擴展至指定位元長度(本題為 16-bit,前方補 0)。
- 取該二進位字串的二補數:即「一補數加 1」(位元反轉後加 1),或「自最低位(右端)往高位(左端)掃描,遇見第一個 1 之前與該 1 本身保持不變,其餘高位元全數反轉」。
解題方法
-
求 之二進位表示: 因此 。
-
擴展為 16-bit 正整數:
-
轉換為二補數:
- 步驟 A(求一補數,即各 bit 0 與 1 互換):
- 步驟 B(加 1 得到二補數):
第 二 題20 分
寫一個演算法,輸入資料為有 個整數值 的陣列 ,以及一個特別的值 。這個演算法找出陣列 裡的一對整數,其加總的和剛好等於 ,並把這一對整數列印出來;如果都沒有這樣的一對整數,則列印出「抱歉,找不到」。(20 分)
例如:陣列 裡的數值為 。
且如果:
(i) 的值是 ,則你的演算法要印出:(2、18) 或 (3、17)。
(ii) 的值是 ,則你的演算法要印出:抱歉,找不到。
登入後即可作答並保存紀錄。
核心觀念
本題評量經典的「兩數之和」(Two-Sum Problem),為資料結構與演算法的核心題型。其主要測驗重點包括:
- 陣列(Array)與搜尋演算法:如何在大小為 的整數陣列中,有效率地檢索出滿足條件 (其中 )的數對。
- 演算法時間與空間複雜度(Time and Space Complexity):
- 暴力搜尋法(Brute Force):雙層迴圈尋找每一對組合,時間複雜度為 ,空間複雜度為 。
- 排序配合雙指標法(Sorting with Two Pointers):先進行排序(如快速排序或合併排序),再利用雙端向內夾擠,時間複雜度為 ,空間複雜度為 或 。
- 雜湊表法(Hash Table / Hash Set):以空間換取時間,單次走訪查詢餘額,時間複雜度為 ,空間複雜度為 。
解題方法
在國家考試中,手寫演算法以「排序配合雙指標法(Two-Pointer Method)」最為嚴謹且具代表性,能在不依賴外部進階資料結構庫(如 Hash Table 碰撞處理)的前提下,達到 的時間複雜度與 的輔助空間複雜度。
演算法邏輯步驟
- 輸入與前處理:
- 輸入包含 個整數的陣列 與目標值 。
- 若 ,直接印出「抱歉,找不到」並結束。
- 將陣列 由小到大遞增排序(Ascending Sort),排序後設陣列索引為 至 。
- 雙指標初始化:
- 設定左指標 (指向最小值)。
- 設定右指標 (指向最大值)。
- 設定旗標變數 。
- 雙向夾擠檢索:
- 當 時,計算當前和:
- 判斷情況:
- 若 :印出 ,將 設為 ,並中斷迴圈結束演算法。
- 若 :表示總和不足,將左指標右移(),以增加數值。
- 若 :表示總和過大,將右指標左移(),以減少數值。
- 輸出判斷:
- 若迴圈終止時 仍為 ,則印出「抱歉,找不到」。
選項分析
本題為非選擇題(演算法設計申論題),無選項可作分析。針對本題三種常見解法之優缺點進行比較分析:
- 暴力搜尋法(Brute Force):
- 作法:使用兩層巢狀迴圈檢查所有 種數對組合。
- 分析:邏輯最簡單,但不具備演算法效率優化,時間複雜度達 。若資料量 龐大時效能極差,於高普考評分標準中難以取得滿分。
- 排序配合雙指標法(Two Pointers)(本解法採用):
- 作法:先對陣列進行最佳化排序(如快速排序或堆積排序,耗時 ),再以雙指標由兩端線性掃描(耗時 )。
第 三 題20 分
假設在時間 的時候,行程(process) 依序進來系統。其需要的 CPU 處理時間(burst time)和優先權(priority)的資訊如下表:
| Process | Burst time | priority |
|---|---|---|
| 10 | 3 | |
| 1 | 1 | |
| 2 | 3 | |
| 1 | 4 | |
| 5 | 2 |
分別使用 FCFS、SJF、nonpreemptive priority(數字小代表優先權高)、RR(quantum 為 1)的排程演算法,詳細畫出甘特圖(Gantt chart)表示執行這些行程所需時間。每單位時間執行哪個行程必須標示清楚。
登入後即可作答並保存紀錄。
核心觀念
本題考查四種 CPU 排程演算法的執行順序與甘特圖表示:
- FCFS(先到先服務):依進入系統的先後順序執行。
- SJF(短工作優先):每次選擇 CPU 執行時間最短的行程;本題未標示搶先,因此採非搶先方式。
- Nonpreemptive priority(非搶先優先權):選擇優先權最高的行程執行至完成。本題數字越小,優先權越高。
- RR(Round Robin,循環輪替):每個行程最多執行一個時間片;時間片用完仍未完成,就排到就緒佇列尾端。本題時間片 。
所有行程都在時間 到達。當行程的 burst time 或優先權相同時,依題目給定的進入順序 排定先後。
解題方法與甘特圖
每種演算法都依其規則決定執行順序,再將各行程的 burst time 累加,標出每段工作的起訖時間。
一、FCFS
依到達順序執行:。
時間刻度:。
二、SJF
依 burst time 由短至長排列。 與 的 burst time 都是 ,依到達順序先執行 ;其後依序為 。
時間刻度:。
三、Nonpreemptive priority
優先權數字越小,優先權越高。依優先權由高至低為 。 與 的優先權同為 ,依到達順序先執行 。
第 四 題20 分
(一) 志銘跟春嬌是很好的朋友,有邀約的話一定會欣然赴約。現在志銘想要跟春嬌約會,因為沒有網路,所以用傳統寫信的方式,寄給春嬌跟她約定約會的時間與地點。但因為傳統寄信的方式,可能因為某些因素,信件沒有送達或延遲很久時間才送達。
那麼請問志銘如果按照他定的時間地點準時赴約,春嬌一定會去嗎?會或不會,都請解釋原因。(10 分)
(二) 那如果春嬌收到信後,回確認信給志銘說會準時赴約,那請問春嬌按約定時間到達約會地點時,她能確定志銘一定會在那邊嗎?會或不會,都請解釋原因。(5 分)
(三) 承上述,那如果志銘有收到春嬌的確認信後,再回信說:「讚,我一定會去的。」請問這次,兩個人都會確定對方一定會準時到現場赴約嗎?請分析各種可能性。(5 分)
登入後即可作答並保存紀錄。
核心觀念
本題的核心觀念為分散式系統與電腦網路通訊中的經典理論——兩軍問題(Two Generals' Problem),以及不可靠傳輸媒介上的共識問題(Consensus Problem)與三向交握(Three-Way Handshake)原理。
- 不可靠通訊通道(Unreliable Channel): 在傳統郵件或無連接網路中,通訊鏈路具備「封包遺失(Packet Loss)」與「傳輸延遲(Transmission Delay)」的不確定性。
- 共同知識(Common Knowledge)與共識極限: 電腦科學已嚴格證明:在不可靠的通訊環境中,任何有限次數(Finite Steps)的訊息交換,都無法達成 確定性的共識。 最後一個發送確認訊息的一方,永遠無法得知該確認訊息是否成功送達對方手中,進而引發「無限確認遞迴(Infinite Acknowledgment Loop)」。
解題方法
將題目中的「傳統寄信」映射為計算機網路的「不可靠傳輸協定」,「赴約」映射為「分散式節點的狀態提交(State Commit / Agreement)」。
解題切入點為邊界狀態分析法(Worst-Case Analysis):題目問的是「一定會」或「能確定」(即 的確定性保證)。因此,只要能推導出任何一種因通訊失敗(遺失或延遲)而導致雙方認知脫節的情境,即可判定「無法確定」或「不會一定去」。
各小題詳細解析
(一) 志銘按照定的時間地點準時赴約,春嬌一定會去嗎?
- 分析: 此情況等同於網路中的「單向傳輸(One-Way Transmission)」,志銘發送請求後即單方面執行動作。 由於傳統寄信屬於不可靠傳輸,可能面臨以下兩種不可抗力因素:
- 信件遺失:春嬌自始至終皆未收到信件。
- 信件延遲過久:信件在約會時間過後才送達。
在上述兩種情況下,春嬌完全不知悉約會時間與地點。雖然春嬌具備「有邀約一定欣然赴約」的前提,但因未接收到有效訊息,根本不可能出現在約定地點。
- 結論:春嬌不會一定去(即不一定會去)。
(二) 春嬌回確認信後,按約定時間到達時,能確定志銘一定會在那邊嗎?
- 分析: 此情況等同於「雙向交握(Two-Way Handshake)」,即志銘發送請求(SYN),春嬌發送確認(ACK)。 春嬌雖然成功寄出確認信,但春嬌所處的狀態面臨資訊不對稱:
- 春嬌的確認信同樣可能在郵寄過程中遺失或延遲送達。
- 春嬌寄出確認信後,無法得知志銘是否確實收到該回信。
- 若志銘未收到春嬌的確認信,志銘可能認為「春嬌未收到原始邀請」或「春嬌不打算赴約」,進而取消赴約行程。
因此,春嬌到達現場時,無法排除志銘因未收到確認信而缺席的可能性。
- 結論:春嬌不能確定志銘一定會在那邊。
(三) 志銘收到確認信後再回信「讚,我一定會去的」,兩個人都會確定對方一定會準時到現場赴約嗎?
第 五 題20 分
假設我們使用多表置換密碼(polyalphabetic ciphers)機制來加密資料。這個機制需有個密鑰串(key stream),將我們的明文(Plaintext) 的每個字母,依序加上 key 值,轉換成新的字母,變成密文(Ciphertext)。
也就是:
加密機制為
解密機制為
其中,英文字母與數字的轉換如下表,並以 modulo 26 來計算(除以 26 的餘數)。
| Plaintext | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ciphertext | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
| Value | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
假設我們使用的密鑰串為:。
那麼收到的密文是 EUVVEUCNME。
請問原來的明文是什麼?
登入後即可作答並保存紀錄。
核心觀念
本題考多表置換密碼的解密。依題目規則,英文字母以 編碼,並使用公式:
若相減結果為負數,加上 後再換回字母。
解題方法
將密文逐字轉成數值,依序減去對應的密鑰值,再對 取餘數:
| 位置 | 密文 | 密文值 | 密鑰 | 明文 | |
|---|---|---|---|---|---|
| 1 | E | 4 | 12 | S | |
| 2 | U | 20 | 00 | U | |
| 3 | V | 21 | 19 | C | |
| 4 | V | 21 | 19 | C |