這里討論的僅僅是簡單的字符壓縮算法,對于更高級的文件壓縮便是無能為力了。
總步驟分為六步:
第一、 統計全文中各種字符出現的次數;
第二、 根據每個字符出現不同的次數富裕權值并由此建立哈弗曼樹;
第三、 根據哈夫曼樹來對全文中每個字符進行哈弗曼編碼;
第四、 將每個字符的哈弗曼編碼連續寫入,每8位截斷,并計算出這8個0,1字節串所對應的字符并以字符串的形式存儲編碼后的字符;
第五、 將最后的不足8位的位數補足并記錄補位的個數寫入到文件中
第六、? 將此哈弗曼樹存儲到文件末尾
?
例 :
將aaaaabbbbcccdde這段字符壓縮成字節數更小的一段編碼。
第一步:統計全文中各種字符出現的次數,
字符 |
a |
b |
c |
d |
e |
出現次數 |
5 |
4 |
3 |
2 |
1 |
第二步:根據每個字符出現不同的次數富裕權值并由此建立哈弗曼樹
?
第三步:哈弗曼樹建立以后則可根據哈夫曼樹來對全文中每個字符進行哈弗曼編碼;
在這里數叉左邊代表0右邊代表1;
字符 |
a |
b |
c |
d |
e |
哈弗曼編碼 |
11 |
10 |
01 |
001 |
000 |
?
?第四步: 將每個字符的哈弗曼編碼連續寫入,每8位截斷,并計算出這8個0,1字節串所對應的字符并以字符串的形式存儲編碼后的字符;
?
aaaaabbbbcccdde這段字符用哈弗曼編碼表示則為111111111110101010010101001001000
這串01一共33位,則需要在后面補7個0再在最后記錄補了7個0即可
則這段編碼的對應的十進制編碼為-1 -22 -107 36 0 7最后這個7是記錄原編碼最后補了7個0的意思。
?
第五步:將這6個帶符號的數字存入文件中,以分隔符隔開,以便讀取的時候可以識別。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
