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

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