段树、区间树、二叉索引树和范围树在以下方面有什么区别:
- 关键思想/定义
- 应用
- 更高维度的性能/订单/空间消耗
请不要只给出定义。
段树、区间树、二叉索引树和范围树在以下方面有什么区别:
请不要只给出定义。
所有这些数据结构都用于解决不同的问题:
一维的性能/空间消耗:
(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))时间操作