文章目录
0 引言
在上一篇博客线段树介绍中提到,线段树有两个缺陷:
- 不支持区间插入、删除
- 所解决的问题需要能够划分成子问题来处理
那么要判断内存管理能不能使用线段树来实现,就要优先看一下能不能解决这两个缺陷。
1 内存管理可不可以用线段树来实现
首先,内存管理是指,获取到一段连续可用的内存之后,对这段内存进行内存分配、内存释放等操作进行管理控制。即意味着,内存管理是在一段固定区间的内存中进行操作,那么就不存在线段树缺陷1的问题。
其次,内存分配实际上就是区间查询出满足大小要求的内存块,并进行区间更新,将内存块更新为已占用。内存释放实际上就是进行区间更新操作,将内存块更新为未使用。这么一想,是不是很符合线段树的使用场景呢嘿嘿嘿。
越看越有戏,那么我们再确认一下能不能解决缺陷2,即能否把内存分配、内存释放拆分成子问题来处理。
先看内存释放(因为逻辑比较简单),就是把一个连续区间的状态更新为未使用,那么可以很明显地看出:
更新父区间的字段状态 => 更新左子区间的字段状态 + 更新右子区间的字段状态
那么很显然ÿ