最小生成树不唯一但路径中的边权不完全相同_哈夫曼树基础

[TOC]

基础概念

路径:

  • 在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径

262a4a3e42686a2833c41f9bd8b246f9.png

路径长度:

  • 在一棵树中,从一个结点到另一个结点所经过的“边”的数量,被我们称为两个结点之间的路径长度。

37b81eea862af5323319281c4d1e8207.png

结点的带权路径长度:

  • 结点的带权路径长度,是指树的根结点到该结点的路径长度,和该结点权重的乘积。边数*权重

15564be0dc5099b2acfd9dd95d4413f0.png

树的带权路径长度:

  • 在一棵树中,所有叶子结点的带权路径长度之和,被称为树的带权路径长度,也被简称为WPL。

7bc28ecc0d7e32c1a78c2dd7fe5571c3.png

哈夫曼树

  1. 就是保重树的带权路径长度最小。
  2. 哈夫曼树不唯一。
  3. 复杂度:nlog(n) 队列:log(n) 节点:n

实现逻辑

  1. ​ 借助辅助队列,由小到大入队列。
  2. 借助辅助队列,我们可以找到权值最小的结点2和3,并根据这两个结点生成一个新的父结点,父节点的权值是这两个结点权值之和。
  3. 从队列中移除上一步选择的两个最小结点,把新的父节点加入队列也就是从队列中删除2和3,插入5,并且仍然保持队列的升序。队列数据长度为一,结束。

图解

c9546ecee784e8e2980ec602d4ae204b.png

c6b5932864ed32800376aaa523f7d00b.png

8047ce8ba886a03c7613bc77817eed63.png

07dbd458ece32fc2f3644c3132e7a637.png

501189d5b11aadbd56675f1ece65686b.png

ef35604c38ecb0bfb2df8bda93176e1b.png

d9fb5eece10456b16414c627b67d8926.png

f5caef6abd41962cbeb4e8f6e8458364.png

37819ad1833caf4d6cad9fcc07610f49.png

8953f2511b2a6cb9d0b5b7de48576663.png

db8353343729a34bd2a0bf9ca7513682.png

78567813ff8b1ac15be5e06fd4f2430a.png

代码实现

package 

输出

[data:null;weight:18.0, data:a;weight:7.0, data:null;weight:11.0, data:b;weight:5.0, data:null;weight:6.0, data:d;weight:2.0, data:c;weight:4.0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值