段树、区间树、二叉索引树和范围树在以下方面有什么区别:
- 关键思想/定义
- 应用
- 更高维度的性能/订单/空间消耗
请不要只给出定义。
段树、区间树、二叉索引树和范围树在以下方面有什么区别:
请不要只给出定义。
所有这些数据结构都用于解决不同的问题:
一维的性能/空间消耗:
(k 是报告结果的数量)。
所有数据结构都可以是动态的,因为使用场景包括数据更改和查询:
更高维度(d>1):
并不是说我可以在Lior 的回答中添加任何内容,但似乎可以用一张好桌子来做。
k
是报告结果的数量
手术 | 分割 | 间隔 | 范围 | 索引 |
---|---|---|---|---|
预处理 | 登录 | 登录 | 登录 | 登录 |
询问 | k+logn | k+logn | k+logn | 登录 |
空间 | 登录 | n | n | n |
插入/删除 | 登录 | 登录 | 登录 | 登录 |
d > 1
手术 | 分割 | 间隔 | 范围 | 索引 |
---|---|---|---|---|
预处理 | n(logn)^d | 登录 | n(logn)^d | n(logn)^d |
询问 | k+(logn)^d | k+(logn)^d | k+(logn)^d | (登录)^d |
空间 | n(logn)^(d-1) | 登录 | n(logn)^(d-1)) | n(logn)^d |
可以改进段树和二叉索引树的预处理和空间界限:
2n
空间中,然后2n = O(n)
使用动态编程构建,如果您放弃在任意点添加间隔:https ://cp-algorithms.com/data_structures/segment_tree.html#toc-tgt-6n
,请参阅此答案:Is it possible to build a Fenwick tree in O(n)?O(log(n))
时间操作