当前位置: 首页 > news >正文

如何证明线段树的操作复杂度

如何证明线段树操作的时间复杂度 ?

以区间询问为例,假设当前节点代表的区间是 [l, r],需要定位的区间是 [L, R] 。

  • 如果定位区间包含当前节点代表的区间,将节点信息归入答案,终止递归 ;

  • 如果两个区间不相交,终止递归 ;

  • 剩下的就是相交的情况,递归搜索左右儿子 。

考虑第三种情况的发生次数,线段树的每一层按照左端点排序,显然是互不相交的区间。对于 [L, R] 来说,它与一系列节点相交,显然只有左右两端的节点发生第三种情况。

也就是说,每一层最多 O ( 1 ) O(1) O(1) 种第三种情况,而线段树的高度是 O ( log ⁡ n ) O(\log n) O(logn) 的,显然第三种操作的时间复杂度就是 O ( log ⁡ n ) O(\log n) O(logn) 的。

又因为每一层,只有第三种情况会继续递归,而一个节点只有两个儿子,所以一般来说情况一、二的总发生次数不会超过情况三的两倍。

综上,基本操作的时间复杂度是 O ( log ⁡ n ) O(\log n) O(logn) 的。

(参考自国家集训队 2016 论文集)


http://www.mrgr.cn/news/44578.html

相关文章:

  • 没有屋檐的房子-017
  • 什么是pip? -- Python 包管理工具
  • 高数面积公式推导过程
  • Cocos_鼠标滚轮放缩地图
  • 深入了解卡尔曼滤波:最优状态估计的数学神器
  • 2.1MyBatis——ORM对象关系映射
  • 整数划分问题
  • 智能工厂的软件设计 【三ji】公共逻辑语言映射到祖传代码( 元级)中为“Program”规划了三层置标架构,即“Program”的标准通用置标语言
  • 面试系列-淘天提前批面试
  • javaScript操作元素(9个案例+代码+效果)
  • Java实体对象转换利器MapStruct详解
  • Maven 入门详解
  • linux 重置root密码
  • 【英语】考研英语语法体系
  • 【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述
  • LSTM模型实现电力数据预测
  • 微信小程序开发问题记录
  • 复现文章:R语言复现文章画图
  • 数据仓库拉链表
  • 【PostgreSQL】PG数据库表“膨胀”粗浅学习