c语言实现已知A0.15;B0.3;C0.1;D0.1;E0.2;F0.15,把这些字母和频率作为叶子结点及权值,计算带权路径长度WPL(有计算过程)
时间: 2023-07-30 19:08:16 浏览: 128
首先,我们需要将这些叶子节点按照权值从小到大排序,方便后面的计算。
排序后得到:
C 0.1
D 0.1
A 0.15
F 0.15
B 0.3
E 0.2
接下来,我们需要构建哈夫曼树,具体步骤如下:
1. 将上述排序后的叶子节点依次插入一个空的优先队列中,队列按照叶子节点权值的大小进行排序。
2. 从队列中弹出权值最小的两个节点作为左右子节点,构建一个新的父节点,父节点的权值为左右子节点的权值之和。
3. 将新的父节点插入队列中,按照权值大小排序。
4. 重复步骤2和3,直到队列中只剩下一个节点,即为哈夫曼树的根节点。
构建出的哈夫曼树如下所示:
```
1.0
/ \
/ \
0.2 0.8
/ \ / \
/ \ / \
0.1 0.1 0.3 0.5
C D A 0.35
/ \
0.15 0.2
F E
```
最后,我们需要计算带权路径长度WPL,即将每个叶子节点的权值与其到根节点的距离相乘,再将所有叶子节点的结果相加。计算过程如下:
WPL = (0.1 * 2) + (0.1 * 2) + (0.15 * 2) + (0.15 * 2) + (0.3 * 1) + (0.2 * 1) = 1.15
因此,带权路径长度WPL为1.15。
阅读全文