20160430 編碼

作者: htx9 (螞蟻)   2016-04-30 20:35:52
這星期在寫霍夫曼編碼(怎麼霍常打成難?),是大二資料結構其中一個作業。
當初寫了很久弄不出來,眼看已經過了交件期限了,後來跑去找助教求助,
助教說在考試前寫出來就好了,幸好最後是寫出來了。
這次再嘗試寫霍夫曼編碼,當初不曉得作業內容是不是有包括解碼的部分。
建構霍夫曼樹和編碼的部分還算容易,比較覺得麻煩在於解碼的部分。
編碼後將各字母和其頻率等檔頭資料和壓縮後的資料輸出成文字檔,
後來發現有問題(使用c語言fputc輸出'\n',會同時輸出'\r',造成檔案解碼錯誤),
再來就是判斷檔案結尾的部分,因為壓縮後的資料可能會包含0xff,
如果用EOF常數或feof函數來判斷可能會出問題,最後用懶人法,
先計算出壓縮碼部分的長度用來做檔案結尾的判斷比較不會有問題。
個人讀檔用的是fgetc函數而不是fread,所以可能會有比較多的問題。
當初選用c語言寫,也是因為當時作業也是用c語言下去寫,來體會一下當時的心境。
碰到一些問題,有關解碼失敗的bug,找了三天才把bug解掉。
解碼的部分也是也讀取檔頭(字母和其頻率),重建霍夫曼樹,
然後根據壓縮碼走訪霍夫曼樹並解碼。
總之最後寫出來的感覺很踏實,好像稍微重拾了當初寫程式的熱情。
接下來再給自己一個功課下去研究吧。
好好加油!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com