22. 以「霍夫曼編碼」依據以下字母頻率表產生每個字母的二進位碼,以下各項敘述何者正確?
  
(A) 字母 A 編碼為 11
(B) 字母 B 編碼為 010
(C) 字母 C 編碼為 10
(D) 字母 E 編碼為 00

答案:登入後查看
統計: A(7), B(46), C(10), D(19), E(0) #3233468

詳解 (共 3 筆)

#6100079
初始頻率表: A: 17 B: 12...
(共 451 字,隱藏中)
前往觀看
8
1
#6420169

根據霍夫曼編碼(Huffman Coding)的原理,我們應根據字元的頻率建構一棵二元樹。步驟如下:

  1. 將每個字元及其頻率視為一個節點。
  2. 將節點按頻率由小到大排序。
  3. 重複以下步驟,直到只剩一個節點為止:
    • 取出頻率最小的兩個節點。
    • 建立一個新的內部節點,其頻率為這兩個節點的頻率之和。
    • 將這兩個節點作為新節點的子節點,並為連接邊賦值(通常左邊賦 0,右邊賦 1,或反之,但須保持一致)。
    • 將這兩個節點從列表中移除,將新節點加入列表,並重新排序。

給定的字母頻率為: A: 17 B: 12 C: 12 D: 27 E: 32

按頻率由小到大排序:B(12), C(12), A(17), D(27), E(32)。

步驟 1: 合併頻率最小的 B(12) 和 C(12)。 建立一個新節點 (BC),頻率為 12 + 12 = 24。假設 B 是左子節點 (賦值 0),C 是右子節點 (賦值 1)。 節點列表及其頻率:A(17), (BC)24, D(27), E(32)。重新排序:A(17), (BC)24, D(27), E(32)。

步驟 2: 合併頻率最小的 A(17) 和 (BC)24。 建立一個新節點 (ABC),頻率為 17 + 24 = 41。假設 A 是左子節點 (賦值 0),(BC) 是右子節點 (賦值 1)。 節點列表及其頻率:D(27), E(32), (ABC)41。重新排序:D(27), E(32), (ABC)41。

步驟 3: 合併頻率最小的 D(27) 和 E(32)。 建立一個新節點 (DE),頻率為 27 + 32 = 59。假設 D 是左子節點 (賦值 0),E 是右子節點 (賦值 1)。 節點列表及其頻率:(ABC)41, (DE)59。重新排序:(ABC)41, (DE)59。

步驟 4: 合併 (ABC)41 和 (DE)59。 建立根節點,頻率為 41 + 59 = 100。假設 (ABC) 是左子節點 (賦值 0),(DE) 是右子節點 (賦值 1)。

建構出的霍夫曼樹結構 (左邊邊賦值 0,右邊邊賦值 1):

(100) Root / \ (41)0 (59)1 / \ / \ A(17)0 (24)1 D(27)0 E(32)1 / \ B(12)0 C(12)1

根據樹結構,從根節點到每個字母節點的路徑上的邊值連接起來,得到編碼:

  • A: 00
  • B: 010
  • C: 011
  • D: 10
  • E: 11

現在比較這些編碼與選項: (A) 字母 A 編碼為 11:錯誤,計算結果為 00。 (B) 字母 B 編碼為 010:正確,計算結果為 010。 (C) 字母 C 編碼為 10:錯誤,計算結果為 011。 (D) 字母 E 編碼為 00:錯誤,計算結果為 11。

注意:在頻率相等(如 B 和 C 都是 12)或合併節點頻率相等時,將哪個節點放在左邊(賦 0)或右邊(賦 1)的規則可能會影響某些字元的具體編碼,但編碼長度和整體效率不受影響。這裡我們採用了標準的「小頻率放左邊,大頻率放右邊」以及「相同頻率按字母順序決定左右」並「左賦0右賦1」的慣例進行建構。在這種慣例下,選項 (B) 是正確的。

答案是 (B)

2
0
#7328459


(共 1 字,隱藏中)
前往觀看
0
0