編碼 | 解碼 | 壓縮

> shannon | fano | entropy <

// Shannon-Fano —— 用於資料壓縮的自頂向下熵編碼

[ENTROPY]

基於熵的編碼

運用資訊理論建立高效的可變長前綴碼。

[TOP-DOWN]

自頂向下演算法

遞迴將符號分成兩組,讓兩組總機率盡量接近。

[HISTORIC]

經典歷史演算法

對現代壓縮演算法(例如 Huffman)具有重要啟發。

>> 技術細節

Shannon-Fano 的運作原理:

Shannon-Fano 編碼會先依出現頻率對符號排序,再將其遞迴切分成兩組,使兩組的總機率儘量相近。每次切分都在碼字後加上一個位元(左邊為 0,右邊為 1),最終得到一組不歧義的可變長前綴碼。

編碼流程範例:

文字: "AAABBCD" 頻率: A:3, B:2, C:1, D:1 切分: [A] | [B,C,D] 碼字: A: 0 B: 10 C: 110 D: 111 編碼結果: 0 0 0 10 10 110 111

為什麼使用 Shannon-Fano:

  • >實作簡單,適合作為教學範例
  • >提供不錯的壓縮比
  • >具備重要的歷史與理論價值
  • >幫助理解熵編碼與前綴碼概念
  • >是理解 Huffman 之前的好入口

>> 常見問題

什麼是 Shannon-Fano 編碼?

Shannon-Fano 編碼是一種基於熵的編碼技術,由 Claude Shannon 與 Robert Fano 在 20 世紀 40 年代提出。它是最早透過機率分配可變長碼字的演算法之一。

Shannon-Fano 與 Huffman 有何不同?

兩者皆會產生可變長編碼,但 Huffman 在平均碼長上是最佳化的;Shannon-Fano 結構較直觀,卻可能產生稍長的碼字。實務上多使用 Huffman,不過先學習 Shannon-Fano 有助於理解 Huffman 的設計思路。

符號是如何被切分的?

先依頻率排序符號,再將其分成兩組,讓兩組總機率盡量接近。之後對每組重複此流程,直到每一組只剩下單一符號為止。

現在還會使用 Shannon-Fano 嗎?

在實際系統中,Shannon-Fano 幾乎已被 Huffman 等更佳方法取代。現今主要作為歷史與教學示例,用來說明熵編碼、前綴碼以及資料壓縮的基本概念。

其他語言