RLE壓縮及優化

2021-04-01 05:11:06 字數 1325 閱讀 9702

簡單的說rle壓縮就是將一串連續的相同資料轉化為特定的格式達到壓縮的目的。

下面都對byte流壓縮。

如輸入資料

lpbte pbyte=;

壓縮的資料為6,1

壓縮了4個字元。

但是在資料流裡面不能直接這麼替換,而應該使用特殊的控制字元,否則無法解壓。

比如pbyte=;

這樣有兩個6,1無法判斷是原有的6,1還是壓縮後的**。

所以應該有控制字元。

(1)為了達到最大壓縮率,可以先掃瞄源資料流,使用最少出現的字元做控制字元。

如 pbyte=;

掃瞄後發現0為最少出現的字元。

我們使用0作為壓縮的控制,其他字元代表他本身。源資料裡面的0,用0,0來表示。

那麼pbyte壓縮後為

6,1,0,0,0,6,1 ......

解壓時 byte a,b,c;

a=依次掃瞄壓縮資料,如果輸入字元為非控制字元,則直接輸出到解壓流。

如果為控制字元,b=其下一字元是否也為控制字元,如果是,在輸出流輸出控制字元的**。

如果不是c=讀壓縮流,然後輸出b個c到輸出流。

注意:該處對於》ctrlcode 的編碼需要自己計算偏移.

如ctrl=2.那麼n=3時應該修正為2.

剛才介紹的方法是最大壓縮率的,但是因為對每個輸入字元需要檢查,速度不算快。

(2)為了增加解壓速度,可以採用其他的編碼方式。

主要方法是不對每個輸入字元進行檢查,只檢查較少次就達到幾乎相同的壓縮率。

來看看這個改進的方法。

仔細觀察,其實對不重複的字元也可以用控制n+資料的方式表示。這裡的n帶表n個未壓縮資料。

還是剛才的資料。

pbyte=

不用掃瞄選擇0為控制

壓縮為3, 0,  6, 1

n      ctrl n m

解壓就非常方便了

掃瞄資料讀乙個字元,

else

}(3)優化

對(1)的優化。

觀察得知,1,1,1這樣的資料壓縮率為0,

所以當n<=3時不用壓縮。

而直接寫為1,1,1樣的格式。

另外如果有多個控制字元連續。也可以壓縮。

觀察ctrl=0;

0,0,0,0

如果用控制編碼為8個0

而壓縮編碼為0,4,0 所以控制字元連續兩個即可壓縮。

對(2):

只對壓縮編碼優化。

例1,2,3,4,1,1

如果死套公式,為

4,1,2,3,4,0,2,1

反倒增加2個位元組。

如果用6,1,2,3,4,1,1只增加乙個位元組。

RLE 壓縮編碼

rle全程run length encoding,翻譯為遊程編碼,又譯行程長度編碼,又稱變動長度編碼法 run coding 在控制論中對於二值影象而言是一種編碼方法,對連續的黑 白畫素數 遊程 以不同的碼字進行編碼。遊程編碼是一種簡單的非破壞性資料壓縮法,其好處是加壓縮和解壓縮都非常快。其方法是計...

資料壓縮演算法 遊程編碼RLE

了解一下資料壓縮演算法 壓縮演算法主要分為兩類1.有失真壓縮 2.無失真壓縮 有失真壓縮有很多種,這裡說一下無失真壓縮。無失真壓縮演算法 行程編碼 遊程編碼 rle run length encoding 哈夫曼編碼。遊程編碼 例如 資訊單元0304,03表示其後的象素個數是3個,04表示這些象素使...

C語言程式設計之RLE壓縮解壓演算法

遊程編碼 run length encoding,rle 又稱行程長度編碼或者變動長度編碼法,在控制理論中對於二值影象而言是一種編碼方法,對連續的黑,白向畫素以不同的碼字進行編碼。遊程編碼是一種簡單的無失真壓縮方法,其特點是壓縮和解壓縮都非常快。該方法是用重複位元組和重複次數來簡單的描述重複的位元組...