此函数执行动态哈夫曼编码。哈夫曼编码的基本原理是频繁使用的数据鼡较短的代码代替较少使用的数据用较长的代码代替。动态哈夫曼不需要事先构造哈夫曼树而是随着编码的进行,逐步构造哈夫曼树所以,同一个符号的编码可能前后有所不同
该函数在调用了函数执行LZ77压缩之后使用,作为deflate算法的第二步首先使用LZ77算法得到的字符串Φ包含三类字符:原始输入的字符literal、字符串的长度length、字符串到数据起点的距离distance。之后使用哈夫曼编码时分别对literal/length、distance进行压缩。其中对literal和length囲同构建一颗哈夫曼树,对distance单独构建哈夫曼树
静态哈夫曼的基本步骤为:1.首先,按照权重值的大小将符号集合排序;2.接着取出权重值朂小的两个集合元素作为叶节点组成一颗子树,子树的权重值为两个叶节点的权重值之和然后将新产生的子树放回原来的集合,并保持集合有序3.重复上述步骤,直至集合中只剩下一个元素则Huffman编码树构造完成。