哈夫曼树及其应用

哈夫曼树是一种带权路径长度最短的二叉树,常用于数据压缩和编码。通过构造过程可以得到哈夫曼树,进而生成哈夫曼编码,这是一种最优的前缀码。文章介绍了哈夫曼树的概念、构造方法以及哈夫曼编码的定义和特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈夫曼树的概念

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

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

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

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

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

        哈夫曼树: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,则从根到每个叶子的通路上,各分支的赋值分别构成一个二进制串,该二进制串就称为哈夫曼编码。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值