给定8片树叶,其权值分别是2,3,5,7,9,11,13,17,请用Huffman算法构造最优二叉树并计算其权值。
时间: 2024-03-25 09:37:10 浏览: 209
好的,根据Huffman算法,我们可以先将这8片树叶按照权值从小到大进行排序,得到:
2,3,5,7,9,11,13,17
然后我们将权值最小的两个树叶取出来,合并成一棵树,其权值为2+3=5。得到新的序列:
5,5,7,9,11,13,17
继续取权值最小的两个树叶,合并成一棵树,其权值为5+5=10。得到新的序列:
7,9,10,11,13,17
继续取权值最小的两个树叶,合并成一棵树,其权值为7+9=16。得到新的序列:
10,11,13,16,17
继续取权值最小的两个树叶,合并成一棵树,其权值为10+11=21。得到新的序列:
13,16,17,21
继续取权值最小的两个树叶,合并成一棵树,其权值为13+16=29。得到新的序列:
17,21,29
最后取权值最小的两个树叶,合并成一棵树,其权值为17+21=38。这棵树就是最优二叉树,其权值为38。
构造的最优二叉树如下图所示:
```
38
/ \
17 21
/ \
9 12
/ \
5 7
/ \ / \
2 3 5 2
```
其中左子树的叶子节点代表的原始权值为2、3、5、7,右子树的叶子节点代表的原始权值为9、11、13、17。
相关问题
给定权值{2,3,6,8,9,11,4,5},私构造huffman树,并求其wpl
首先,我们需要构建哈夫曼树:
1. 将权值从小到大排序:{2,3,4,5,6,8,9,11}
2. 取出权值最小的两个节点,将它们合并成一个新节点,权值为两个原节点的权值之和,然后将新节点插入到排序好的序列中,重复上述步骤,直到序列中只剩下一个节点,即为哈夫曼树的根节点。
具体过程如下:
| 步骤 | 序列 | 操作 | 描述 |
| ---- | -------------------------------- | ------------------------------------------------------------ | -------------------------------------------------- |
| 1 | {2,3,4,5,6,8,9,11} | 取出2和3,合并成一个新节点,权值为2+3=5,插入到序列中 | {5,4,5,6,8,9,11} |
| 2 | {4,5,5,6,8,9,11} | 取出4和5,合并成一个新节点,权值为4+5=9,插入到序列中 | {5,5,6,8,9,11,9} |
| 3 | {5,5,6,8,9,11,9} | 取出5和5,合并成一个新节点,权值为5+5=10,插入到序列中 | {6,8,9,10,11,9,9} |
| 4 | {6,8,9,10,11,9,9} | 取出6和8,合并成一个新节点,权值为6+8=14,插入到序列中 | {9,9,10,11,9,14} |
| 5 | {9,9,10,11,9,14} | 取出9和9,合并成一个新节点,权值为9+9=18,插入到序列中 | {10,11,9,14,18} |
| 6 | {10,11,9,14,18} | 取出10和11,合并成一个新节点,权值为10+11=21,插入到序列中 | {14,18,21,9} |
| 7 | {14,18,21,9} | 取出14和18,合并成一个新节点,权值为14+18=32,插入到序列中 | {21,9,32} |
| 8 | {21,9,32} | 取出21和9,合并成一个新节点,权值为21+9=30,插入到序列中 | {30,32} |
| 9 | {30,32} | 取出30和32,合并成一个新节点,权值为30+32=62,插入到序列中 | {62} |
| | | | 哈夫曼树构建完成,根节点的权值为62 |
接下来,我们需要计算哈夫曼树的带权路径长度(WPL)。WPL 是指所有叶节点的权值乘以它们与根节点的距离之和。具体计算过程如下:
| 节点 | 权值 | 距离 | 权值乘以距离 |
| ---- | ---- | ---- | ------------ |
| 2 | 2 | 4 | 8 |
| 3 | 3 | 4 | 12 |
| 4 | 4 | 3 | 12 |
| 5 | 5 | 3 | 15 |
| 6 | 6 | 2 | 12 |
| 8 | 8 | 2 | 16 |
| 9 | 9 | 2 | 18 |
| 11 | 11 | 2 | 22 |
WPL = 8+12+12+15+12+16+18+22 = 115
因此,给定权值{2,3,6,8,9,11,4,5}的哈夫曼树的WPL为115。
给定权值集合w={3,5,7,8,11,12} ,请构造关于w的一棵huffman树,并求其加权路径长度WPL 。
首先,我们需要将权值从小到大排序,得到w={3,5,7,8,11,12}。
然后,我们依次取出权值最小的两个节点,将它们合并成一个新的节点,新节点的权值为这两个节点的权值之和。重复这个过程,直到所有节点都被合并成一个根节点。
具体来说,我们可以按照以下步骤构造Huffman树:
1. 将所有节点看作是一棵只有根节点的树。
2. 从w中取出权值最小的两个节点,将它们合并成一个新的节点,并将新节点插入到树中。
3. 将w中已经取出的两个节点从w中删除。
4. 重复步骤2和3,直到w中只剩下一个节点,即根节点。
构造出来的Huffman树如下所示:
```
46
/ \
/ \
18 28
/ \ / \
8 10 11 17
/ \ / \
3 5 7 8
```
最后,我们计算出Huffman树的加权路径长度WPL。WPL是指每个叶子节点的权值乘以从根节点到该叶子节点的路径长度之和的总和。
根据Huffman树,每个叶子节点的WPL分别为:
```
3 * 4 = 12
5 * 4 = 20
7 * 3 = 21
8 * 3 = 24
11 * 2 = 22
12 * 2 = 24
```
因此,Huffman树的WPL为12+20+21+24+22+24=123。
阅读全文