计算Huffman树的带权路径长度WPL
编程背景
Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。
- 输入:第一行为要编码的符号数量n,第二行~第n+1行为每个符号出现的频率
- 输出:对应哈夫曼树的带权路径长度WPL
- 测试用例举例:
思路
因为要完成对应的输入输出,我首先想到的就是通过最简单的一维数组的方式。因为本题只要求计算WPL,观察其输入输出,故我并没有考虑使用链表。
借鉴
通过网站上浏览资料,发现一个好技巧:
WPL 为所有叶节点的带权路径长度之和,同时也是所有非叶子结点的权值之和。
详细解释见:哈夫曼树的WPL值的计算
程序实现
m函数:返回一维数组S中最小的数,并将其从数组中剔出
int m(){
int min, position=0;
min = S[0