计算内存约束下的重叠间隔数?

时间:2010-11-06 08:46:16

标签: algorithm data-structures

我需要以元组(x,y)和回答查询的形式维护一个间隔列表,这些查询要求与点p重叠的间隔总数。 如果没有内存约束,我认为有效的解决方案是使用一个需要O(nlogn)空间的分段树,方法是在每个节点中存储附加信息并使用延迟更新技术。

我尝试使用间隔树来完成它,但查询的运行时间取决于报告的间隔数。

我们可以在内存限制下做些比这更好的事情吗?

1 个答案:

答案 0 :(得分:1)

更好的解决方案是Fenwick Trees(也称为二进制索引树),它具有以下限制:您可以更新范围并查询点或更新点并查询范围。由于您更新范围并查询点,因此Fenwick Tree是一个很好的解决方案。

它们具有O(log N)查找并使用O(N)空间,其中N是x和y的范围。此外,更新也是O(日志N)。

最重要的是它们对代码来说是微不足道的。比Segment Trees更加微不足道。

这是一个很棒的教程:TopCoder - Binary Index Trees