簡體   English   中英

從代碼表構建霍夫曼樹

[英]Build a huffman tree from a code table

我對如何從代碼表構建霍夫曼樹感到困惑。 代碼表由兩列組成,字符串代碼(二進制表示)和symb(十六進制值)

symbCode結構:

struct symbCode
{
char symb;
string code; //string of '0' and '1'
};

功能:

void huffmanTree::buildTreeFromCodeTable(symbCode *table, int n)
{
//construct the Huffman tree from the code table
//n = number of symbols in the code table

}

我在Google上搜索了一些提供霍夫曼樹教程的網站。 但我仍然無法弄清楚。 我應該新建一個樹節點還是做其他事情?

參考表:

 Num_Alphabet 96
 ASCII  Huffman_Code
  a     011000
 20     0100
 21     11101110110
 22     1110111010
 23     11101111000
 24     11101111001
 25     11110100001
 26     0000010000
 27     0000010001
 28     100100100
 29     100100101
 2a     000000100
 2b     000000101
 2c     0110010
 2d     101101000
 2e     1110010
 2f     0000000110
 30     11110101
 31     11110110
 32     11110111
 33     11111010
 34     11111011
 35     11111100
 36     11111101
 37     11111110
 38     11111111
 39     0000011
 3a     101101001
 3b     01100110
 3c     000001001
 3d     00000011
 3e     000000000
 3f     01100111
 40     0000000111
 41     00011
 42     1110011
 43     001010
 44     011010
 45     01010
 46     001000
 47     1110110
 48     1001000
 49     10101
 4a     0010011
 4b     1000001
 4c     011111
 4d     100001
 4e     010110
 4f     00010
 50     1111100
 51     00000101
 52     010111
 53     10100
 54     110000
 55     110011
 56     10010011
 57     100000010
 58     000000001
 59     10110101
 5a     000000010
 5b     11101111100
 5c     11101111101
 5d     11101111110
 5e     11101111111
 5f     11101110010
 60     11101110011
 61     10001
 62     100101
 63     110001
 64     110010
 65     10011
 66     101111
 67     101100
 68     011110
 69     11010
 6a     001011
 6b     011011
 6c     111100
 6d     00001
 6e     111010
 6f     01110
 70     101110
 71     111101001
 72     111000
 73     11011
 74     00110
 75     00111
 76     0010010
 77     10000000
 78     100000011
 79     1011011
 7a     1111010001
 7b     1110111101
 7c     11110100000
 7d     1110111000
 7e     11101110111

使用二叉樹,對於每個節點,您都有兩條路徑:左子節點和右子節點。 左子節點表示0,右子節點表示1。在整棵樹完成之后,從根到葉節點,路徑(1s和0s的順序)是葉節點中值的代碼。

因此,表中的每個代碼實際上都是從根到葉的路徑。 一一挑選代碼,檢查從根開始的路徑(和從左開始的代碼),如果不存在,則創建所有節點(包括葉子); 如果部分存在(代碼中的左數相同),請完成通往葉子的路徑。

暫無
暫無

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

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