112 年 國立臺灣大學生物機電系碩士班丁組《計算機概論(A)》
第 1 題
The following Boolean algebra expression is given as:
a) Convert this logical equation into an equivalent SOP (sum of product) term and use a truth table to show all the possible combinations of input conditions that will produce an output. (5%)
b) Draw a logic gate diagram for the expression (5%)
登入後即可作答並保存紀錄。
核心觀念
本題考查:
- 布林代數的分配律、互補律與吸收律。
- SOP(Sum of Products,乘積和):多個 AND 乘積項以 OR 相加。
- 真值表:列出所有輸入組合,判斷輸出 。
- SOP 電路的閘級實現:反相器、AND 閘與 OR 閘。
原式為:
解題方法與推導
先利用分配律將 分配至括號內:
此式已經是 SOP 形式,包含四個乘積項:
接著化簡:
因此:
利用布林代數公式:
也可直接使用:
所以:
再展開:
對 化簡:
因此得到最簡 SOP:
真值表
三個輸入變數共有 種組合。
以最簡 SOP:
逐列判斷:
| 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 1 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 | 1 |
因此,會使 的輸入組合為:
也可寫成標準最小項表示:
邏輯閘圖
採用最簡 SOP:
第 2 題10 分
The format of IEEE single-precision floating-point standard representation requires 23 fraction bits, 8 exponent bits, and 1 sign bit, with a total of 32 bits for each word. Convert the following binary number in the IEEE single-precision format to its decimal format.
11000001110000000000000000000000
登入後即可作答並保存紀錄。
此題考查 IEEE 754 單精度浮點數的轉換。
核心觀念:IEEE 754 單精度格式解析、指數偏差 (bias) 的處理、二進位轉十進位。
IEEE 754 單精度浮點數格式(32 位元)結構如下:
Sign (S): 1 位元 (最高位)
Exponent (E): 8 位元
Fraction (F): 23 位元
給定的二進位數是:11000001110000000000000000000000
-
解析各部分:
- Sign (S): 最高位是
1。這表示該數字是負數。 - Exponent (E): 接下來的 8 位元是
10000011。 - Fraction (F): 最後的 23 位元是
100000000000000000000000。
- Sign (S): 最高位是
-
轉換指數 (Exponent):
指數部分是10000011。
首先,將這個二進位數轉換為十進位:
。對於單精度浮點數,指數是帶有偏差 (bias) 的。偏差值是 。
實際的指數值 為:。 -
轉換分數 (Fraction):
分數部分是100000000000000000000000。
在 IEEE 754 標準中,對於正規化數 (normalized numbers),分數部分的前面隱含一個1.。
第 3 題10 分
For the following number list, perform a bubble sort in ascending order and show the list after each iteration. How many comparisons and swaps of elements are made when the list is sorted?
4 1 3 2 5
登入後即可作答並保存紀錄。
此題考查氣泡排序法 (Bubble Sort) 的執行過程與計算比較次數和交換次數。
核心觀念:氣泡排序法的運作原理、比較次數、交換次數。
氣泡排序法的基本原理是:重複地遍歷列表,比較相鄰的元素,如果它們的順序錯誤就交換它們。這個過程會一直重複,直到列表排序完成。在每一輪遍歷中,最大的(或最小的,取決於排序方向)元素會被「冒泡」到列表的末尾。
給定的數字列表是:4 1 3 2 5,我們要進行遞增排序(從小到大)。
第一輪 (Iteration 1):
從列表的第一個元素開始,與下一個元素比較。
- 比較
4和1:4 > 1,交換。列表變為:1 4 3 2 5。 (比較 1 次, 交換 1 次) - 比較
4和3:4 > 3,交換。列表變為:1 3 4 2 5。 (比較 2 次, 交換 2 次) - 比較
4和2:4 > 2,交換。列表變為:1 3 2 4 5。 (比較 3 次, 交換 3 次) - 比較
4和5:4 < 5,不交換。列表保持:1 3 2 4 5。 (比較 4 次, 交換 3 次)
第一輪結束後,最大的元素 5 (實際上是第二輪結束後才確定是 5,第一輪結束後確定的是 4) 已經被移動到正確的位置(最後一個元素)。
列表狀態:1 3 2 4 5。
總比較次數:4。總交換次數:3。
第二輪 (Iteration 2):
現在我們只需要考慮前 n-1 個元素(因為最後一個元素已經是最大的)。
- 比較
1和3:1 < 3,不交換。列表保持:1 3 2 4 5。 (比較 1 次, 交換 0 次) - 比較
3和2:3 > 2,交換。列表變為:1 2 3 4 5。 (比較 2 次, 交換 1 次) - 比較
3和4:3 < 4,不交換。列表保持:1 2 3 4 5。 (比較 3 次, 交換 1 次)
(注意:在這一輪的比較中,我們最多比較到倒數第二個未排序的元素。列表長度為 5,所以這一輪最多需要比較 5-1 = 4 次,但實際上是與前一個元素比較,所以是 3 次比較。)
第二輪結束後,第二大的元素 4 已經被移動到正確的位置。
列表狀態:1 2 3 4 5。
本輪比較次數:3。本輪交換次數:1。
總比較次數:4 + 3 = 7。總交換次數:3 + 1 = 4。
第 4 題10 分
If we have a depth-first traversal of a tree's pre-order and post-order as following:
pre-order: A, B, D, C, E, G, F, H, I
post-order: D, B, G, E, H, I, F, C, A
Please draw the corresponding binary tree. (10%)
登入後即可作答並保存紀錄。
此題考查如何根據樹的先序遍歷 (Pre-order Traversal) 和後序遍歷 (Post-order Traversal) 來重建二元樹 (Binary Tree)。
核心觀念:先序遍歷、後序遍歷、二元樹重建。
理解遍歷順序:
- 先序遍歷 (Pre-order Traversal): 訪問順序是「根 (Root) -> 左子樹 (Left Subtree) -> 右子樹 (Right Subtree)」。
- 後序遍歷 (Post-order Traversal): 訪問順序是「左子樹 (Left Subtree) -> 右子樹 (Right Subtree) -> 根 (Root)」。
重建步驟:
-
找出根節點:
根據後序遍歷的定義,最後一個節點一定是樹的根節點。
後序遍歷:D, B, G, E, H, I, F, C, A
所以,根節點是 A。 -
分割左右子樹:
在先序遍歷中,根節點之後的所有節點都屬於其子樹。
先序遍歷:A, B, D, C, E, G, F, H, I
在先序遍歷中,除了根 A 之外,緊跟著的是左子樹的節點,然後是右子樹的節點。
我們知道 A 是根,所以 A 後面的節點 B, D, C, E, G, F, H, I 構成了 A 的左右子樹。
現在我們需要根據後序遍歷來確定 B, D, C, E, G, F, H, I 中哪些屬於左子樹,哪些屬於右子樹。
在後序遍歷D, B, G, E, H, I, F, C, A中,A 之前的部分D, B, G, E, H, I, F, C包含了左、右子樹的所有節點。
我們找到 A 在後序遍歷中的位置。A 之後(在先序遍歷中)的節點,在 A 之前(在後序遍歷中)的節點中,A 左邊的節點屬於左子樹,A 右邊的節點(在後序遍歷中)屬於右子樹。
更簡單的方法是:在後序遍歷D, B, G, E, H, I, F, C, A中,找到 A 的前一個節點 C。C 在後序遍歷中是 A 的直接前驅,這意味著 C 是 A 的右子樹的根節點(因為後序是左->右->根)。
那麼,在先序遍歷A, B, D, C, E, G, F, H, I中,從 A 之後的第一個節點開始,直到 C 的前一個節點(也就是 A 的左子樹的所有節點)為止。
在後序遍歷D, B, G, E, H, I, F, C, A中,C 之前的節點是D, B, G, E, H, I, F。
在先序遍歷A, B, D, C, E, G, F, H, I中,A 之後的節點是B, D, C, E, G, F, H, I。
C 在先序遍歷中的位置是第 4 個 (A, B, D, C, E, G, F, H, I)。
因此,A 的左子樹節點是先序遍歷中 A 之後,到 C 之前的所有節點:B, D。
A 的右子樹節點是先序遍歷中 C 以及 C 之後的所有節點:C, E, G, F, H, I。左子樹節點集 (先序): {B, D}
右子樹節點集 (先序): {C, E, G, F, H, I}左子樹節點集 (後序): {D, B}
右子樹節點集 (後序): {G, E, H, I, F, C} -
遞歸重建左子樹:
- 左子樹的先序遍歷是:B, D
- 左子樹的後序遍歷是:D, B
- 左子樹的根節點是後序遍歷的最後一個:B。
- 在先序遍歷
B, D中,B 是根,B 後面的 D 屬於 B 的子樹。 - 在後序遍歷
D, B中,B 是根,B 之前的 D 屬於 B 的子樹。 - B 的右子樹的節點是後序遍歷中 B 之前的節點:{D}。
- B 的左子樹是空的。
- 所以,B 的右子樹的先序是 {D},後序是 {D}。
- 遞歸重建 B 的右子樹:根是 D,左子樹和右子樹都是空的。
- 因此,B 的左邊是空,右邊是 D。
-
遞歸重建右子樹:
- 右子樹的先序遍歷是:C, E, G, F, H, I
- 右子樹的後序遍歷是:G, E, H, I, F, C
- 右子樹的根節點是後序遍歷的最後一個:C。
第 5 題10 分
In RSA algorithm, suppose p is 7, q is 11, and e is 13, Find the n and d. (10%)
登入後即可作答並保存紀錄。
核心觀念
RSA 使用兩個質數 、 建立模數:
其歐拉函數為:
公開金鑰中的 必須與 互質;私密指數 則是 在模 下的乘法反元素,滿足:
本題要求計算模數 與私密指數 。
解題方法
1. 計算
題目給定:
因此:
2. 計算
因為 、 均為質數:
代入數值得:
3. 求
第 6 題10 分
Given an initially empty hash table with capacity 11 and hash function H(x) = x mod 11. Keys 0, 1, 8, 9 are already in the table. Insert keys 52, 44, 56, 53, 61, 64 using linear probing (in that order). (10%)
0 1 2 3 4 5 6 7 8 9 10
0 1 8 9
登入後即可作答並保存紀錄。
核心觀念
本題考查雜湊表(hash table)搭配線性探測(linear probing)處理碰撞的方法。
雜湊函數為:
因此每個鍵值先利用除以 的餘數決定其初始位置。若該位置已被占用,便依序檢查下一個位置:
當探測到索引 後,必須循環回索引 ,稱為循環線性探測。
本題容量為 ,索引範圍為 至 。
解題方法
初始雜湊表如下:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 內容 | 0 | 1 | 空 | 空 | 空 | 空 | 空 | 空 | 8 | 9 | 空 |
依題目指定順序插入各鍵值。
插入
索引 已有 ,繼續探測索引 ;索引 已有 ,再探測索引 。
索引 為空,因此將 放入索引 。
插入
索引 已有 ,索引 已有 ,索引 為空。
因此將 放入索引 。
插入
索引 已有 ,索引 已有 ,索引 為空。
因此將 放入索引 。
插入
探測順序為:
第 7 題10 分
Let G be the grammar shown below. The ɛ (epsilon) stands for the empty string. Draw the parse tree for the string w = xx$ (10%)
S → AS
A → (AB)
A → ɛ
B → (A)
B → x
登入後即可作答並保存紀錄。
核心觀念
文法的 parse tree 必須符合兩項條件:
- 根節點為開始符號 。
- 每個非終結符都必須依照某條產生式展開,最後所有葉節點串接後,恰好得到目標字串。
題目中的 $ 是輸入結束標記,通常不是文法產生的終結符,因此實際需要判斷文法是否能產生 。
解題方法
文法為:
觀察開始符號 :
- 唯一的產生式是 。
- 套用一次後,右側仍然包含一個 。
- 文法中沒有 ,也沒有其他能消除 的產生式。
因此推導必然形成:
其對應的樹形會出現無限延伸的 $S
第 8 題10 分
Construct the even parity Hamming code word for a data byte 1001101. (10%)
登入後即可作答並保存紀錄。
此題考查漢明碼 (Hamming Code) 的構造,特別是偶校驗 (Even Parity) 的漢明碼。
核心觀念:漢明碼的原理、校驗位 (Parity Bits) 的位置、校驗位的計算、數據位的放置。
漢明碼用於檢測和糾正單比特錯誤。它的構造方法是在數據位之間插入校驗位。
對於一個長度為 的數據字節,我們需要 個校驗位,使得 。
給定的數據是 1001101,長度 。
我們需要找到最小的 使得 。
- 如果 : (不足)
- 如果 : (不足)
- 如果 : (不足)
- 如果 : (足夠)
所以,我們需要 4 個校驗位 ()。
漢明碼的總長度為 位。
校驗位通常放置在 2 的冪次方位置上: (即位置 1, 2, 4, 8)。
數據位放置在剩餘的位置上。
位元位置:1 2 3 4 5 6 7 8 9 10 11
編碼類型: D D D D D D D
其中 D 代表數據位。
數據位是 1001101。
我們將數據位按順序放入 D 的位置:
位置 3: 1
位置 5: 0
位置 6: 0
位置 7: 1
位置 9: 1
位置 10: 0
位置 11: 1
漢明碼的框架(帶有數據位):
位置:1 2 3 4 5 6 7 8 9 10 11
位元: 1 0 0 1 1 0 1
接下來,計算每個校驗位的值,以實現偶校驗 (Even Parity)。
偶校驗意味著,該校驗位所覆蓋的所有位元(包括校驗位本身)中,1 的數量必須是偶數。
計算 (位置 1):
覆蓋所有位址,其位址的最低位是 1。
這些位址是:1, 3, 5, 7, 9, 11。
對應的位元是:, 1, 0, 1, 1, 1。
我們需要 的 1 的數量為偶數。
即, (二進位表示)。
總和是 (十進位)。
我們需要 的 1 的數量為偶數。
數據位中的 1 的數量是:1 (在 pos 3) + 1 (在 pos 7) + 1 (在 pos 9) + 1 (在 pos 11) = 4。
覆蓋的數據位是:位置 3 (1), 位置 5 (0), 位置 7 (1), 位置 9 (1), 位置 11 (1)。
這些數據位中的 1 的數量是:1 + 0 + 1 + 1 + 1 = 4。
為了使總和(包括 )為偶數,由於數據位的 1 的數量已經是偶數 (4),所以 必須是 0。
。
計算 (位置 2):
覆蓋所有位址,其位址的第二低位是 1。
這些位址是:2, 3, 6, 7, 10, 11。
對應的位元是:, 1, 0, 1, 0, 1。
第 9 題
Suppose you run the following assembly program on a computer. The computer consists of 8 memory registers (M[1] to M[8]), 2 input registers (I [A] and I [B]), and one output register (OUT). Consider the following operations and controls for the assembly.
12 MOV I [A] M[1]
13 MOV I [B] M[2]
14 ADD I [A] I[B]
15 MOV I [A] OUT
16 MOV I [B] M[3]
17 ADD I [A] I[B]
18 MOV M[4] OUT
19 HALT
OPERATIONS AND CONTROLS
1: MOVE X Y: X = Y
2: ADD X Y: OUT = X + Y
3: SUB X Y: OUT = X - Y
4: HALT: halt
Suppose the initial contents of the registers are: M[1] = 0001; M[2] = 0011; M[3] = 0011; M[4] = 0100. Answer the questions below. Write your answers in the format of 4-digit decimal numbers.
a) What is the value of OUT after the instruction at location 15 completes? (3%)
b) What is the value of OUT when the program halts? (2%)
c) What is the value of M [4] after the instruction at location 16 completes? (2%)
d) What is the value of M [4] when the program halts? (3%)
登入後即可作答並保存紀錄。
此題考查組合語言程式的執行追蹤,涉及記憶體、輸入暫存器和輸出暫存器的操作。
核心觀念:組合語言指令、暫存器操作、記憶體存取、程式流程控制。
我們需要追蹤程式執行過程中,暫存器 OUT 和 M[4] 的變化。
程式碼從位置 12 開始執行。
初始值:
M[1] = 0001 (十進位 1)
M[2] = 0011 (十進位 3)
M[3] = 0011 (十進位 3)
M[4] = 0100 (十進位 4)
I[A] 和 I[B] 的初始值未給定,但指令 12 和 13 將 M[1] 和 M[2] 的值載入 I[A] 和 I[B]。
OUT 的初始值未給定。
指令追蹤:
-
12 MOV I [A] M[1]: 將 M[1] 的值 (0001) 複製到 I[A]。
I[A] = 0001 (1) -
13 MOV I [B] M[2]: 將 M[2] 的值 (0011) 複製到 I[B]。
I[B] = 0011 (3) -
14 ADD I [A] I[B]: 執行加法操作。OUT = I[A] + I[B]。
OUT = 1 + 3 = 4。
OUT = 0100 (4) -
15 MOV I [A] OUT: 將 OUT 的值 (0100) 複製到 I[A]。
I[A] = 0100 (4) -
16 MOV I [B] M[3]: 將 I[B] 的值 (0011) 複製到 M[3]。
M[3] = 0011 (3) (M[3] 的值沒有改變,因為它本來就是 0011) -
17 ADD I [A] I[B]: 執行加法操作。OUT = I[A] + I[B]。
I[A] 現在是 4。
I[B] 仍然是 3 (從指令 13 載入後未改變)。
OUT = 4 + 3 = 7。
OUT = 0111 (7) -
18 MOV M[4] OUT: 將 OUT 的值 (0111) 複製到 M[4]。
M[4] = 0111 (7) -
19 HALT: 程式終止。
回答問題:
第 10 題10 分
A happy number is defined by the following process. Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers, while those that do not end in 1 are unhappy numbers. In other words, numbers that are happy follow a sequence that ends in 1. All unhappy numbers follow sequences that reach the cycle. For example, 19 is a happy number, as the associated sequence is:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1.
Design a computer program to find happy numbers up to 1000. You may use any computer programming language for this problem. (10%)
登入後即可作答並保存紀錄。
核心觀念
本題旨在測驗基礎演算法設計、迴圈與流程控制、**數位拆解(Digit Extraction)以及環路檢測(Cycle Detection)**的能力。
- 快樂數(Happy Number)定義:
對於正整數 ,將其各個位數平方後加總得到新數,重複此過程:- 若最終結果收斂為 ,則該數為快樂數。
- 若過程陷入不包含 的循環,則該數為非快樂數(Unhappy number)。
- 數位拆解運算:
利用模數運算(n % 10)取得個位數,再配合整數除法(n / 10或n // 10)去除個位數,依序取出每一位數並累加平方。 - 有界性與循環特性:
- 對於 ,其三位數各數位平方和的最大值為 ;四位數 的平方和為 。因此,任何數字至多在一次運算後就會落入 的範圍內。
- 由於狀態空間有限,數列必然會在有限步內抵達 或進入循環。數論證明在十進位下,所有非快樂數最終都會落入同一個長度為 8 的固定循環:
解題方法
程式設計採用模組化設計(Modular Design),拆解為兩個主要部分:
-
子函式:計算數位平方和(
sum_of_squares)
輸入整數 ,初始化總和sum = 0,當 時:- 取出個位數:
- 累加平方:
- 移去個位數:
- 回傳
sum。
-
子函式:判斷是否為快樂數(
is_happy)
檢測是否有環(Cycle)的常見方法有三種:- 雜湊集合法(Hash Set):使用集合記錄走過的數字。若新數字為 則回傳
true;若新數字已存在集合中則代表進入循環,回傳false。 - 快慢指標法(Floyd's Cycle-Finding Algorithm):利用慢指標每次走一步、快指標每次走兩步,若快指標抵達 則為快樂數;若快慢指標相遇且不為 則代表有環。
- 固定環特徵法:所有非快樂數必經數字 ,因此判斷條件可簡化為 且 。
- 雜湊集合法(Hash Set):使用集合記錄走過的數字。若新數字為 則回傳
-
主程式:遍歷 至
使用迴圈遍歷整數 ,若is_happy(i)為真,則輸出或存入結果清單中。
程式實作
以下提供考試評分標準中最推薦的 Python 實作(使用 Hash Set) 與 C++ 實作(使用快慢指標):