哈夫曼编码和哈夫曼树的构建与解释

1,数据结构——哈夫曼(Huffman)树+哈夫曼编码

https://www.cnblogs.com/wkfvawl/p/9783271.html

假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,哈夫曼树的构造规则为

1. 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); 

2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和; 

3. 从森林中删除选取的两棵树,并将新树加入森林; 

4. 重复(02)、(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

以权值为{5,6,7,8,15}为例,来构造一棵哈夫曼树:

第1步:创建森林,森林包括5棵树,这5棵树的权值分别是5,6,7,8,15。 

第2步:在森林中,选择根节点权值最小的两棵树(5和6)来进行合并,将它们作为一颗新树的左右孩子(谁左谁右无关紧要,这里,我们选择较小的作为左孩子),并且新树的权值是左右孩子的权值之和。即,新树的权值是11。 然后,将"树5"和"树6"从森林中删除,并将新的树(树11)添加到森林中。 

第3步:在森林中,选择根节点权值最小的两棵树(7和8)来进行合并。得到的新树的权值是15。 然后,将"树7"和"树8"从森林中删除,并将新的树(树15)添加到森林中。 

第4步:在森林中,选择根节点权值最小的两棵树(11和15)来进行合并。得到的新树的权值是26。 然后,将"树11"和"树15"从森林中删除,并将新的树(树26)添加到森林中。 

第5步:在森林中,选择根节点权值最小的两棵树(15和26)来进行合并。得到的新树的权值是41。 然后,将"树15"和"树26"从森林中删除,并将新的树(树41)添加到森林中。  此时,森林中只有一棵树(树41)。这棵树就是我们需要的哈夫曼树!

哈夫曼编码和哈夫曼树的构建与解释_第1张图片

2,漫画:什么是 “哈夫曼树” ?

https://blog.csdn.net/bjweimengshu/article/details/105383513

假设有6个叶子结点A,B,C,D,E,F,权重依次是2,3,7,9,18,25,如何构建一颗哈夫曼树,也就是带权路径长度最小的树呢?

 


3,Huffman coding哈夫曼编码和哈夫曼树的构建与解释_第2张图片

https://en.wikipedia.org/wiki/Huffman_coding

哈夫曼编码和哈夫曼树的构建与解释_第3张图片

哈夫曼编码和哈夫曼树的构建与解释_第4张图片

你可能感兴趣的:(机器学习入门)