您的位置:首页 > 其它

哈夫曼编码

2016-05-09 19:12 405 查看

前言

哈夫曼编码是广泛应用于数据压缩的十分有效的编码方式。

今天就来简单叙述一下哈夫曼编码。

代码

由于书上代码比较简练,就直接抄书了。

类的定义

#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上编译没过哈(这里指语法错误),不过就这样看吧(我想编者仅仅是给一个参考,并不是让你照抄)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据压缩 贪心