108 年 國立成功大學電腦與通信工程研究所甲組《離散數學》
第 1 題10 分
Suppose that each child born is equally likely to be a boy or a girl. Consider a family with exactly three children. Let BBG indicate that the first two children born are boys and the third child is a girl.
a. Define a sample space whose outcomes are all possible genders of the three children.
b. Write each of the following events as a set and find its probability.
i. The event that exactly one child is a girl.
ii. The event that at least two children are girls.
登入後即可作答並保存紀錄。
核心觀念
本題屬於離散數學中**機率論(Probability Theory)**的基本範疇,核心考點包含:
- 樣本空間(Sample Space, ):隨機試驗中所有可能結果所組成的集合。本題中每名新生兒的性別為獨立試驗,且生男()與生女()的機率均等()。
- 古典機率模型(Classical Probability Model):當樣本空間 為有限集,且每個基本事件(Outcome)發生的機率皆相等時,事件 發生的機率定義為:
其中 為事件 的元素個數, 為樣本空間的元素總數。 - 事件(Event):樣本空間的子集(Subset),根據題目條件以集合形式(Set Notation)表示。
解題方法
依序針對題目所求進行列舉與機率計算:
-
建立樣本空間 :
家庭中有 3 名子女,出生順序有先後之分(第一胎、第二胎、第三胎)。依乘法法則(Rule of Product),總可能結果數為 種。以三元字串表示三名子女的性別序列,列舉出所有結果。 -
描述事件並計算機率:
- 小題 (b.i):尋找性別序列中「恰好包含 1 個 (及 2 個 )」的所有元素組成集合 ,並計算其佔樣本空間的比例 。
- 小題 (b.ii):尋找性別序列中「包含至少 2 個 (即 2 個 或 3 個 )」的所有元素組成集合 ,並計算其佔樣本空間的比例 。
小題分析與推導
a. 定義樣本空間(Sample Space)
設 表示男孩(Boy), 表示女孩(Girl)。按出生順序(第一胎、第二胎、第三胎)列舉所有可能的性別組合,樣本空間 為:
樣本空間的大小為 。因生男與生女機率均等,此 8 種結果發生的機率皆為 ,滿足均等機率假設。
b.i. 恰好有一名女孩的事件與機率(Exactly one child is a girl)
- 集合表示:在樣本空間 中,恰含有 1 個字母 的元素為第一胎為女()、第二胎為女()、第三胎為女()。設此事件為 ,則:
第 2 題10 分
A student takes a Truth/False exam with 10 questions. The full marks for the test is 10 points. For a specific question, a student gets one point (+1) when the answer is correct and deducts one point (-1) when the answer is wrong. If the student does not write down the answer, he/she gets zero point (0) for that question. Calculate the expected score for the following two cases.
a. Assume a student does not know the answer. He/she guesses an answer for each problem.
b. Assume a student has 70% confident to the answer of a question. He/she fills an answer for each problem.
登入後即可作答並保存紀錄。
核心觀念
-
離散隨機變數與期望值(Expected Value):
若離散隨機變數 的可能取值為 ,對應機率分別為 ,則 的期望值定義為:
-
期望值的線性性質(Linearity of Expectation):
對於任意隨機變數 (無論彼此是否獨立),總和的期望值等於各隨機變數期望值的總和:
當試驗為重複且同分布時,總得分期望值等於「單題期望值 總題數」。
解題方法
設考試總題數 。令離散隨機變數 表示學生在第 題()所得的分數。
依據題意,單題計分規則如下:
- 答對:
- 答錯:
- 未作答:
學生試卷的總得分為隨機變數 。
由期望值的線性性質,總得分期望值可表示為:
a. 完全隨機猜測情況
- 題目條件:學生不知道答案,每題皆進行隨機猜測。
- 機率分布:是非題的選項只有「對」與「錯」兩種。隨機猜測時,答對與答錯的機率皆為 ,且每題皆作答()。
- 單題得分期望值:
- 總得分期望值:
b. 具 70% 信心度情況
- 題目條件:學生對每題答案有 的信心度,且每題皆填寫答案。
- 機率分布:信心度 表示學生答對該題的機率為 ,答錯的機率為 。
第 3 題10 分
If A is late then B is late. If either A or B is late, then the class is boring. Suppose that the class is not boring. What can you conclude about A?
登入後即可作答並保存紀錄。
核心觀念
本題考查**命題邏輯(Propositional Logic)**的符號化與邏輯推論法則。解題時需運用以下定義與定理:
- 條件句與逆否命題(Contrapositive):
- 否定後項律(Modus Tollens):
若已知 且已知 ,可推導出 。 - 德摩根定律(De Morgan's Laws):
- 簡化律(Simplification):
由 可推導出單一命題 (亦可導出 )。
解題方法
步驟一:命題符號化
定義下列邏輯變數:
- :A 遲到(A is late)
- :B 遲到(B is late)
- :這堂課很無聊(The class is boring)
依據題目給定的三個已知前提(Premises):
- 前提一:若 A 遲到,則 B 遲到。
- 前提二:若 A 或 B 遲到,則這堂課很無聊。
- 前提三:這堂課不無聊。
步驟二:邏輯推導過程
- 由前提二 與前提三 ,套用否定後項律(Modus Tollens),可得:
- 對 套用德摩根定律(De Morgan's Laws),可得:
- 對 套用簡化律(Simplification),可單獨導出:
(同理亦可導出 )
第 4 題20 分
Design a circuit for both four-bit (x,y,z) odd parity generator and five-bit odd parity checker.
登入後即可作答並保存紀錄。
核心觀念
- 奇同位 (Odd Parity) 定義:
在數位邏輯與資料傳輸中,同位元 (Parity Bit) 用於基礎的錯誤檢測。奇同位要求包含同位位元在內的所有傳輸位元中,「1 的總個數」必須保持為奇數 (Odd)。 - 互斥或 (XOR) 與同或 (XNOR) 運算特性:
- 互斥或閘 (XOR, ) 具備奇態檢測 (Odd Function) 特性。多輸入 XOR 運算結果為 當且僅當輸入中「 的總個數為奇數」。
- 同或閘 (XNOR, ) 為 XOR 的反相輸出(即加邏輯非 NOT)。多輸入 XNOR 運算結果為 當且僅當輸入中「 的總個數為偶數」。
- 同位產生器與檢查器的功能分工:
- 四位元奇同位產生器 (Four-Bit Odd Parity Generator):傳輸端根據 3 個資料位元 產生 1 個同位位元 ,組合形成長度為 4 位元的奇同位碼 。
- 五位元奇同位檢查器 (Five-Bit Odd Parity Checker):接收端接收 5 位元碼 ,檢測該 5 位元資料是否滿足奇同位規則,並輸出錯誤指示訊號。
解題方法
一、 四位元 奇同位產生器設計
-
邏輯函數推導:
設 3 位元資料為 ,生成的同位位元為 。為了保證組合碼 中 1 的個數為奇數,四個位元的 XOR 運算結果必須為 :
將等式兩邊同時與 進行 XOR 運算,可得同位位元 的布林表達式:
-
真值表 (Truth Table):
同位位元 傳輸碼 中 1 的總個數 0 0 0 0 1 1 (奇數) 0 0 1 1 0 1 (奇數) 0 1 0 1 0 1 (奇數) 0 1 1 0 1 3 (奇數) 1 0 0 1 0 1 (奇數) 1 0 1 0 1 3 (奇數) 1 1 0 0 1 3 (奇數) 1 1 1 1 0 3 (奇數) -
邏輯電路實作:
- 布林表達式:
- 電路結構:先將輸入 與 接至第一個 2-input XOR 閘,其輸出再與輸入 一起接至一個 2-input XNOR 閘(或 XOR 閘串接 NOT 閘),輸出即為同位位元 。
二、 五位元奇同位檢查器設計
-
邏輯函數推導:
設接收端接收到的 5 位元資料為 。
若資料傳輸正常(無錯誤),5 位元中 1 的總個數應為奇數,即:
定義錯誤檢測輸出旗標 ( 表示發生傳輸錯誤; 表示傳輸無誤):- 當 1 的個數為偶數時,代表發生單數個位元錯誤,此時 。
- 當 1 的個數為奇數時,代表資料符合規格,此時 。
因此錯誤指示輸出的布林表達式為:
(若定義有效旗標 表示資料正確,則 )。 -
電路樹狀結構 (Tree Architecture):
為降低閘延遲 (Gate Delay),採用二元樹 (Binary Tree) 結構實作 5 輸入運算:
第 5 題15 分
Draw the Hasse diagram for (P({1,2,3}), ⊆), where P(S) denote the power set of S.
登入後即可作答並保存紀錄。
核心觀念
本題考查冪集上的包含關係所形成的偏序集合,以及 Hasse diagram 的繪製方法。
集合
的冪集為
偏序關係為集合包含關係 。在此偏序中:
- 是最小元素;
- 是最大元素;
- 集合元素個數越多,通常位於越上層。
Hasse diagram 不畫出所有包含關係,只畫「覆蓋關係」。若 ,且不存在集合 使得
則稱 覆蓋 ,記作 。
對冪集而言,覆蓋關係的判斷方式是:
也就是由下層集合增加恰好一個元素即可到達上層集合。
解題方法
先依照集合基數分層:
接著只連接相鄰層中具有包含關係的集合。
- 覆蓋三個單元素集合:
- 單元素集合與雙元素集合之間的覆蓋關係為:
- 三個雙元素集合皆被 覆蓋:
第 6 題15 分
Please compute the time complexity of "Bubble Sort". Trace through the bubble sort algorithm for the following data set: x1 = 5; x2 = 4; x3 = 2; x4 = 1; x5 = 3.
登入後即可作答並保存紀錄。
核心觀念
Bubble Sort(泡沫排序法)反覆比較相鄰元素:
- 若左側元素大於右側元素,便交換兩者。
- 每完成一輪掃描,尚未排序部分的最大值會被推到最右端。
- 第 輪完成後,最右側已有 個元素定位完成。
標準升冪排序的核心概念是「相鄰比較與交換」。
解題方法
以資料
進行升冪排序。每一輪都由左至右比較相鄰元素。
第 1 輪
依序比較:
- 比較 與 :
- 比較 與 :
- 比較 與 :
- 比較 與 :
第 1 輪結束:
最大值 已移至最右端。
第 2 輪
最右側的 已排序,因此只需處理前四個元素:
- ,交換:
- ,交換:
- ,交換:
第 2 輪結束:
第 3 輪
只需處理前面三個尚未固定的元素:
- ,交換:
- 比較 與 ,不交換。
- 比較 與 ,不交換。
第 3 輪結束:
第 4 輪
比較剩餘的相鄰元素 與 ,順序正確,不交換。
第 7 題20 分
Given a Merge() function (see the following figure). Please write a MergeSort() function. Please compute the complexity of "Merge Sort"
function Merge (y1, y2, ..., Yı, Z1, Z2,..., Zm ∈U)
i-1,j-1, k-1
while k≤l+m do
if il then
XkZj
Lj-j+1
else if j> m then
XkYi
Li-i+1
else if yi z; then
Lk-k+1
return X1,X2,..., X1+m
else
XkZj
Lj-j+1
登入後即可作答並保存紀錄。
核心觀念
題目給定的 Merge() 函式,前提是兩個輸入序列已經分別排序:
Merge() 每次比較兩個序列目前最前面的元素,將較小者放入輸出序列,因此可在 時間內合併成一個排序序列。
MergeSort() 採用分治法:
- 將序列分成左右兩半。
- 遞迴排序左右兩半。
- 使用題目給定的
Merge()合併兩個已排序序列。
解題方法
設目前要排序的範圍為 ,中點為
當範圍內只有一個元素時,序列本身已經排序完成。否則分別排序:
再將兩個排序結果交給 Merge() 合併。
MergeSort 函式
function MergeSort(A[1..n])
MergeSortRange(A, 1, n)
return A
function MergeSortRange(A, left, right)
if left >= right then
return
mid ← floor((left + right) / 2)
MergeSortRange(A, left, mid)
MergeSortRange(A, mid + 1, right)
C ← Merge(A[left..mid], A[mid+1..right])
for t ← 1 to right - left + 1 do
A[left + t - 1] ← C[t]