[問題] 有人huffman 編/解碼的vhdl code..嗎

看板Programming作者 (嘻)時間18年前 (2006/07/09 15:56), 編輯推噓8(800)
留言8則, 6人參與, 最新討論串1/1
有人huffman 編/解碼的vhdl code..嗎 huffman壓縮的演算法大意如下: 假設一篇文章共出現五種符號:a、b、c、d、e、f 其出現次數各為:a:23次、b:5次、c:8次、d:13次、e:103次、f:25次 原本其各為8-bit的input,如:a=>00000000、f=>00000110 需將其使用huffman演算法壓縮,過程如下: 每步驟將兩兩最小的兩個數相加,以此法建huffman tree, 一:(b+c)、d、a、f、e 13 / \ b c d a f e (5) (8) (13) (23) (25) (103) 二:((b+c)+d)、a、f、e 26 / \ 13 d / \ (13) b c a f e (5) (8) (23) (25) (103) 三:((b+c)+d)、(a+f)、e 26 / \ 13 d 48 / \ (13) / \ b c a f e (5) (8) (23) (25) (103) 四:(((b+c)+d)+(a+f))、e 74 / \ 26 48 / \ / \ 13 d a f / \ (13)(23) (25) b c e (5) (8) (103) 五:((((b+c)+d)+(a+f))+e) 177 / \ 74 e / \ (103) 26 48 / \ / \ 13 d a f / \ (13)(23) (25) b c (5) (8) 以root為起點,向樹葉節點前進,每向左前進值填0,向右填1 所以壓縮後的編號為:a=>010、b=>0000、c=>0001、d=>001、e=>1、f=>011 與壓縮前的8-bit明顯少很多,此為huffman大致的用意。 不需要做的太好,只要能達到要求既可,大致的設計如下: 我們只設定這huffman程式能對64種符號解碼, 所以之前先定死這64個符號給其特定的8-bit的address a~z => 00000000~00011001 A~Z => 00011010~00110011 0~9 => 00110100~00111101 逗號 => 00111110 空白鍵 => 00111111 第一階段:存值 讀檔 ----> 將與其相對應的address給存在ROM裡面 ----> 將在ROM裡的address值一一output出來 ----> 第二階段:計算各符號出現次數 設64個變數counter計算每個符號出現的次數counter初始值為0 ----> 若該符號出現則其相對應的counter <= counter +1 ----> 當檔案內的所有符號都讀完且計算完出現的counter後將64個變數output出來 ----> 第三階段:建huffman tree 寫一個if判斷式,將值大於0的counter拿出來做sort排序大小 ----> 將每次sort完最小的前兩個值相加後存至一變數,此變數再回去和剩下的counter再sort ----> 建好後的tree找出其相對應的編碼值 ----> 第四階段:將編碼後的值output出來 將各符號編碼後的值output出來 ----> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.92.27

07/09 16:01, , 1F
非常有伸手文的嫌疑
07/09 16:01, 1F

07/09 16:01, , 2F
但看內文好像又不是那麼伸手 @@
07/09 16:01, 2F

07/09 16:02, , 3F
大家說該怎麼辦 @@
07/09 16:02, 3F

07/09 16:37, , 4F
伸手文應該像這樣:「huffman的code,掱一個」
07/09 16:37, 4F

07/09 19:12, , 5F
大概是會理論 不會coding吧 這樣比較有前途
07/09 19:12, 5F

07/09 22:46, , 6F
他CodeJob也po了一篇 內文完全一樣
07/09 22:46, 6F

07/10 00:21, , 7F
這篇文章不錯啊 把演算法寫的很詳細了
07/10 00:21, 7F

07/10 03:03, , 8F
Linux板也有,亂來嘛.... ==.==|||
07/10 03:03, 8F
文章代碼(AID): #14iBQiLY (Programming)
文章代碼(AID): #14iBQiLY (Programming)