设给定一个权值集合 W=(3,5,7,9,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的 带权路径长度 WPL。
时间: 2023-06-28 08:10:02 浏览: 268
哈夫曼树的构造过程如下:
1. 将所有权值按照从小到大的顺序排列,得到:(3,5,7,9,11)。
2. 取出权值最小的两个节点3和5,将它们合并成一个新节点,权值为8。此时得到的节点集合为(7,8,9,11)。
3. 取出权值最小的两个节点7和8,将它们合并成一个新节点,权值为15。此时得到的节点集合为(9,11,15)。
4. 取出权值最小的两个节点9和11,将它们合并成一个新节点,权值为20。此时得到的节点集合为(15,20)。
5. 最后将权值为15和20的节点合并成一个根节点,得到哈夫曼树。
哈夫曼树如下图所示:
```
35
/ \
15 20
/ \
7 8
/ \
3 5
```
根据哈夫曼树的定义,每个叶子节点都对应一个权值,而每个非叶子节点都对应一个权值之和。因此,我们可以通过遍历哈夫曼树来计算带权路径长度WPL。
在上面的哈夫曼树中,有5个叶子节点,分别对应权值3,5,7,9,11。它们的深度分别为2,2,1,1,1。因此,带权路径长度WPL为:
WPL = 2*3 + 2*5 + 1*7 + 1*9 + 1*11 = 6 + 10 + 7 + 9 + 11 = 43
因此,构造出的哈夫曼树的带权路径长度WPL为43。
相关问题
设给定一个权值集合 W=(3,5,7,9,11),计算哈夫曼树的 带权路径长度 WPL。
首先,哈夫曼树是一种最优二叉树,可以使得所有叶子节点的带权路径长度之和最小。计算步骤如下:
1. 将给定的权值集合从小到大排序,得到新的集合 W'=(3,5,7,9,11)。
2. 从 W' 中取出权值最小的两个节点,构造一棵新的二叉树,其中这两个节点分别作为新树的左右子节点,其权值为它们的和,把这个和记为 WPL1。
3. 将新构造的二叉树的根节点权值放回集合 W',并按照权值大小重新排序。
4. 重复步骤 2 和 3,直到 W' 中只剩下一个节点为止。此时,这个节点即为哈夫曼树的根节点,其带权路径长度即为 WPL。
具体计算过程如下:
1. W'=(3,5,7,9,11)。
2. 取出 3 和 5,构造新二叉树,其权值为 8,WPL1=3+5=8。
3. W'=(7,9,11,8)。
4. 取出 7 和 8,构造新二叉树,其权值为 15,WPL2=8+7=15。
5. W'=(9,11,15)。
6. 取出 9 和 11,构造新二叉树,其权值为 20,WPL3=9+11=20。
7. W'=(15,20)。
8. 取出 15 和 20,构造新二叉树,其权值为 35,WPL4=15+20=35。
9. W'=(35)。
10. 只剩下一个节点,WPL=35。
因此,给定的权值集合的哈夫曼树的带权路径长度为 35。
数据结构设给定权值集合w={3,5,7,8,11,12} ,请构造关于w的一棵huffman树。
好的,这是一个关于数据结构的问题,我可以回答。以下是构造出来的Huffman树(其中叶节点上的数字表示对应权值,非叶节点上的数字表示对应节点的权重):
```
46
/ \
23 23
/ \ / \
12 11 8 15
/ \ / | / \
5 7 3 5 7 8
```
希望能对您有所帮助。
阅读全文
相关推荐















