线段树

线段树

查找树是用来查询数据本身是否存放的结构,线段树就是用来查询数据的聚合结果的结构。

概述

线段树的非叶子节点都是区间,而叶子节点是原始数据本身。非叶子节点中经常存放着叶子节点的聚合数据,例如最大值,最小值,数量值等等。

由于线段树的区间只跟数据的数值范围有关,不跟数据有关。所以线段树的高度最大为log(数值范围)。

例如存放int值的线段树,高度最大为log(INT_MAX)

作用

包含查找树的所有功能

  1. 快速查找元素是否存在,log(n)
  2. 快速查找树中的最大值或最小值,log(n)
  3. 快速计算树中的聚合操作,像max,min,count,sum,中位数等等。log(n)
  4. 快速批量设置区间的数值,并维护上述性质不变。log(n)

优化

一般的线段树是静态的,就是数据量是固定的,只能修改数据,不能增删数据,这时的线段树是数组实现的。

  1. 动态线段树,链式实现,支持增删数据,并保持功能不变。
  2. 多维线段数,实现多维空间的查找操作。
  3. ZKW线段树,线段树的数组实现,在数组上建立满二叉树的方法,在保持时间复杂度不变的情况下,降低了运行常数。
  4. 树状数组,特殊的线段树,专门用来计算区间的sum,max,min值等等,不能中间删除数据,只能增加或减少数据。
  5. 单调队列,特殊的线段树,专门用来计算区间的max和min值,不能修改数据,只能前删或后删数据,增加数据,区间只能是大于或少于某个数值。经常用来查询“少于N的max(k)”的问题,常用于DP优化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值