数据结构与算法学习六(基于JavaScript)---- 哈夫曼树

本文介绍了哈夫曼树的概念,包括路径长度和带权路径长度,并详细阐述了哈夫曼算法的构建过程。通过示例展示了如何用给定的权值集合构造哈夫曼树,并解释了哈夫曼编码在数据压缩中的应用,强调了变长编码相较于定长编码的效率优势。
摘要由CSDN通过智能技术生成

也称最优二叉树。是带权路径长度最小的二叉树。

概念:

1、路径长度

路径: 从树中的一个节点到另一个节点之间的分支构成这两点之间的路径
路径长度:路径上的分支条数,树的路径长度是从树的根节点到每个节点的路径长度之和。

2、带权路径长度

节点的带权路径长度为从该节点到根节点之间的路径长度与节点上权的乘积。树的带权路径长度为树中所有叶子节点的带权路径长度之和。记为WPL。
如下图:
(图 WPL)
图a WPL = 2*(2+4+5+7) = 36
图b WPL = 2+42+3(5+7) = 46
图c WPL = 7+52+3(2+4) = 35

其中图c 的WPL最小,为哈夫曼树。节点权值越大,距离根节点就越近。

哈夫曼算法:

哈夫曼算法是构造权值集合为{w0,w1…wn}的哈夫曼树,其算法思路如下:
1、根据给定的n个权值{w0,w1…wn},构造具有n棵扩充二叉树的森林 F={T0,T1,…Tn},对于每棵扩充二叉树Ti只有一个带权值的Wi的根节点,左右子树都为空。
2、重复一下步骤,直到F中只剩下一棵树为止
(1)、在F中选取两棵根节点的权值最小的扩充二叉树,把这两棵树作为左右子树构造一颗新的二叉树,这个新的二叉树的根节点的权值为其左右两棵子树根节点的权值之和
(2)、在F中删除第一步中选取的两棵二叉树
(3)、将第一步中构造的新的二叉树加入到F中
最后得到的就是哈夫曼树。

例子:如给定的权值集合为{7,5,2,4},构造哈夫曼树的过程如下:
(图哈夫曼构造树)

哈夫曼编码:

在通信领域,经过哈夫曼编码的信息小于大量冗余数据,提高传输效率,是重要的数据压缩方法。

一段信息由a,b,c,d,e 5个字符组成,各自出现的概率是0.12 0.4 0.15 0.08 0.25 ,把这几个字符串编码成二进制的01序列,有两种方法:一种是

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值