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

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

以区间询问为例,假设当前节点代表的区间是 [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 论文集)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值