段树、区间树、二叉索引树和范围树在以下几个方面有何不同:
- 关键思想/定义
- 应用场景
- 性能/高维度顺序/空间消耗
请勿仅提供定义。
段树、区间树、二叉索引树和范围树在以下几个方面有何不同:
请勿仅提供定义。
高维空间(d>1):
虽然我没有比Lior的回答更多的补充,但它似乎需要一个好的表格。
k
是报告结果的数量
操作 | 区间(Segment) | 区间长度(Interval) | 范围(Range) | 索引(Indexed) |
---|---|---|---|---|
预处理 | n logn | n logn | n logn | n logn |
查询 | k+logn | k+logn | k+logn | logn |
空间 | n logn | n | n | n |
插入/删除 | logn | logn | logn | logn |
d > 1
操作 | 区间(Segment) | 区间长度(Interval) | 范围 | 索引 |
---|---|---|---|---|
预处理 | n(logn)^d | n logn | n(logn)^d | n(logn)^d |
查询 | k+(logn)^d | k+(logn)^d | k+(logn)^d | (logn)^d |
空间 | n(logn)^(d-1) | n logn | n(logn)^(d-1)) | n(logn)^d |
O(n logn)
的空间吗? - Danny_ds预处理的边界和段树、树状数组的空间可以得到改进:
2n=O(n)
的时间内存储在2n
的空间中并随后构建: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))
的时间内将元素附加到末尾