簡體   English   中英

使用霍夫曼樹解碼算法/實現

[英]Decoding algorithm/implementation using Huffman tree

從一個如下所示的文本文件開始:

a: 0
b: 100
c: 101
d: 11

0 0 100 100 11 101

所以這會解碼: aabbdc

我可以使用什么解碼算法構建一個霍夫曼樹然后用它來解碼消息? 示例代碼也將受到高度贊賞!

這就是我的想法:

  • 創建一個查找表,將每個符號映射到其位
  • 創建根節點
  • 構建樹,從編碼中讀取每個位
    • 如果為0,則創建一個左子項。 如果1,創造一個合適的孩子
    • 如果到達空間,以某種方式指示一片葉子(空左右指針)
      • 使用我們讀取的位直到該空間,看看這是什么查找表
      • 在該葉子處插入角色

然后,我可以再次閱讀每一位並讓它在樹中移動。 當它撞到一個空間時,我會在它到達的葉子處返回角色?

輸入中沒有/不應該有任何空格。 你應該得到像0010010011101這樣的東西。

要創建樹,對於每個字符,從根開始,對於每個位,如果它是0則向左移動,如果是1則向右移動(在需要時創建節點)。 當您到達某個字符的末尾時,將我們所在節點的值設置為該字符。

然后,從樹中的根開始查看輸入 - 執行與上面相同的操作,但是,而不是創建節點,只需在到達葉子時停止,在該節點輸出值並返回到根。

例:

a = 0 - 只為根創建一個左子項。

  .
 /
a

b = 100 - 向右(對於1 ),然后向左(對於0 ),然后再向左(對於0 )。

  .
 / \
a   .
   /
  .
 /
b

c = 101 - 向右,然后向左,然后向右。

  .
 / \
a   .
   /
  .
 / \
b   c

d = 11 - 向右走,然后向右走。

  .
 / \
a   .
   / \
  .   d
 / \
b   c

處理輸入00100 ......

從根開始。

我們得到0 ,所以左轉。
我們得到一個葉子這是值是a ,所以其輸出並返回到根。

我們得到0 ,所以左轉。
我們得到一個葉子這是值是a ,所以其輸出並返回到根。

我們得到1 ,所以走吧。
我們得到0 ,所以左轉。
我們得到0 ,所以左轉。
我們得到一個值為b的葉子,所以輸出它並返回到根。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM