114 高普考普通考試 統計 資料處理概要 考古題詳解
第 一 題40 分
某一公司的採購資料如下:
- 每一位客戶包含有屬性:客戶編號、姓名、電話、地址。在客戶中,客戶編號具有唯一性。
- 每一張訂單包含有屬性:訂單編號、購貨日期。在訂單中,訂單編號具有唯一性。每一張訂單裡的每一項產品都有其訂購數量之屬性。
- 每一項產品包含有屬性:產品編號、產品名稱、單價。在產品中,產品編號具有唯一性。
- 每一位客戶可能都沒下過訂單,也可能下過多張訂單。
- 每一張訂單必定為某一位客戶且也僅能為一位客戶所下訂的。
- 每一張訂單包含有至少一項以上產品;每項產品可能被多張不同訂單所訂購過,也可能未被任何訂單所訂購過。
(每小題 10 分,共 40 分)
(一) 試依上述說明,為該公司畫出一實體關聯圖(Entity Relationship Diagram, ER Diagram)。該實體關聯圖需標出每一實體的名稱、屬性、主鍵屬性(Key attribute)、每一關係(Relationship)及其基數性(cardinality)。
(二) 試為該實體關聯圖(ER Diagram)決定出最簡化之各關聯表格。需描述出每一表格的名稱、屬性(attribute)、主要鍵(primary key)及外來鍵(foreign key)。
(三) 試寫出一 SQL 程式片段,為每一張訂單所採購之每一項產品,列印出該訂單編號、產品名稱及採購金額。
(四) 試寫出一 SQL 程式片段,為每一張訂單列印出該訂單編號及該訂單所採購總金額。
登入後即可作答並保存紀錄。
核心觀念
本題考查 ER 圖的實體、屬性、主鍵與基數性,以及將 ER 圖轉換成關聯表格的方法。訂單與產品是多對多關係,並且此關係本身有「訂購數量」屬性,因此需要以關聯表格表示。SQL 則考查多表連接、列層級金額計算及分組彙總。
解題方法
先依題意辨認三種實體:客戶、訂單、產品;再依唯一性指定主鍵。接著判斷兩組關係的基數:
- 客戶與訂單是一對多:一位客戶可有零張或多張訂單,每張訂單恰由一位客戶下訂。
- 訂單與產品是多對多:每張訂單至少包含一項產品,一項產品可出現在零張或多張訂單中。訂購數量屬於訂單與產品的配對,因此放在該關係的關聯表格。
(一)實體關聯圖
文字表示如下,基數以「最小值..最大值」標示:
客戶
客戶編號(主鍵)
姓名
電話
地址
客戶 1 ─── 0..* 訂單
訂單必須且僅屬於一位客戶
訂單
訂單編號(主鍵)
購貨日期
訂單 1..* ─── 0..* 產品
每張訂單至少包含一項產品;
每項產品可未曾被訂購,或出現在多張訂單中
產品
產品編號(主鍵)
產品名稱
單價
「訂單-產品」關係的屬性:訂購數量
若以常見 ER 圖符號表示,客戶與訂單為 ;訂單與產品為 。題目未提供訂單項目編號,因此訂單與產品的配對可由兩者的主鍵共同識別。
(二)最簡化的關聯表格
將一對多關係的外來鍵放在「多」的一方;將多對多關係拆成一張關聯表格。
| 表格 | 屬性 | 主要鍵 | 外來鍵 |
|---|---|---|---|
| 客戶 | 客戶編號、姓名、電話、地址 | 客戶編號 | 無 |
| 訂單 | 訂單編號、購貨日期、客戶編號 | 訂單編號 | 客戶編號參照客戶(客戶編號) |
| 產品 | 產品編號、產品名稱、單價 | 產品編號 | 無 |
| 訂單明細 | 訂單編號、產品編號、訂購數量 | (訂單編號、產品編號) | 訂單編號參照訂單(訂單編號);產品編號參照產品(產品編號) |
第 二 題20 分
為一由小而大排序之資料串列, 為一由大而小排序之資料串列,其分別含有 與 筆資料,且 :
(每小題 10 分,共 20 分)
(一) 請設計出一最佳演算法,以能最快速查詢一資料 是否存在於資料串列 或 內。
(二) 並求出該演算法之時間複雜度(請越精確估算越佳)。
登入後即可作答並保存紀錄。
核心觀念
本題考查已排序資料的查詢。對遞增或遞減的有序串列,都可用二分搜尋:每次檢查中間位置,依 與中間值的大小關係,排除不可能含有 的一半區間。
因為要查詢 是否存在於 或 ,兩個串列都必須納入搜尋。可先搜尋較短的串列;若找到 即可停止,否則再搜尋另一串列。
解題方法
以下使用 0 起始索引。對遞增串列 ,若中間值小於 ,則只需搜尋右半部;對遞減串列 ,若中間值大於 ,則只需搜尋右半部。兩者的比較方向不同,但每次都能將候選範圍縮小約一半。
搜尋(D, L1, L2):
先對較短的串列執行二分搜尋
若找到 D,回傳「存在」
再對另一串列執行二分搜尋
若找到 D,回傳「存在」
否則回傳「不存在」
二分搜尋(遞增串列 L, D):
low = 0, high = 長度(L) - 1
while low <= high:
mid = floor((low + high) / 2)
if L[mid] == D: 回傳「找到」
if L[mid] < D: low = mid + 1
else: high = mid - 1
回傳「未找到」
二分搜尋(遞減串列 L, D):
low = 0, high = 長度(L) - 1
while low <= high:
mid = floor((low + high) / 2)
if L[mid] == D: 回傳「找到」
if L[mid] > D: low = mid + 1
else: high = mid - 1
回傳「未找到」
第 三 題10 分
請撰寫一演算法,透過堆疊(stack)以計算出一後序式數學運算式(Postfix Expression)之結果,例如「」。
假設運算式中只含加、減、乘、除(、、、)四種運算子(operator),及 十種運算元(operand)。
登入後即可作答並保存紀錄。
核心觀念
後序式(Postfix Expression)把運算子寫在運算元之後,因此不需要括號或優先順序判斷。計算時由左至右掃描,使用堆疊暫存尚未參與運算的數值:
- 遇到運算元,將其數值推入堆疊。
- 遇到二元運算子,依序取出堆疊頂端的兩個數值運算,再將結果推回堆疊。
- 運算時,先取出的數值是右運算元,後取出的數值是左運算元。
解題方法
以堆疊 儲存數值,掃描運算式中的每個符號:
- 若符號是數字 ,執行
push(S, d)。 - 若符號是運算子 :
push(S, r)
- 掃描結束後,堆疊中唯一的數值即為運算結果。
偽程式碼:
計算後序式(E):
建立空堆疊 S
由左至右掃描 E 中的每個符號 x:
若 x 是數字:
push(S, x)
否則:
b ← pop(S)
a ← pop(S)
r ← a 與 b 依 x 運算
push(S, r)
return pop(S)
以題目範例 為例:
第 四 題30 分
應用適當的密碼學機制,可確保資料的機密性(confidentiality)、完整性(integrity)、鑑別性(authenticity)、不可否認性(non-repudiation)之安全目標。
(一) 試解釋何謂機密性、完整性、鑑別性、不可否認性。(8 分)
(二) 若 A 欲將機密資料 透過網路傳送給 B,請透過雜湊(Hash)函式及 RSA 加密法,設計一資料加密機制,以確保機密資料之機密性、完整性、鑑別性。(10 分)
(三) 若 A 欲將一電子合約 透過網路傳送給 B 簽章,請透過雜湊(Hash)函式及 RSA 加密法,設計一數位簽章機制,以確保電子合約之機密性、完整性、鑑別性、不可否認性。(12 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查資訊安全的四項目標,以及如何結合雜湊函式與 RSA 公開金鑰密碼法,安排加密與簽章。核心原則是:
- 機密性:用接收者的公鑰加密,只有持有相對應私鑰的接收者能解密。
- 完整性:比對資料雜湊值,確認資料傳送途中未遭竄改。
- 鑑別性:確認資料來自所宣稱的傳送者。
- 不可否認性:傳送者以自己的私鑰簽章,使其事後不能否認曾簽署該資料。
記號如下:A 的 RSA 金鑰為 ,B 的 RSA 金鑰為 ; 為安全雜湊函式。公開金鑰可供他人取得,但必須能確認公鑰確實屬於其名義上的持有人。
(一)四項安全目標
-
機密性(confidentiality) 防止未經授權者讀取資料內容。傳送者使用接收者的公鑰加密,只有接收者持有私鑰可解密。
-
完整性(integrity) 確保資料在儲存或傳輸過程中未被未授權地修改、刪除或插入。常以雜湊值或訊息鑑別碼檢查資料是否改變;若須防止攻擊者自行重算雜湊,還須搭配祕密金鑰或數位簽章。
-
鑑別性(authenticity) 確認資料來源或傳送者的身分是真實且可信的。數位簽章可用簽署者的私鑰產生,並以其公鑰驗證,達成來源鑑別。
-
不可否認性(non-repudiation) 使簽署者不能否認曾對特定資料簽章。數位簽章須能連結簽署者與簽署內容;實務上也須妥善管理私鑰,並確認簽署者公鑰及身分的對應關係。
(二)A 傳送機密資料 給 B
解題方法
以 B 的公鑰加密資料,保障機密性;再由 A 對資料雜湊值簽章,讓 B 能驗證資料完整性與來源。加密與簽章所用的金鑰不同:加密使用 B 的公鑰,簽章使用 A 的私鑰。
傳送流程
-
A 計算資料的雜湊值:
-
A 使用自己的私鑰對雜湊值簽章:
-
A 將資料與簽章組合,再以 B 的公鑰加密:
A 傳送密文 給 B。
接收與驗證流程
-
B 使用自己的私鑰解密:
-
B 計算收到資料的雜湊值 ,並以 A 的公鑰驗證簽章,取得或確認簽章所對應的雜湊值。
-
若驗證簽章成功,且簽章對應的雜湊值等於 ,則接受資料。
安全目標說明
- 機密性:只有持有 的 B 能解開 。
- 完整性:若 被竄改,雜湊值將不一致,簽章驗證失敗。
- 鑑別性:簽章以 A 的私鑰產生,B 以 A 的公鑰驗證,可確認資料來自持有 的一方。