Huffman编码

Huffman编码是一种比较好的变长编码的方式. 一般的方式中Huffman树的度为2, 一般采用的是Huffman树. 这个时候其实是对应的使用两个字符进行编码的方式. 但是如果采用的编码字符数多于两个的时候, 该怎么构建Huffman树呢?

是所采用的编码的个数. 其实, 对于的情况, 第一次进行合并的时候应该合并个, 其中,并且.这样我们可以进行遍历, 找到合适的: .

所以此时构建步骤如下:

1. 根据上面的公式求出

2. 将所有的结点放入到优先队列Q中, 然后不断的从Q中取出d个结点, 将这d个结点合并成一棵树,然后插入到Q中去.

3. 下面是每棵子树合并成一棵树,不断的进行,直到只剩一棵树.

伪代码如下:

//计算d和k

for(int i=2;i<=sigma;i++){

k=(n-d)/(sigma-1)

if(k*(sigma-1)==n-d)

break;

}

//从Q中不断的取出d个子树,进行合并,然后再插入到Q中.

for(int i=1;i<=d;i++){

x=Q.top();

……

}

//不断的每sigma个进行合并.

for(int i=1;i<=k-1;i++){

for(int j=1;j<=sigma;j++)//从Q中取出sigma个进行合并

{

….

}

}

下面是一个课件,介绍Huffman编码的.

posted @ 2012-08-30 18:15  Mr.Rico  阅读(...)  评论(...编辑  收藏