哈夫曼树及其应用

哈夫曼树的概念

        路径:从一个结点到另一个结点之间的分支序列

        路径长度:从一个结点到另一个结点所经过的分支数目

        结点的权:根据应用的需要可以给树的结点赋权值

        带权路径长度:从根到该结点的路径长度与该结点权的乘积

        树的带权路径长度:树中所有叶子结点的带权路径之和

        哈夫曼树:n个带权叶子结点构成的所有二叉树中带权路径长度最短的二叉树


示例:有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树

                                            


构造哈夫曼树

        1)初始化:根据给定的n个权值 ,构造n棵只有一个根结点的二叉树, n个权值分别是这些二叉树根结点的权;

        2)找最小树:F中选取两棵根结点树值最小的树作为左、右子树,构造一颗新的二叉树,置新二叉树根的权值为左、右子树根结点权值之和;

        3)删除与加入:F中删除这两颗树,并将新树加入F;

        4)判断:重复2)和3),直到F中只含一颗树为止,此时得到的这颗二叉树就是哈夫曼树。

示例:w={5,29, 7, 8, 14, 23, 3, 11}

        

            


哈夫曼编码

        前缀码:如果在一个编码系统中,任一个编码都不是其他任何编码的前缀,则称该编码系统中的编码是前缀码。例如,一组编码01,001,010,100,110就不是前缀码,因为01010的前缀,若去掉01010就是前缀码。

        哈夫曼编码:对一棵具有n个叶子的哈夫曼树,若对树中的每个左分支赋予0,右分支赋予1,则从根到每个叶子的通路上,各分支的赋值分别构成一个二进制串,该二进制串就称为哈夫曼编码。

        哈夫曼编码是最优前缀码。

猜你喜欢

转载自blog.csdn.net/qq_33408113/article/details/79920582