哈弗曼树的构建过程及编码

一,哈弗曼树的构建过程
哈夫曼树的定义
一棵二叉树要使其带权路径长度越小,权值越大的结点越接近树的根结点,而权值越小的结点越远离树的根结点。其基本思想是:
(1)初始化:由给定的n个权值{w1,w2,…,wn}构成n棵只有一个根结点二叉树,从而得到一个二叉树集合F={T1,T2,…,Tn},其中每一棵二叉树Ti中都只有一个权为wi的根结点,其左、右子树为空。
(2)选取与合并:在F中选出两棵根结点权值最小的树作为一棵新二叉树的左、右子树,新二叉树的根结点的权值为其左、右子树根结点的权值之和。
(3)删除与插入:从F中删除作为左,右子树的两棵二叉树,并把新建的二叉树加入到F中。
(4)重复步骤(2)、(3),直到集合中只含有一棵树时,这棵树便为哈夫曼树。
哈夫曼树的构造过程示意图如下:
例:给定的一组键值W=(2,3,5,7,11,9,12),试造相应的哈夫曼树
在这里插入图片描述

二,哈夫曼树编码
哈夫曼树可用于构造最短的不等长编码方案。其具体方法如下:
设需要编码的字符集合为{d1,d2,…,dn},它们在字符串中出现的频率为{w1,w2,…,wn},以d1,d2,…,dn作为叶结点,w1,w2,…,wn作为结点的权,利用哈夫曼算法构造一棵最优二叉树,规定将树中每个分支结点的左分支标上"0";右分支标上"1",把从根到每个叶子的路径符号(“0"或"1”)连接起来,作为该叶子的编码。

示例:以上图的哈夫曼树为例。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值