具体来说,我希望对于find_next_higher_element的O(log n)插入/删除时间和O(1)操作,给定数据结构中的元素返回的元素在常量时间内大于它。我不知道这是否可能,但我的直觉告诉我它是。
答案 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的计算机编程艺术中,对于维护树有效迭代进行了长时间的讨论。