哈夫曼树
哈夫曼树的构建步骤(合并最小权值)
1、初始叶子:G (3), A (5), C (7), D (8), H (11), E (14), F (23), B (29)
2、合并G (3)+A (5) → 节点 9 (8)
3、合并 C (7)+D (8) → 节点 10 (15) //优先用叶子的8
4、并 节点 9 (8)+H (11) → 节点 11 (19)
5、合并 E (14)+ 节点 10 (15) → 节点 12 (29)
6、合并 节点 11 (19)+F (23) → 节点 13 (42)
7、合并 B (29)+ 节点 12 (29) → 节点 14 (58)
8、合并 节点 13 (42)+ 节点 14 (58) → 节点 15 (100)
哈夫曼编码()左0右1
| 字符 | 权值 | 哈夫曼编码 |
|---|---|---|
| B | 29 | 00 |
| F | 23 | 01 |
| E | 14 | 100 |
| H | 11 | 1011 |
| D | 8 | 10101 |
| C | 7 | 10100 |
| A | 5 | 1101 |
| G | 3 | 1100 |
HT 数组初态与终态(下标 1~15)
初态(仅叶子节点有 data 和 weight,parent/child 均为 0)
| No | data | weig | pare | lchi | rchi |
|---|---|---|---|---|---|
| 1 | A | 5 | 0 | 0 | 0 |
| 2 | B | 29 | 0 | 0 | 0 |
| 3 | C | 7 | 0 | 0 | 0 |
| 4 | D | 8 | 0 | 0 | 0 |
| 5 | E | 14 | 0 | 0 | 0 |
| 6 | F | 23 | 0 | 0 | 0 |
| 7 | G | 3 | 0 | 0 | 0 |
| 8 | H | 11 | 0 | 0 | 0 |
| 9 | - | 0 | 0 | 0 | 0 |
| 10 | - | 0 | 0 | 0 | 0 |
| 11 | - | 0 | 0 | 0 | 0 |
| 12 | - | 0 | 0 | 0 | 0 |
| 13 | - | 0 | 0 | 0 | 0 |
| 14 | - | 0 | 0 | 0 | 0 |
| 15 | - | 0 | 0 | 0 | 0 |
终态(构建完成后)
| No | data | weig | pare | lchi | rchi |
|---|---|---|---|---|---|
| 1 | A | 5 | 11 | 0 | 0 |
| 2 | B | 29 | 14 | 0 | 0 |
| 3 | C | 7 | 10 | 0 | 0 |
| 4 | D | 8 | 10 | 0 | 0 |
| 5 | E | 14 | 12 | 0 | 0 |
| 6 | F | 23 | 13 | 0 | 0 |
| 7 | G | 3 | 9 | 0 | 0 |
| 8 | H | 11 | 11 | 0 | 0 |
| 9 | - | 8 | 11 | 7 | 1 |
| 10 | - | 15 | 12 | 3 | 4 |
| 11 | - | 19 | 13 | 9 | 8 |
| 12 | - | 29 | 14 | 5 | 10 |
| 13 | - | 42 | 15 | 11 | 6 |
| 14 | - | 58 | 15 | 2 | 12 |
| 15 | - | 100 | 0 | 13 | 14 |
时间复杂度
哈夫曼树构建的时间复杂度为 O(n2)(每次选最小权值节点需遍历 O(n),共 n−1 次合并)。
浙公网安备 33010602011771号