113 年 國立中山大學資訊工程學系資訊安全碩士班《離散數學與演算法》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 1 題10 分

  1. [10%] In how many ways can Richard assign 22 students in four classrooms so that there are at least
    three students in a classroom? (a student assigned different seats is considered as different cases in a
    classroom)

登入後即可作答並保存紀錄。

這一題的完整詳解

設四間教室的人數為 n1,n2,n3,n4n_1,n_2,n_3,n_4,其中 ni≥3n_i\ge 3 且

n1+n2+n3+n4=22.n_1+n_2+n_3+n_4=22.

令 xi=ni−3≥0x_i=n_i-3\ge 0,則

x1+x2+x3+x4=10,x_1+x_2+x_3+x_4=10,

故人數分配方式數為

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 2 題10 分

  1. [10%] How many positive integers up to 188,071 that are relatively prime to 188,071?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

  • 歐拉函數(Euler's Totient Function):設 nn 為正整數,歐拉函數 ϕ(n)\phi(n) 定義為不超過 nn 且與 nn 互質(relatively prime, 即 gcd⁡(a,n)=1\gcd(a, n) = 1)的正整數個數。
  • 算術基本定理與質因數分解(Prime Factorization):任何大於 1 的正整數皆可唯一表示為質數的乘積。若 nn 的質因數分解式為:
    n=p1e1p2e2⋯pkekn = p_1^{e_1} p_2^{e_2} \cdots p_k^{e_k}
    其中 p1,p2,…,pkp_1, p_2, \dots, p_k 為相異質數,e1,e2,…,ek≥1e_1, e_2, \dots, e_k \ge 1。
  • 歐拉函數計算公式:
    ϕ(n)=n(1−1p1)(1−1p2)⋯(1−1pk)=∏i=1kpiei−1(pi−1)\phi(n) = n \left(1 - \frac{1}{p_1}\right)\left(1 - \frac{1}{p_2}\right)\cdots\left(1 - \frac{1}{p_k}\right) = \prod_{i=1}^k p_i^{e_i - 1}(p_i - 1)
    特別地,當 nn 為無平方因子數(square-free number,即所有 ei=1e_i = 1)時,公式簡化為:
    ϕ(n)=(p1−1)(p2−1)⋯(pk−1)\phi(n) = (p_1 - 1)(p_2 - 1)\cdots(p_k - 1)

解題方法

本題欲求小於或等於 188,071188,071 且與 188,071188,071 互質的正整數個數,即計算 ϕ(188,071)\phi(188,071) 的值。解題步驟分為「質因數分解」與「帶入歐拉函數公式」兩階段:

  1. 對 N=188,071N = 188,071 進行質因數分解:
    利用試除法(Trial Division)從小質數開始檢驗:
    • 快速排除 2,3,5,7,112, 3, 5, 7, 11(皆無法整除 188,071188,071)。
    • 試除質數 1313:
      188,071÷13=14,467188,071 \div 13 = 14,467
      得 1313 為第一質因數。
    • 對商數 14,46714,467 繼續試除質數:
      • 14,467÷13=1,112.84…14,467 \div 13 = 1,112.84\dots(無法整除)
      • 試除質數 1717:
        14,467÷17=85114,467 \div 17 = 851
        得 1717 為第二質因數。
    • 對商數 851851 繼續試除質數:
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 3 題10 分

  1. (a) [10%] In how many ways can Peter select n candies from a large supply of four different kinds of
    candies (all of the same size) if the selection must include an even number of one specific type of
    candies?
    (b) [10%] In how many ways can Peter select n candies from a large supply of three different kinds
    of candies (all of the same size) if the selection must include odd numbers of two specific types of
    candies?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題屬於**離散數學中的組合計數(Combinatorics)與生成函數(Generating Functions)**考題,具體考點包含:

  1. 重複組合(Combinations with Repetition)與限制條件:在非負整數解的限制下,計算將 nn 個相同的物件分給不同種類的分配方式。
  2. 一般生成函數(Ordinary Generating Functions, OGF):將種類選擇的限制條件轉換為級數相乘,再利用部分分式拆解法(Partial Fraction Decomposition)求出 xnx^n 的係數 [xn][x^n]。
  3. 二項式定理與負整數次方展開(Binomial Expansion with Negative Exponents):
    1(1−x)k+1=∑n=0∞(n+kk)xn=∑n=0∞Hnk+1xn\frac{1}{(1-x)^{k+1}} = \sum_{n=0}^{\infty} \binom{n+k}{k} x^n = \sum_{n=0}^{\infty} H^{k+1}_n x^n

解題方法

(a) 詳解推導

題目要求從 4 種不同的糖果中挑選 nn 顆,其中指定 1 種糖果的數量必須為偶數(0,2,4,…0, 2, 4, \dots),其餘 3 種無限制(0,1,2,…0, 1, 2, \dots)。

方法一:一般生成函數法(標準正攻法)
設 4 種糖果分別為 A,B,C,DA, B, C, D,並設 AA 的選取數量必須為偶數。

  1. 建立各種類的生成函數:

    • 糖果 AA(偶數顆):1+x2+x4+x6+⋯=11−x21 + x^2 + x^4 + x^6 + \dots = \frac{1}{1 - x^2}
    • 糖果 B,C,DB, C, D(無限制):1+x+x2+x3+⋯=11−x1 + x + x^2 + x^3 + \dots = \frac{1}{1 - x}
  2. 建立整體生成函數 f(x)f(x):
    f(x)=(11−x2)⋅(11−x)3=1(1−x)4(1+x)f(x) = \left(\frac{1}{1 - x^2}\right) \cdot \left(\frac{1}{1 - x}\right)^3 = \frac{1}{(1-x)^4(1+x)}

  3. 進行部分分式拆解(Partial Fraction Decomposition):
    設 f(x)=A1+x+B1−x+C(1−x)2+D(1−x)3+E(1−x)4f(x) = \frac{A}{1+x} + \frac{B}{1-x} + \frac{C}{(1-x)^2} + \frac{D}{(1-x)^3} + \frac{E}{(1-x)^4}
    解得各項係數為:
    A=116,B=116,C=18,D=14,E=12A = \frac{1}{16}, \quad B = \frac{1}{16}, \quad C = \frac{1}{8}, \quad D = \frac{1}{4}, \quad E = \frac{1}{2}
    故 f(x)f(x) 可表示為:
    f(x)=116(1+x)+116(1−x)+18(1−x)2+14(1−x)3+12(1−x)4f(x) = \frac{1}{16(1+x)} + \frac{1}{16(1-x)} + \frac{1}{8(1-x)^2} + \frac{1}{4(1-x)^3} + \frac{1}{2(1-x)^4}

  4. 提取 xnx^n 的係數 [xn]f(x)[x^n] f(x):
    利用廣義二項式定理,可得:
    [xn]11+x=(−1)n[x^n] \frac{1}{1+x} = (-1)^n
    [xn]1(1−x)k+1=(n+kk)[x^n] \frac{1}{(1-x)^{k+1}} = \binom{n+k}{k}
    因此:
    [xn]f(x)=116(−1)n+116(n0)+18(n+11)+14(n+22)+12(n+33)[x^n] f(x) = \frac{1}{16}(-1)^n + \frac{1}{16}\binom{n}{0} + \frac{1}{8}\binom{n+1}{1} + \frac{1}{4}\binom{n+2}{2} + \frac{1}{2}\binom{n+3}{3}

  5. 化簡為多項式閉形式(Closed Form):
    將組合項化簡並通分(分母為 48):
    12(n+33)=n3+6n2+11n+612=4n3+24n2+44n+2448\frac{1}{2}\binom{n+3}{3} = \frac{n^3 + 6n^2 + 11n + 6}{12} = \frac{4n^3 + 24n^2 + 44n + 24}{48}
    14(n+22)=n2+3n+28=6n2+18n+1248\frac{1}{4}\binom{n+2}{2} = \frac{n^2 + 3n + 2}{8} = \frac{6n^2 + 18n + 12}{48}
    18(n+11)=n+18=6n+648\frac{1}{8}\binom{n+1}{1} = \frac{n+1}{8} = \frac{6n + 6}{48}
    116(n0)=116=348\frac{1}{16}\binom{n}{0} = \frac{1}{16} = \frac{3}{48}
    116(−1)n=3(−1)n48\frac{1}{16}(-1)^n = \frac{3(-1)^n}{48}
    加總整理可得:
    [xn]f(x)=4n3+30n2+68n+45+3(−1)n48[x^n] f(x) = \frac{4n^3 + 30n^2 + 68n + 45 + 3(-1)^n}{48}

方法二:分類討論法(重複組合加總驗證)
設糖果 AA 取 2k2k 顆(k≥0k \ge 0),則其餘 3 種糖果共需分得 n−2kn - 2k 顆。
利用重複組合公式 Hn−2k3=((n−2k)+3−1n−2k)=(n−2k+22)H^3_{n-2k} = \binom{(n-2k)+3-1}{n-2k} = \binom{n-2k+2}{2},總方法數為:
∑k=0⌊n/2⌋(n−2k+22)\sum_{k=0}^{\lfloor n/2 \rfloor} \binom{n - 2k + 2}{2}


(b) 詳解推導

題目要求從 3 種不同的糖果中挑選 nn 顆,其中指定 2 種糖果的數量必須為奇數(1,3,5,…1, 3, 5, \dots),剩餘 1 種無限制(0,1,2,…0, 1, 2, \dots)。

方法一:一般生成函數法(標準正攻法)
設 3 種糖果分別為 A,B,CA, B, C,其中 A,BA, B 的選取數量必須為奇數。

  1. 建立各種類的生成函數:

    • 糖果 A,BA, B(奇數顆):x+x3+x5+x7+⋯=x1−x2x + x^3 + x^5 + x^7 + \dots = \frac{x}{1 - x^2}
    • 糖果 CC(無限制):1+x+x2+x3+⋯=11−x1 + x + x^2 + x^3 + \dots = \frac{1}{1 - x}
  2. 建立整體生成函數 g(x)g(x):
    g(x)=(x1−x2)2⋅(11−x)=x2(1−x)3(1+x)2g(x) = \left(\frac{x}{1 - x^2}\right)^2 \cdot \left(\frac{1}{1 - x}\right) = \frac{x^2}{(1-x)^3(1+x)^2}

  3. 進行部分分式拆解:
    將 g(x)g(x) 拆解為:
    g(x)=A1+x+B(1+x)2+C1−x+D(1−x)2+E(1−x)3g(x) = \frac{A}{1+x} + \frac{B}{(1+x)^2} + \frac{C}{1-x} + \frac{D}{(1-x)^2} + \frac{E}{(1-x)^3}
    解得各項係數為:
    A=−116,B=18,C=−116,D=−14,E=14A = -\frac{1}{16}, \quad B = \frac{1}{8}, \quad C = -\frac{1}{16}, \quad D = -\frac{1}{4}, \quad E = \frac{1}{4}
    即:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 4 題10 分

  1. (10%) Find the generating function for the sequence 1, 2, 3, 4, 5, 5, 5, ....

登入後即可作答並保存紀錄。

這一題的完整詳解

設普通生成函數為

G(x)=∑n=0∞anxn,G(x)=\sum_{n=0}^{\infty}a_nx^n,

其中 a0,a1,…=1,2,3,4,5,5,…a_0,a_1,\ldots=1,2,3,4,5,5,\ldots。則

G(x)=1+2x+3x2+4x3+5x4+5x5+⋯ .G(x)=1+2x+3x^2+4x^3+5x^4+5x^5+\cdots.
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 5 題5 分

  1. A ship carries 60 food cans, 15 of each the chicken, beef, pork, and fish. Fifteen of these cans are
    placed to a lifeboat in order to supply foods for the rescue event.
    (a) [5%] How many possible choices that contains an even number of beef cans and an odd number
    of chicken cans?
    (b) [5%] How many possible choices that contains at least three pork cans or no pork cans at all?

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題屬於離散數學組合學(Combinatorics)中「從多種相異類別中選取物件」的**重複組合(Combinations with Repetition)**問題。

在離散數學考題標準規範中,當題目給定 4 種食品罐頭(雞肉、牛肉、豬肉、魚肉)並要求選取指定數量時,同種類的罐頭視為同型(Identical),種類之間為相異(Distinct)。

設選取之雞肉罐頭數量為 cc、牛肉罐頭數量為 bb、豬肉罐頭數量為 pp、魚肉罐頭數量為 ff。因為救生艇需選取 15 個罐頭,且每種罐頭儲備總數皆為 15 個(即單一種類選取的上限為 15,絕不超越儲備上限),故題意等價於求解非負整數解 (c,b,p,f)(c, b, p, f) 的組數:
c+b+p+f=15,c,b,p,f∈N0c + b + p + f = 15, \quad c, b, p, f \in \mathbb{N}_0

本題主要運用之定義與定理:

  1. 重複組合公式:將 kk 個相同物件分配給 nn 個相異類別(即方程式 x1+x2+⋯+xn=kx_1 + x_2 + \dots + x_n = k 之非負整數解個數)為:
    Hkn=(k+n−1k)=(k+n−1n−1)H^n_k = \binom{k + n - 1}{k} = \binom{k + n - 1}{n - 1}
  2. 奇偶性與範圍限制處理:
    • 奇偶性限制:採用變數代換 b=2kb = 2k 或針對奇數項分類加總。
    • 範圍限制:採用直接分類討論法(Direct Case Analysis)或反面扣除法(Complementary Counting)。

解題方法

(a) 包含偶數個牛肉罐頭與奇數個雞肉罐頭之組合數

限制條件:

  • 牛肉罐頭數 bb 為偶數:b∈{0,2,4,6,8,10,12,14}b \in \{0, 2, 4, 6, 8, 10, 12, 14\}
  • 雞肉罐頭數 cc 為奇數:c∈{1,3,5,7,9,11,13,15}c \in \{1, 3, 5, 7, 9, 11, 13, 15\}
  • 豬肉與魚肉罐頭數 p,f≥0p, f \ge 0
  • c+b+p+f=15c + b + p + f = 15

推導步驟:

  1. 將雞肉罐頭可能出現的奇數 cc 進行分類。令 c=15−Rc = 15 - R,其中 RR 必為偶數,R∈{0,2,4,6,8,10,12,14}R \in \{0, 2, 4, 6, 8, 10, 12, 14\}。
  2. 原方程式化簡為 b+p+f=Rb + p + f = R。
  3. 設 b=2kb = 2k(0≤k≤R20 \le k \le \frac{R}{2}),則 p+f=R−2kp + f = R - 2k。
  4. 對於固定的 RR 與 kk,p+f=R−2kp + f = R - 2k 的非負整數解個數為:
    HR−2k2=((R−2k)+2−1R−2k)=R−2k+1H^2_{R - 2k} = \binom{(R - 2k) + 2 - 1}{R - 2k} = R - 2k + 1
  5. 固定 R=2hR = 2h(其中 h=R2h = \frac{R}{2}),讓 kk 從 00 累加至 hh:
    ∑k=0h(2h−2k+1)=∑j=0h(2j+1)=(h+1)2\sum_{k=0}^{h} (2h - 2k + 1) = \sum_{j=0}^{h} (2j + 1) = (h + 1)^2
  6. cc 的可能取值對應 h=15−c2∈{0,1,2,3,4,5,6,7}h = \frac{15 - c}{2} \in \{0, 1, 2, 3, 4, 5, 6, 7\}。
  7. 加總所有可能之 hh:
    總組合數=∑h=07(h+1)2=12+22+32+42+52+62+72+82\text{總組合數} = \sum_{h=0}^{7} (h + 1)^2 = 1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2 + 8^2
    總組合數=8×9×176=204\text{總組合數} = \frac{8 \times 9 \times 17}{6} = 204

(b) 包含至少三個豬肉罐頭或完全沒有豬肉罐頭之組合數

限制條件:

  • 豬肉罐頭數 p≥3p \ge 3 或 p=0p = 0
  • 罐頭總數 c+b+p+f=15c + b + p + f = 15,且 c,b,f≥0c, b, f \ge 0

推導步驟(提供兩種標準解法):

  • 方法一:直接分類討論法
    1. 事件一:完全沒有豬肉罐頭 (p=0p = 0)
      方程式簡化為 c+b+f=15c + b + f = 15,由 3 種類中選取 15 個罐頭:
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 6 題10 分

  1. [10%] An alphabet ∑ consists of the five numeric characters 1, 2, 3, 4, 5, and the six alphabetic
    characters a, b, c, d, e, f. Find and solve a recurrence relation for the number of words of length n (in
    ∑*), where there is no consecutive (identical or distinct) alphabetic characters.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

字母表 Σ\Sigma 中有:

  • 數字字符:55 個;
  • 英文字母:66 個。

限制條件是:不能出現連續的兩個 alphabetic characters,且不論兩個字母是否相同,只要相鄰皆不允許。因此合法字串的形式必須符合:

字母之間至少隔著一個數字。\text{字母之間至少隔著一個數字。}

令 TnT_n 表示長度為 nn 的合法字串數量。可利用字串最後一個字符的類型建立遞迴關係。

解題方法

將長度為 nn 的合法字串分成兩類:

  • AnA_n:最後一個字符是數字;
  • BnB_n:最後一個字符是字母。

因此:

Tn=An+BnT_n=A_n+B_n

以數字結尾

若最後一個字符是數字,前面長度 n−1n-1 的部分可以是任意合法字串,最後再選擇 55 個數字之一:

An=5Tn−1A_n=5T_{n-1}

以字母結尾

若最後一個字符是字母,由於不能有連續字母,倒數第二個字符必須是數字。

前面長度 n−2n-2 的部分有 Tn−2T_{n-2} 種,接著選一個數字,再選一個字母,因此:

Bn=5⋅6⋅Tn−2=30Tn−2B_n=5\cdot 6\cdot T_{n-2}=30T_{n-2}

合併兩類:

Tn=An+BnT_n=A_n+B_n

所以得到遞迴關係:

Tn=5Tn−1+30Tn−2,n≥2T_n=5T_{n-1}+30T_{n-2},\qquad n\ge 2

初始條件為:

T0=1T_0=1

空字串屬於 Σ∗\Sigma^*,因此長度為 00 時有 11 種。

長度為 11 時可以選擇任意一個字符:

T1=5+6=11T_1=5+6=11

故完整遞迴關係為:

Tn=5Tn−1+30Tn−2,T0=1,T1=11\boxed{T_n=5T_{n-1}+30T_{n-2},\quad T_0=1,\quad T_1=11}

解遞迴關係

其特徵方程為:

r2−5r−30=0r^2-5r-30=0

解得:

r=5±1452r=\frac{5\pm\sqrt{145}}{2}

令:

r1=5+1452,r2=5−1452r_1=\frac{5+\sqrt{145}}{2},\qquad r_2=\frac{5-\sqrt{145}}{2}

因此通解為:

Tn=C1r1n+C2r2nT_n=C_1r_1^n+C_2r_2^n

利用初始條件:

C1+C2=1C_1+C_2=1

以及:

C1r1+C2r2=11C_1r_1+C_2r_2=11

解得:

C1=17+1452145C_1=\frac{17+\sqrt{145}}{2\sqrt{145}}
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 7 題10 分

  1. (Algorithm points) [10%] Please express the algorithm of Quick Sort and analyze its time complexity
    in detail.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

快速排序法(Quick Sort)是一種基於**分治法(Divide and Conquer)**的高效排序演算法。其核心思想為:

  1. 分割(Partition):從陣列中挑選一個元素作為「基準值」(Pivot),並重排陣列,使得所有小於基準值的元素皆位於基準值左側,所有大於或等於基準值的元素皆位於右側。
  2. 遞迴求解(Conquer):分別對基準值左側與右側的子陣列遞迴執行 Quick Sort。
  3. 合併(Combine):由於子陣列採原地(In-place)排序,當子陣列完成排序時,整體陣列即已完全有序,無需額外的合併步驟。

本題主要考驗演算法邏輯寫法、遞迴關係式(Recurrence Relation)之建立,以及運用**主定理(Master Theorem)與代數展開法(Algebraic Induction/Substitution Method)**進行最差、最佳與平均時間複雜度(Time Complexity)之推導。


解題方法

一、 Quick Sort 演算法虛擬碼 (Pseudo-code)

QuickSort(A, low, high):
    if low < high:
        // q 為 Partition 後 Pivot 的最終正確位置 index
        q = Partition(A, low, high)
        QuickSort(A, low, q - 1)   // 遞迴排序左半部
        QuickSort(A, q + 1, high)  // 遞迴排序右半部

Partition(A, low, high):
    x = A[high]                    // 選擇最後一個元素作為 Pivot
    i = low - 1                    // i 為較小元素的邊界指標
    for j = low to high - 1:
        if A[j] <= x:
            i = i + 1
            swap A[i] with A[j]
    swap A[i + 1] with A[high]     // 將 Pivot 置於正確分割位置
    return i + 1

二、 時間複雜度詳細分析 (Time Complexity Analysis)

設陣列長度為 nn。Partition 步驟需要掃描整個陣列一次,其時間複雜度為 Θ(n)\Theta(n)。整體時間複雜度取決於每次 Partition 劃分出的兩個子陣列大小。

1. 最佳情況(Best-case Complexity):T(n)=Θ(nlog⁡n)T(n) = \Theta(n \log n)
  • 條件:每次 Partition 都能將長度為 nn 的陣列極度均勻地平分為大小約為 ⌊n2⌋\lfloor \frac{n}{2} \rfloor 與 ⌈n2⌉−1\lceil \frac{n}{2} \rceil - 1 的兩半。
  • 遞迴關係式:
    T(n)=2T(n2)+Θ(n)T(n) = 2T\left(\frac{n}{2}\right) + \Theta(n)
  • 詳細推導(套用主定理 Master Theorem):
    • 形式:T(n)=aT(nb)+f(n)T(n) = aT\left(\frac{n}{b}\right) + f(n),其中 a=2,b=2,f(n)=Θ(n)a = 2, b = 2, f(n) = \Theta(n)。
    • 計算 nlog⁡ba=nlog⁡22=n1=nn^{\log_b a} = n^{\log_2 2} = n^1 = n。
    • 由於 f(n)=Θ(n)=Θ(nlog⁡ba)f(n) = \Theta(n) = \Theta(n^{\log_b a}),符合主定理 Case 2。
    • 得證最佳時間複雜度 T(n)=Θ(nlog⁡n)T(n) = \Theta(n \log n)。
2. 最差情況(Worst-case Complexity):T(n)=Θ(n2)T(n) = \Theta(n^2)
  • 條件:每次選取的 Pivot 皆為當前陣列的最大值或最小值(例如:輸入已排序或反向排序,且固定選取首尾為 Pivot),導致分割出的兩個子陣列長度分別為 00 與 n−1n-1。
  • 遞迴關係式:
    T(n)=T(n−1)+T(0)+Θ(n)=T(n−1)+c⋅nT(n) = T(n-1) + T(0) + \Theta(n) = T(n-1) + c \cdot n
  • 詳細推導(代數級數展開):
    T(n)=T(n−1)+cnT(n) = T(n-1) + cn
    T(n)=T(n−2)+c(n−1)+cnT(n) = T(n-2) + c(n-1) + cn
    T(n)=T(1)+c∑i=2ni=T(1)+c(n(n+1)2−1)T(n) = T(1) + c \sum_{i=2}^{n} i = T(1) + c \left( \frac{n(n+1)}{2} - 1 \right)
    • 由等差級數求和可知最高次項為 n2n^2,故最差時間複雜度 T(n)=Θ(n2)T(n) = \Theta(n^2)。
3. 平均情況(Average-case Complexity):T(n)=Θ(nlog⁡n)T(n) = \Theta(n \log n)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 8 題10 分

  1. (Algorithm points) [10%] Please express the algorithm of Huffman coding and analyze its time complexity
    in detail.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

霍夫曼編碼(Huffman Coding) 是一種用於無損資料壓縮的貪婪演算法(Greedy Algorithm),其目標是建構一套最佳前綴碼(Optimal Prefix Code),使得給定檔案或文本的總變長編碼長度達到最短。

  1. 前綴碼(Prefix Code / Prefix-free Code):
    任何字元的編碼皆不能是另一個字元編碼的前綴。此性質保證了解碼時的唯一可解碼性(Unique Decipherability),解碼過程無需分隔符號即可順暢進行。
  2. 最佳樹結構(Optimal Binary Tree):
    編碼對應至一棵滿二元樹(Full Binary Tree),字元皆位於葉節點(Leaf Nodes)。字元出現頻率越高,其在樹中的深度越淺(編碼越短);頻率越低,深度越深(編碼越長)。
  3. 加權外路徑長(Weighted External Path Length):
    若字元集為 CC,字元 c∈Cc \in C 的出現頻率為 f(c)f(c),其在二元樹 TT 中對應葉節點的深度為 dT(c)d_T(c)(亦即編碼長度),則總編碼成本為:
    B(T)=∑c∈Cf(c)⋅dT(c)B(T) = \sum_{c \in C} f(c) \cdot d_T(c)
    霍夫曼演算法保證能找到使 B(T)B(T) 達到最小值的樹結構。

解題方法

1. 演算法描述與虛擬碼(Pseudocode)

霍夫曼演算法採用**自底向上(Bottom-up)**的貪婪策略:每次從當前的節點集合中,選出出現頻率最小的兩個節點合併為一棵新子樹,新節點的頻率為該兩節點頻率之和,再將新節點放回集合中。重複此過程直至只剩下一個根節點為止。

為了有效率地找出頻率最小的節點,演算法使用最小優先佇列(Min-Priority Queue / Min-Heap) QQ 來維護所有節點。

HUFFMAN(C)
1. n = |C|
2. Q = C  // 將所有字元節點放入最小優先佇列 Q 中(以頻率 f[c] 為鍵值)
3. for i = 1 to n - 1 do
4.     allocate a new node z
5.     z.left = x = EXTRACT-MIN(Q)   // 取出頻率最小的節點 x
6.     z.right = y = EXTRACT-MIN(Q)  // 取出頻率次小的節點 y
7.     z.freq = x.freq + y.freq      // 新節點頻率為兩者之和
8.     INSERT(Q, z)                  // 將新內部節點 z 放回最小優先佇列 Q
9. return EXTRACT-MIN(Q)             // 傳回二元樹之根節點

2. 詳細時間複雜度分析(Detailed Time Complexity Analysis)

設字元集 CC 包含 nn 個不同的字元(即 n=∣C∣n = |C|):

  1. 初始化優先佇列(Line 1–2):
    • 將包含 nn 個字元的陣列建立成一個 Min-Heap。
    • 使用標準的 BUILD-MIN-HEAP 演算法,時間複雜度為 O(n)O(n)。(若逐一插入 nn 次則為 O(nlog⁡n)O(n \log n),但不影響最終的整體漸進複雜度)。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 9 題10 分

  1. (Algorithm points) [10%] Let T be a complete n-ary tree of height h with m leaves. Prove that m≤
    nh and h≥ [logn m].

登入後即可作答並保存紀錄。

這一題的完整詳解

高度為 hh 的完全 nn 元樹,每個內部節點至多有 nn 個子節點,因此第 ii 層至多有 nin^i 個節點。葉節點數在所有葉節點皆位於第 hh 層時最多,故

m≤nh.m\le n^h.

假設 n>1n>1,兩邊取以 nn 為底的對數:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

其他考古題