**範式霍夫曼編碼**（Canonical Huffman Code）是一種特殊的霍夫曼編碼，最早由Schwartz（1964）所提出。  

資料的編解碼運作方式中，以霍夫曼編碼來舉例，編解碼器的其中一方必須要知道霍夫曼樹的結構資訊，以便還原。所以其中一方必須儲存或傳輸霍夫曼樹。傳統的霍夫曼編碼使用樹狀模型編碼，給出現機率或頻率較高的符號（Symbol）較短的編碼，以提高壓縮率。但是這個方式造成兩個極大的缺點，第一，每一個樹的節點都要儲存有關它的父節點與子節點等等相關資訊，如果符號集合的數量包含許多不同機率的符號，記憶體的負荷量會明顯增大許多。第二，霍夫曼樹的追蹤需要耗費極大的運算量。所以基於以上兩個論點，傳統的霍夫曼編碼是一種極為消耗儲存空間且沒有效率的方式。  

而範式霍夫曼編碼修正了這些缺點，藉由一些原則以達成**利用較少的數據**便能還原霍夫曼編碼的功能。範式霍夫曼編碼要求相同長度編碼必須是連續的，例如：長度為4的編碼0001，其他相同長度的編碼必須為0010、0011、0100...等等。為了盡可能降低儲存空間，編碼長度為 j 的第一個符號可以從編碼長度為 j-1 的最後一個符號所得知，即 {\displaystyle c\_{j}=2(c\_{j-1}+1)}，例如：從長度為3的最後一個編碼100，可推知長度為4的第一個編碼為1010。最後，最小編碼長度的第一個編碼必須從0開始。範式霍夫曼編碼通過這些原則，便可以從每個編碼還原整個霍夫曼編碼樹。

演算法
---

假設我們有一組霍夫曼編碼與其相對應的符號：  

```
F：000  

O：001  

R：100  

G：101  

E：01  

T：11  

```

  

首先我們先對符號進行排序，排序方式由

**1. 編碼長度短至長排列**和
**2. 字母在英文單字中的次序**  

```
E：01  

T：11  

F：000  

G：101  

O：001  

R：100  

```

  

接著，照下列方式依序給予新的編碼：  

1. 第一個符號的編碼方式是依照符號的編碼長度給予相同長度的'0'值  

2. 對接下來的符號的編碼+1，保證接下來的編碼大小都大於之前  

3. 如果編碼較長，位元左移一位並補0  

```
E：01  →  00                 按照*1.*   

T：11  →  01                 依照*2.*   

F：000 → 100                 依照*2.*&*3.*  

G：101 → 101                 依照*2.*  

O：001 → 110                 依照*2.*  

R：100 → 111                 依照*2.*  

```

  

依照上述演算法將霍夫曼碼變成範式霍夫曼碼。  
  

而解碼的方式可由：  

1. 范式霍夫曼碼的順序（後面編碼大小必定大於前面）  

2. 編碼長度為 j 的第一個符號可以從編碼長度為 j-1 的最後一個符號所得知，即 {\displaystyle c\_{j}=2(c\_{j-1}+1)}   

  

  

  


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
方法 |
| --- |
|  |
| 理论 | 
* 熵
* 语法（英语：）
* 信息论
* 柯氏复杂度
* 量化
* 率失真理论
* 

 |
|  |
|  | 

|  |  |
| --- | --- |
| 熵編碼 | 
* 算术编码
* 非对称数字系统编码（英语：）
* 格倫布編碼
* 霍夫曼编码
	+ 适应性
	+ 范型
	+ 改进
* 區間編碼
* 香农编码
* 香农-范诺编码
* 香農-范諾-埃利西斯編碼
* Tunstall编码（英语：）
* 一元编码（英语：）
* 通用編碼（英语：）
	+ 指數格倫布編碼
	+ 斐波那契編碼
	+ 以利亞伽瑪編碼
	+ 萊文斯坦編碼（英语：）

 |
|  |
| 字典編碼（英语：） | 
* 字节对编码
* LZ77 / LZ78
	+ 842（英语：）
	+ Brotli
	+ Deflate
	+ LZ4
	+ LZFSE
	+ LZJB（英语：）
	+ LZMA
	+ LZO
	+ LZRW（英语：）
	+ LZS（英语：）
	+ LZSS
	+ LZW
	+ LZWL（英语：）
	+ LZX
	+ Snappy
	+ Zstandard

 |
|  |
| 其他 | 
* BWT
* CTW（英语：）
* 差分编码
* DMC
* 差分脉冲编码调制
* 无损离散余弦变换
* MTF
* PAQ（英语：）
* PPM（英语：）
* RLE

 |

 |
|  |
|  | 

|  |  |
| --- | --- |
| 变换编码 | 
* DCT
	+ MDCT
* DST
* FFT
* 小波变换
	+ 多贝西
	+ DWT
	+ SPIHT（英语：）

 |
|  |
| 预测编码 | 
* DPCM
	+ ADPCM（英语：）
* LPC
	+ ACELP（英语：）
	+ CELP
	+ LAR（英语：）
	+ LSP（英语：）
	+ WLPC（英语：）
* 运动
	+ 运动补偿
	+ 运动预测
	+ 运动矢量
* 心理声学

 |

 |
|  |
|  | 

|  |  |
| --- | --- |
| 概念 | 
* 码率
	+ 平均码率
	+ 恒定码率
	+ 可变码率
* 压扩（英语：）
* 卷积
* 动态范围
* 延迟（英语：）
* 采样
* 采样定理
* 音质
* 语音编码
* 子带编码

 |
|  |
| 编解码组件 | 
* A-law（英语：）
* μ-law（英语：）
* DPCM
	+ ADPCM（英语：）
	+ DM
* FT
	+ FFT
* LPC
	+ ACELP（英语：）
	+ CELP
	+ LAR（英语：）
	+ LSP（英语：）
	+ WLPC（英语：）
	+ CELP
	+ MDCT
* 心理聲學模型

 |

 |
|  |
|  | 

|  |  |
| --- | --- |
| 概念 | 
* 色度抽样
* 编码树单元
* 色彩空間
* 壓縮失真
* 图像分辨率
* 宏块
* 像素
* 峰值信噪比
* 量化
* 标准测试图像

 |
|  |
| 方法 | 
* DCT
* Deflate
* 分形压缩
* K-L变换
* LP（英语：）
* RLE
* 小波变换
	+ 多贝西
	+ DWT
	+ SPIHT（英语：）

 |

 |
|  |
|  | 

|  |  |
| --- | --- |
| 概念 | 
* 码率
	+ 平均码率
	+ 恒定码率
	+ 可变码率
* 显示分辨率
* 帧（英语：）
* 帧率
* 帧类型
* 隔行扫描
* 視訊特性
* 視訊質量

 |
|  |
| 编解码组件 | 
* DCT
* DPCM
* 去区块滤波器
* 重叠变换（英语：）
* 运动
	+ 运动补偿
	+ 运动预测
	+ 运动矢量
* 量化

 |

 |
|  |
| 另见压缩格式和数据压缩 |

 |