什么是支持快速next-higher-element和next-lower-element的数据结构?

时间:2011-02-13 09:17:53

标签: algorithm language-agnostic data-structures puzzle time-complexity

具体来说,我希望对于find_next_higher_element的O(log n)插入/删除时间和O(1)操作,给定数据结构中的元素返回的元素在常量时间内大于它。我不知道这是否可能,但我的直觉告诉我它是。

4 个答案:

答案 0 :(得分:2)

任何threaded tree都可以。

Finger trees也可以适应很好地处理迭代。

答案 1 :(得分:1)

B+Tree结构允许O(1)next / previous操作,因为所有元素都在叶页的链表中。

答案 2 :(得分:1)

我认为几乎所有的树结构都可以通过这样的方式进行修改。

你“只是”必须在存储实际元素的树“下面”添加一个双向链表。树中的元素仅用于导航问题。请注意,添加此双向链接列表会增加插入和删除元素时要完成的工作量。渐近运行时不会改变(至少在大多数情况下)。

答案 3 :(得分:0)

红黑树允许您在O(log n)时间插入和删除,但下一个更高/更低可能需要O(log n)。

您可以通过将树的节点放在双向链表中来解决这个问题。在插入或删除时,您可以找到下一个更高/更低的节点并修复链接指针。

在Knuth的计算机编程艺术中,对于维护树有效迭代进行了长时间的讨论。