[問題] 霍夫曼編碼

看板C_and_CPP作者 (GnCtIlike)時間12年前 (2012/06/04 04:06), 編輯推噓7(7020)
留言27則, 10人參與, 最新討論串1/3 (看更多)
小弟最近在寫霍夫曼壓縮 照他的說明: "假設想要壓縮下面這段資料:ACDABA 因為它有 6 個英文字元,所以這串文字占用 6 個位元組 (Bytes) 或 48 各位元 (Bits) 壓縮後的資料變成:01101110100 (經過霍夫曼樹後) 這表示只用了 11 個位元就可以取代了 48 個位元 => 達成壓縮目的" 我是讀進txt檔案 經過運算後輸出txt檔案 可是看了看文件內容... 原本:6個位元組(ACDABA型態) 輸出後:11個位元組(01101110100) 崩潰... 怎越壓越大QQ 是說霍夫曼CODE不適用於txt檔案嗎(已經是純文字)?? 還是我的輸出格式有問題 ~(我是用fout輸出,每個字的霍夫曼編碼存在不同char陣列裡面) 有點想不通 想請教各位高手~~ 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.66.184

06/04 04:11, , 1F
要存成二進位數值,存對的話開出來會是亂碼
06/04 04:11, 1F

06/04 08:02, , 2F
因為1位元的資料以1位元組儲存
06/04 08:02, 2F

06/04 08:04, , 3F
你要自己把八個01轉成1位元組啊
06/04 08:04, 3F

06/04 08:42, , 4F
要用二進位啊老兄
06/04 08:42, 4F

06/04 11:30, , 5F
純練習的話倒是也可以算寫對了
06/04 11:30, 5F
喔喔!! 不知道我這樣理解對不對? 原文: ABCDEFG.... 轉碼後: 01101010111000... *轉2進位: (01101010)(10110001)(110.... || || 一位元 一位元 => 達到壓縮目的@@??? ※ 編輯: gn123 來自: 140.113.66.184 (06/04 11:42)

06/04 12:07, , 6F
YES
06/04 12:07, 6F

06/04 12:08, , 7F
應該說每個1跟0都是一位元 你原本作法是
06/04 12:08, 7F

06/04 12:08, , 8F
每個1跟0都變字元來存 那一個1就是8位元了
06/04 12:08, 8F

06/04 12:58, , 9F
了解!! 謝謝樓上解說><
06/04 12:58, 9F

06/04 13:03, , 10F
你要印出來應該要轉成ascii code在秀出來
06/04 13:03, 10F

06/04 13:04, , 11F
用特殊的軟體打開txt檔,選用2進制顯示
06/04 13:04, 11F
我現在雖然懂了如何變小,可是不知道怎把我編碼轉成1位元的2進位編碼QQ 比方說,下列是文章單字經過Huffman Tree轉換的編碼: A: 0000 B: 0101010101 C: 110000 D: 101111000 ... 這些編碼我存在char [] 裡面 可是剛剛查了一堆資料越搞越混,不知道怎樣才叫做"轉成1位元"??? 請教版上高手~謝謝 ※ 編輯: gn123 來自: 140.113.66.184 (06/04 13:20)

06/04 13:41, , 12F
我想你應該要先搞清楚字元編碼是什麼
06/04 13:41, 12F

06/04 13:41, , 13F
算了直接解釋好了
06/04 13:41, 13F

06/04 13:51, , 14F
你知道bit跟byte的差別嗎?
06/04 13:51, 14F

06/04 13:52, , 15F
1byte=8bit@@"
06/04 13:52, 15F

06/04 13:53, , 16F
要知道寫成程式的差別XD
06/04 13:53, 16F

06/04 13:59, , 17F
那你輸出一個字元1,就代表1byte
06/04 13:59, 17F

06/04 14:00, , 18F
huffman壓縮的意思就是不用1byte代表一個字
06/04 14:00, 18F

06/04 14:00, , 19F
常出現短的編碼代表他,這是huffman的精神
06/04 14:00, 19F

06/04 14:00, , 20F
他的1是1bit,但你輸出用了1byte當然會變大
06/04 14:00, 20F

06/04 14:01, , 21F
你要寫出檔案要用2進制模式,然後用bit寫出
06/04 14:01, 21F

06/04 14:01, , 22F
當然開檔也要用2進制模式顯示
06/04 14:01, 22F

06/04 14:02, , 23F
如果不懂,你在去看看huffman為什麼可以壓縮
06/04 14:02, 23F

06/04 14:03, , 24F
搞懂他的精神所在吧
06/04 14:03, 24F

06/04 14:08, , 25F
好的@@ 我再想一想 謝謝樓上熱心指導
06/04 14:08, 25F

06/04 17:52, , 26F
atoi()
06/04 17:52, 26F

06/04 17:58, , 27F
sorry沒atoi()這麼簡單,當我沒說好了~:P
06/04 17:58, 27F
文章代碼(AID): #1FoyFAup (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FoyFAup (C_and_CPP)