数据结构 —— 3 树(下)

1 堆(heap)

1.1 什么是堆

在这里插入图片描述
需要2个基本操作:插入;取出一个最大(小)值
在这里插入图片描述
在这里插入图片描述

搜搜树的优点:插入节点与树的高度有关系;删除节点,即删除最大值或最小值,要么在最左边要么在最右边,所以搜索树不论是插入还是删除的时间效率都是树的高度
如果每次都删除最大的,则每次都删除最右边的节点,导致树歪掉了,树的高度就不再是log2n,所有不用二叉搜索树
如何让结构平衡一点,最好的方法就是用完全二叉树
堆的一个特点:使用完全二叉树存储,任何节点都比它的左右子树的值大
在这里插入图片描述
在这里插入图片描述

1.2 堆的抽象数据类型描述

在这里插入图片描述

1.3 最大堆的操作

创建

在这里插入图片描述
堆的第一个数据的存放是从数组下标为1的位置开始的,下标为0的作为哨兵
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插入35后有序性被破环了,35>31,所以要进行调整
在这里插入图片描述
将35与31的位置互换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插入58后,58>31,58与31互换
换完之后,58>44,58与44互换
在这里插入图片描述

插入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当比到下标为1时,不需要再继续往前比了,因此

for(;H->Elements[i/2]<item && i>1;i/=2)
	H->Elements[i]=H->Elements[i/2];
//每次把节点和item比较,若小于,则把它的值赋给它的子节点

而如果有哨兵,H->Elements[0]=MaxData,则不用考虑上述的加一个条件
在这里插入图片描述
在这里插入图片描述

删除

在这里插入图片描述
删除最大值即删除53
删除后
在这里插入图片描述
把最后一个值31拷贝到根节点
在这里插入图片描述
Parent2<=H->size:判断是否有左儿子
Child=Parent
2:假设左儿子最大
然后进行判断,找出最大的那个儿子
child!=H->size:确保他有右儿子
在这里插入图片描述
在这里插入图片描述

最大堆的建立

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上图不是堆需要调整
倒数第一个有儿子的节点,其左儿子或右儿子均只有1个,所以这一块可以调整为堆
然后依次调整前面的节点
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 哈夫曼树与哈夫曼编码

2.1 什么是哈夫曼树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 哈夫曼树的构造

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如何选取2个最小的?

  • 排序

在这里插入图片描述
一共循环N次,每次不超过logN
在这里插入图片描述
在这里插入图片描述

2.3 哈夫曼编码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代价最小且无二义性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 集合及运算

3.1 集合的表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 集合运算

在这里插入图片描述
在这里插入图片描述
示例:找2,5
在这里插入图片描述
在这里插入图片描述
不断地union,会使树越来越高,find效率逐渐降低,所以有以下方案:(但是需要知道树中节点的个数)
在这里插入图片描述
既然根节点的Parent不需要特别强调,那么就可以把它改成树的节点个数
在这里插入图片描述
在这里插入图片描述
b挂a上
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值