1.问题分析
采用贪心算法来实现霍夫曼编码。
2.算法设计思路
首先输入帯权值节点个数构造霍夫曼树,再利用贪心算法对节点进行编码,在对哈夫曼树编码的过程中,先对权值较大的节点进行编码,在编码的过程中它们的前缀中不能与其他已经编码过的节点相同,这样是为了在解码的过程中更加容易;霍夫曼编码的具体过程为采取可变长编码方式,对文件中出现次数多的字符采取比较短的编码,对于出现次数少的字符采取比较长的编码,可以有效地减小总的编码长度。
例如,在英文中,e的出现频率最高,z的出现频率最低,所以可以用最短的编码来表示e,用最长的编码表示z。
(1)构建霍夫曼树:
算法:输入是没有相同元素的字符数组(长度n)以及字符出现的频率,输出是哈夫曼树。
即假设有n个字符,则构造出得哈夫曼树有n个叶子结点。n个字符的权值(频率)分别设为w1,w2,…,wn,则哈夫曼树的构造规则为:
1)将w1,w2,…,wn看成是有n棵树的森林(每棵树仅有一个结点);
2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
3)从森林中删除选取的两棵树,并将新树加入森林;