哈夫曼树的特点

哈夫曼树的特点:

  • 没有度为1的结点(每个非叶子结点都是由两个最小值的结点构成)
  • n个叶子结点的哈夫曼树总共有2n-1个结点

         n0:叶结点总数

         n1:只有一个儿子的结点总数

         n2:有2个儿子的结点总数

          n2=n0-1

       N=n0+n1+n2=2n-1

  • 哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树;
  • 对同一组权值{w1,w2,..},存在不同构的两个哈夫曼树,但是它们的总权值相等

      例如:{1,2,3,3},不同构的两棵哈夫曼树。

          

转载于:https://www.cnblogs.com/cynthia-dcg/p/6762000.html

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于给定的一组权值 {5, 7, 2, 13, 9},构建哈的过程如下: 1. 将这组权值从小到大排序,得到{2, 5, 7, 9, 13}。 2. 取出权值最小的两个节点,即2和5,构建一个新节点,权值为2+5=7,且将2和5分别作为左右子节点,得到如下形结构: ``` 7 / \ 2 5 ``` 3. 将剩余权值从小到大排序,得到{7, 9, 13}。 4. 取出权值最小的两个节点,即7和9,构建一个新节点,权值为7+9=16,且将7和9分别作为左右子节点,得到如下形结构: ``` 16 / \ 7 9 / \ 2 5 ``` 5. 将剩余权值从小到大排序,得到{13}。 6. 取出权值最小的两个节点,即13和16,构建一个新节点,权值为13+16=29,且将13和16分别作为左右子节点,得到如下形结构: ``` 29 / \ 13 16 / \ 7 9 / \ 2 5 ``` 7. 由此得到哈,其中叶节点为原始权值,每个叶子节点的路径上的0和1表示该权值的哈编码。 ### 回答2: 哈是一种用于数据压缩的形结构。它通过构建一个状的编码表来减少数据的存储空间。 构建哈的过程如下: 1. 统计给定数据中每个字符出现的频率,并将其保存在节点中。频率越高的字符,节点的权值越大。 2. 将每个节点看作是一棵,并将它们放入一个优先队列中。队列中的节点按权值从小到大排列。 3. 从队列中取出权值最小的两个节点,创建一个新的节点作为它们的父节点,其权值为两个子节点权值之和。将该新节点再次放入队列中。 4. 重复第3步骤,直到队列中只剩下一个节点,此时这个节点就是哈的根节点。 通过以上步骤得到的哈具有以下特点: 1. 的叶子节点对应于原始数据中的字符,而根节点不对应任何字符。 2. 从根节点到每个叶子节点的路径都代表了字符的编码,路径上的左分支表示0,右分支表示1。 3. 由于根据字符出现频率分配权值,频率越高的字符越靠近根节点,其编码长度较短,从而达到了压缩数据的目的。 综上所述,哈是通过统计字符频率、构建状编码表和压缩数据的一种形结构。它利用字符出现的频率来构建,从而减少数据的存储空间。 ### 回答3: 哈是一种用于实现哈编码的数据结构,它是一种特殊的二叉。哈的构建过程是通过组合和调整权重最小的两个节点来建立的。 假设有一组频率为[5, 7, 2, 13, 9, 1]的节点,我们要构建哈。 首先,根据频率大小依次将节点放入一个最小堆中(频率最小的节点在堆顶)。然后,不断取出堆顶的两个节点,将它们作为子节点组成一个新节点,新节点的权重为两个子节点的权重之和,并将新节点插入堆中。这个过程一直持续到堆中只剩一个节点,这个节点就是哈的根节点。 具体步骤如下: 1. 将节点[5, 7, 2, 13, 9, 1]依次插入最小堆中:[1, 2, 5, 7, 9, 13]。 2. 从堆中取出两个最小节点1和2,组成一个新节点,权重为3,更新堆:[3, 5, 7, 9, 13]。 3. 从堆中取出两个最小节点3和5,组成一个新节点,权重为8,更新堆:[7, 8, 9, 13]。 4. 从堆中取出两个最小节点7和8,组成一个新节点,权重为15,更新堆:[9, 13, 15]。 5. 从堆中取出两个最小节点9和13,组成一个新节点,权重为22,更新堆:[15, 22]。 6. 从堆中取出两个最小节点15和22,组成一个新节点,权重为37,更新堆:[37]。 7. 堆中只剩下一个节点37,它就是哈的根节点。 最终得到的哈为: 37 / 15 / \ 9 13 / \ 5 7

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值