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编码的.