前言
哈夫曼编码是广泛应用于数据压缩的十分有效的编码方式。
今天就来简单叙述一下哈夫曼编码。
代码
由于书上代码比较简练,就直接抄书了。
类的定义
#include"iostream"
#include"cstdlib"
#include"cstdio"
using namespace std;
template <class Type>
class Huffman {
friend BinaryTree <int> HuffmanTree(Type[], int);
public:
operator Tyoe()const { return weight; }
private:
BinaryTree <int> tree;
Type weight;
};
算法描述
template<class Type>
BinaryTree <int>HuffmanTree(Type f[], int n)
{
Huffman<Type>*w = new Huffman <Type>[N+1];
BinaryTree <int > z, zero;
for (int i = 1;i <= n;i++)
{
z.MakeTree(i, zero, zero);
w[i].weight = f[i];
w[i].tree = z;
}
MinHeap<Huffman<Type>>Q(1);
Q.Initalize(w,n,n);
Huffman<Type>x, y;
for (int i = 1;i < n;i++)
{
Q.DeleteMin(x);
Q.DeleteMin(y);
z.MakeTree(0,x.tree,y.tree);
x.weight += y.weight;
x.tree = z;
Q.Insert(x);
}
Q.DeleteMin(x);
Q.Deactivate();
delete[]w;
return x.tree;
}
小结
虽然书上是这么写,但是vs上编译没过哈(这里指语法错误),不过就这样看吧(我想编者仅仅是给一个参考,并不是让你照抄)。