哈夫曼树的构造

Huffman树是一种特殊结构的二叉树,由Huffman树设计的二进制前缀编码,也称为Huffman编码在通信领域有着广泛的应用。在word2vec模型中,在构建层次Softmax的过程中,也使用到了Huffman树的知识。
哈夫曼树并不唯一,但带权路径长度一定是相同的。

下面是构建哈夫曼树的过程:
比如:8个结点的权值大小如下:


1、 从19,21,2,3,6,7,10,32中选择两个权小结点。选中2,3。同时算出这两个结点的和5。
哈夫曼树的构造_第1张图片
2、 从19,21,6,7,10,32,5中选出两个权小结点。选中5,6。同时计算出它们的和11。
哈夫曼树的构造_第2张图片
3、 从19,21,7,10,32,11中选出两个权小结点。选中7,10。同时计算出它们的和17

(BTW:这时选出的两个数字都不是已经构造好的二叉树里面的结点,所以要另外开一棵二叉树;或者说,如果两个数的和正好是下一步的两个最小数的其中的一个,那么这个树直接往上生长就可以了,如果这两个数的和比较大,不是下一步的两个最小数的其中一个,那么就并列生长。)
哈夫曼树的构造_第3张图片

4、 从19,21,32,11,17中选出两个权小结点。选中11,17。同时计算出它们的和28。

哈夫曼树的构造_第4张图片
5、 从19,21,32,28中选出两个权小结点。选中19,21。同时计算出它们的和40。另起一颗二叉树
哈夫曼树的构造_第5张图片
6、 从32,28, 40中选出两个权小结点。选中28,32。同时计算出它们的和60

哈夫曼树的构造_第6张图片
7、 从 40, 60中选出两个权小结点。选中40,60。同时计算出它们的和100。 好了,此时哈夫曼树已经构建好了。

哈夫曼树的构造_第7张图片

你可能感兴趣的:(数据结构)