無損壓縮過程
WinRAR是採用它自己的獨創的壓縮演算法。
【希望你能看看最優二叉樹(哈夫曼樹),理解哈夫曼編碼的原理,對你的這個壓縮演算法會有很明晰的指導和解惑作用】WinRAR是採用它自己的獨創的壓縮演算法。
壓縮處理都是以二進制的方式進行的。這和你的編碼有關。只要是處理後的結果比原文檔文件小,而且是可逆的還原,就是無壓縮。
壓縮率的大小和你的編碼方式有關。
無損壓縮是指重構壓縮數據(還原,解壓縮),而重構數據與原來數據完全相同。該方法用於那些要求重構信號與原始信號完全一致的場合,如文本數據、程序和特殊應用場合的圖像數據(如指紋圖像、醫學圖像等)的壓縮。這類演算法壓縮率較低,一般為1/2~1/5。典型的無損壓縮演算法有:Shanno-Fano編碼、Huffman(哈夫曼)編碼、算術編碼、遊程編碼、LZW編碼等。
基於哈夫曼編碼原理的壓縮演算法:
哈夫曼演算法的過程為:統計原始數據中各字元出現的頻率;所有字元按頻率降序排列;
比如有一個字元串:aaaaaaaaaabbbbbbcccd
原文件大小存儲需要20個位元組。如果按頻率出現的次數高低,給予字元串中的每個字元不同的編碼長度,就可以達到壓縮的目的。
如
a編碼為01(佔用2個bit)
b編碼為00(佔用2個bit)
c編碼為000,(佔用3個bit)
c編碼為001,(佔用3個bit)
那就壓縮後的總長為(2*10+2*6+3*3+1*3)/8 =5.5個位元組。
另外在解碼的時候,要告之對方你的編碼方式,需要把編碼的規則傳遞過去。
如果對於以上字元串,你也可以按aaaaaaaaaa編碼成一個1,bbbbbb為2,ccc為3,d為4。這樣壓縮後的內容為最小,但是要注意一點,這時你的編碼規則為最大,你要把你的編碼規則發給對方的時候,有可能編編解碼規則文件可能會比壓縮後的內容還要大。最終結果為造成壓縮後的文件比原文件還要大。