天天看點

MTF(Move-to-front transform)資料轉換

1.什麼是MTF

  MTF(move-to-front)是一種資料編碼方式,用于提高資料壓縮技術效果。

  在資料壓縮算法中,MTF可以作為一個額外的步驟。也就是說 ,可以先進行MTF編碼,在進行資料壓縮。

2.MTF基本原理

   主要使用的是資料的”空間局部性“,也就是最近出現過的字元很可能在接下來的文本附近再次出現。

  MTF的主要思想是:

    (1)維護一個文本字元集大小的棧,“recently used symbols”(最近通路過的字元),其中每個不同的字元在其中占一個位置,位置從0開始編号。

    (2)掃描需要重新編碼的文本資料,對于每個掃描到的字元,使用該字元在“recently used symbols”中的index替換,并将該字元提到“recently used symbols”的棧頂位置(index為0的位置)。

    (3)轉到(2),直到文本掃描結束。

  使用MTF,對于許多連續的、相同的字元,将被替換為多個0;最近使用過的字元,會被小的index替換;最近很久沒有使用過的字元,會被較大的index替換。MTF完成之後,文本就可以使用一串數字表示,如果文本資料具有較好的空間局部性,這些數字會很小,便于壓縮。

3.MTF圖解

   (1)先建立字元集大小的棧,“recently used symbols”,這裡隻考慮26個小寫字母a~z。

    recently used symbols:queue=(abcdefghijklmnopqrstuvwxyz)。

  其中字元在棧中的位置表示該字元的index。起初,字元a的index為0,b的index為1,以此類推,z的index為25。

  (2)掃描文本,如”bananaaa“。

    編碼如下:

    

MTF(Move-to-front transform)資料轉換

  如上,bananaaa經MTF之後變成了list=(1,1,13,1,1,1,0,0)。MTF隻可逆的過程,隻要記錄下轉換之前的queue和轉換之後的list,就完全可以快速的回複原始文本資料。

  解碼如下:

MTF(Move-to-front transform)資料轉換

4.MTF資料轉換的使用

   MTF轉換主要是利用空間局部性原理來減少資訊熵。因為最近通路的字元總是出現在“recently used symbols”的前面位置,如果字元的空間局部性較好,編碼之後就會出現很多小的數字,如”0“或”1“。然而,并不是所有的文本資料,都具有較好的局部相關性。

  一個重要的應用就是基于Burrows–Wheeler transform壓縮算法。Burrows-Wheeler transform能将文本轉換為局部相關性很好的序列。

  一般壓縮可以将文本先使用Burrows–Wheeler transform生成局部相關性很好的序列,再使用MTF減少資訊熵,最後再進行壓縮。

5.MTF轉換代碼執行個體

下面的代碼是對文本進行move-to-front資料編碼:

繼續閱讀