**動態馬可夫壓縮**是一種無損壓縮演算法，由Gordan Cormack和Nigel Horspool發明。該演算法類似預測性算術編碼，不同的是輸入資料預測是以位元為單位，而非位元組。動態馬可夫壓縮具有良好的壓縮比以及中等的運算速率，但是需求較高的記憶體。

演算法
---

動態馬可夫壓縮的預測以及編碼以位元為單位，並使用算術編碼作為編碼方式。

### 算術編碼

動態馬可夫壓縮使用的位元編碼器具有兩部分：預測器和位元編碼器。預測器接受*n*位元輸入字串*x* = *x*1*x*2...*x**n*，其發生機率可寫作 
*p*(*x*) = *p*(*x*1)*p*(*x*2|*x*1)*p*(*x*3|*x*1*x*2)... *p*(*x**n*|*x*1*x*2...*x**n*–1)。算術編碼器中有兩二進位高精準度參數*p*high和*p*low，分別代表該模型發生的機率之區間上限與下限。*x*之編碼記作*p**x*，為在*p*high和*p*low之間長度最短的數。我們永遠可以找到不比夏農極限，log2 1/*p*(*x')*，長超過一個位元的*p**x*。要找到這樣的*p**x*，只需要把*p*high在第一個和*p*high相異位元之後的位元全數捨棄即可。

接下來的壓縮步驟如下。初始*p*high設為1，*p*low設為0。對於每個位元，預測器預測*p*0 = *p*(*x**i* = 0|*x*1*x*2...*x**i*–1)和*p*1 = 1 − *p*0，這裡*p*0代表該位元為0的機率，*p*1代表該位元為1的機率。接著，算術編碼器將當前的機率範圍，也就是(*p*low, *p*high)，依*p*0和*p*1之比例分割成二新區間。下一個位元*x**i*的子機率區間就成為新的機率區間，如此周而復始。

在解壓縮的時候，預測器會對於已解出的位元做出一樣的預測串。算術編碼器接著做出一樣的區間分割，然後輸出對應到每個*p**x*的位元*x**i*。

在實作上，*p*high和*p*low並非一定要維持在很高的精準度。

### 動態馬可夫壓縮之模型

動態馬可夫壓縮之預測器是一個將位元對應到一對正整數*n*0和*n*1之表。*n*0和*n*1分別代表0和1的累計個數。因此，預測下一個位元為0的機率可以寫作*p*0 = *n*0/*n* = *n*0/(*n*0 + *n*1)，而下一個位元為1的機率可以寫作*p*1 = 1 − *p*0 = *n*1/*n*。

在原始的動態馬可夫壓縮中，初始的表為長度為八到十五個位元的二進位數所成集合，而初始態設為任一長度為八的二進位數。計數被初始化為一接近零的小數而非零，這是為了維持解碼出未曾出現過位元的可能。

壓縮和解壓縮的模型是雷同的。對於每一個位元，*p*0和*p*1先被計算，接著對*x**i*編碼或解碼。

### 增加新的資料

上述之動態馬可夫模型等價於一次環境模型。然而，使用時可能加入更長的待壓內容以增進壓縮。舉例來說，如果當前資料為A，增加資料為B，則B有可能需要捨棄左邊的某些位元，接著編碼器必須增加一個B的複製C。C的代表資料可視為A在右側增加一個新位元但未捨棄左邊數個位元。A的連結會從B改成C。B和C會進行同樣的預測，也會指向一樣的一對狀態。C之總位元計數*n* = *n*0 + *n*1等於A對輸入位元*x*之計數*n**x*，而B之計數會減掉該數。

舉個例子，假設狀態A代表的資料是11111，當輸入位元為0，狀態轉變為B，其代表資料為110，等於是捨棄了最左邊的三個位元並在右邊加入一個新的位元。狀態A所計零位元之數目為4。狀態B計有3個零位元和7個一位元，故其*p*1 = 0.7。

| 狀態 | *n*0 | *n*1 | next0 | next1 |
| --- | --- | --- | --- | --- |
| A = 11111 | 4 |  | B |  |
| B = 110 | 3 | 7 | E | F |

狀態C為B的複製。C代表的資料為111110。B和C都預測一位元出現的機率為0.7，並且都轉為一樣的狀態，E和F。 

| 狀態 | *n*0 | *n*1 | next0 | next1 |
| --- | --- | --- | --- | --- |
| A = 11111 | 4 |  | C |  |
| B = 110 | 1.8 | 4.2 | E | F |
| C = 111110 | 1.2 | 2.8 | E | F |

參考項目
----

1. Gordon Cormack and Nigel Horspool, "Data Compression using Dynamic Markov Modelling", Computer Journal 30:6（December 1987）

外部連結
----

* Data Compression Using Dynamic Markov Modelling （页面存档备份，存于）

  


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

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

 |
|  |
|  | 

|  |  |
| --- | --- |
| 熵編碼 | 
* 算术编码
* 非对称数字系统编码（英语：）
* 格倫布編碼
* 霍夫曼编码
	+ 适应性
	+ 范型
	+ 改进
* 區間編碼
* 香农编码
* 香农-范诺编码
* 香農-范諾-埃利西斯編碼
* 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
* 去区块滤波器
* 重叠变换（英语：）
* 运动
	+ 运动补偿
	+ 运动预测
	+ 运动矢量
* 量化

 |

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

 |