3183: UVA_12676_Inverting Huffman(哈夫曼树)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:15
解决:13
题目描述
静态霍夫曼编码是一种主要用于文本压缩的编码算法。给出的文本为
由N个不同字符组成的特定大小,算法选择N个代码,每个代码对应一个不同的字符
性格使用这些代码压缩文本。为了选择代码,算法构建一个
有N片叶子的二元根树。对于N≥2,树可按如下方式构建。
1.对于文本中的每个不同字符,构建一个仅包含单个节点的树,并将其分配给它
与文本中字符出现次数一致的权重。
2.建立一个包含上述N棵树的集合。
3.当s包含多个树时:
(a) 选择具有最小权重的t1∈s,并将其从s中删除。
(b) 选择具有最小权重的t2∈s,并将其从s中删除。
(c) 构建一个新的树t,t1作为其左子树,t2作为其右子树,并将
t1和t2的权重之和。
(d) 将t包含在s中。
4.返回s中唯一保留的树。
输入
输入文件包含几个测试用例,每个测试用例如下所述。
第一行包含表示不同字符数的整数N(2≤N≤50)
出现在文本中的。第二行包含N个整数Li
指示代码的长度
通过霍夫曼算法为不同字符选择(i=1,2,…,N时,1≤Li≤50)。你可以
假设至少有一棵树,按照所述构建,生成具有给定长度的代码。
输出
对于每个测试用例,输出一行,其中一个整数表示最小大小(字符),以便生成的代码具有给定的长度。
样例输入 复制
2
1 1
4
2 2 2 2
10
8 2 4 7 5 1 6 9 3 9
样例输出 复制
2
4
89