分段树,间隔树,二进制索引树和范围树之间的区别在于:
请不要只给出定义。
答案 0 :(得分:275)
所有这些数据结构都用于解决不同的问题:
一个维度的性能/空间消耗:
(k是报告结果的数量)。
所有数据结构都可以是动态的,因为使用场景包括数据更改和查询:
更高的尺寸(d> 1):
答案 1 :(得分:20)
并非我可以向Lior's answer添加任何内容,但似乎可以使用好的表格。
k
是报告结果的数量
| | Segment | Interval | Range | Indexed |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing | n logn | n logn | n logn | n logn |
|Query | k+logn | k+logn | k+logn | logn |
|Space | n logn | n | n | n |
| | | | | |
|Insert/Delete | logn | logn | logn | logn |
d > 1
| | Segment | Interval | Range | Indexed |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing | n(logn)^d | n logn | n(logn)^d | n(logn)^d |
|Query | k+(logn)^d | k+(logn)^d | k+(logn)^d | (logn)^d |
|Space | n(logn)^(d-1) | n logn | n(logn)^(d-1)) | n(logn)^d |
这些表是在Github格式化Markdown中创建的 - 如果您想要图像,请参阅Gist。
答案 2 :(得分:0)
可以改进段树和二叉索引树的预处理边界和空间:
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))
时间内作为操作追加到 end