一. 给出解决文件压缩问题的贪心算法
Algorithm -HUFFMAN
输入: n个字符的集合C={c1,c2,…,cn}和它们的频度{f(c1),f(c2),…,f(cn)}.
输出: C的Huffman 树(V,T)
1.根据频度将所有字符插入最小堆H
2. VßC; T={}
3. for j=1 to n-1
4. c=DELETEMIN(H)
5. c’=DELETEMIN(H)
6. f(v)=f(c)+f(c’) { v 是一个新节点}
7. INSERT(H,v)
8. V=V ∪{v} { 添加v 到 V}
9. T=T ∪{(v,c),(v,c’)} { 使c和c’成为T中v的孩子}
10. end for
二. 程序实现上述算法(附:程序源代码)
(1)哈夫曼树的表示
设计哈夫曼树的结构体(htnode),其中包含权重、左右孩子、父母和要编码的字符。用这个结构体(htnode)定义个哈夫曼数组(hfmt[])。
迷宫定义如下:
typedef struct
{
int weight;
i