我有一组对象,它们存储由低值和高值给定的间隔。我正在搜索数据结构,这将使我能够实时获取间隔与给定点重叠的所有对象。我还需要能够尽快添加和删除单个对象。基于红黑树的Interval trees具有O(log n)插入和删除时间以及O(n)空间。但是查找所有重叠的查询需要O(k log n)时间,如果重叠间隔很多,这可能比蛮力搜索更糟。有更好的方法吗?
为此工作制作了间隔树。找到与一个点重叠的所有间隔需要O(k + log n)时间,而不是O(k log n)。
这是您的维基百科链接中提到的“居中间隔树”。基于红黑树来实现其中之一是合理的:
但是...因为您似乎已经使用RB树完成了[[not,并且RB树很复杂,所以我建议使用挖角执行相同的操作:https://en.wikipedia.org/wiki/Treap
陷阱比RB树要容易得多,因为它们从一开始就更简单,并且不需要旋转就可以使它们保持平衡,这使得维护中心点重叠间隔的列表变得容易得多。这些间隔也可以存储在挖方中。容易得多...但仍然不那么容易:-)