作者trippy (哈哈)
看板C_and_CPP
標題Re: [問題] 霍夫曼編碼
時間Mon Jun 4 16:37:44 2012
可以利用 byte 來儲存你的編碼
就用你說的例子來講吧
編碼前:ACDABA (8bit * 6 = 48 bits)
編碼後:01101110100 (11 bits)
要真的編碼進去成為11位元的話
你可以用
byte 這個型態來儲存編碼
byte 的 size 是
8bits
所以要把你的編碼以8位元為一個單位儲存
01101110 = 110(十進位)
0100 = 4(十進位)
因此你該存的檔案室byte型態的110和4
ex:
byte code[2];
code[0]=110;
code[1]=4;
.....
這樣你的編碼前後所佔的空間就少了 48-16=32 bit 了
想當然而,你存的txt檔裡面的東西會變成你看不懂的文字
這是正常的,不用擔心!
儲存的方法很多,我提的只是一種最簡單的方法供你做思考
不用在意你當初忽視這個基礎的東西
很多東西本來就是多寫多看多練才發現其中的奧妙
多跟人交流吧! 會讓你程式能力進步很快的!
※ 引述《gn123 (GnCtIlike)》之銘言:
: 小弟最近在寫霍夫曼壓縮
: 照他的說明:
: "假設想要壓縮下面這段資料:ACDABA
: 因為它有 6 個英文字元,所以這串文字占用 6 個位元組 (Bytes) 或 48 各位元 (Bits)
: 壓縮後的資料變成:01101110100 (經過霍夫曼樹後)
: 這表示只用了 11 個位元就可以取代了 48 個位元 => 達成壓縮目的"
: 我是讀進txt檔案 經過運算後輸出txt檔案
: 可是看了看文件內容... 原本:6個位元組(ACDABA型態)
: 輸出後:11個位元組(01101110100) 崩潰...
: 怎越壓越大QQ 是說霍夫曼CODE不適用於txt檔案嗎(已經是純文字)??
: 還是我的輸出格式有問題 ~(我是用fout輸出,每個字的霍夫曼編碼存在不同char陣列裡面)
: 有點想不通 想請教各位高手~~ 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.111.129.79
推 gn123:好的,謝謝指教><~ 06/04 17:11
→ diabloevagto:版上好人很多! 06/04 20:32
推 gn123:真的很感謝板上熱心的人>< 06/04 20:35