【发布时间】:2019-09-29 08:48:49
【问题描述】:
我正在寻找一种在二进制堆(最大或最小)上实现迭代器的方法。
也就是说,通过第i次使用它的nextNode()函数,可以得到堆中第i个(更大或更小的)元素。
请注意,此操作在没有实际提取堆的根的情况下发生!
我最初的想法是:
- 其实是抽取i个元素,压入栈,得到第i个值后再插入回堆中。每个函数调用都需要 O(i*log(n))。
- 保留一个辅助的排序数据结构,它可以允许在 O(1) 中查找下一个值,但更新需要 O(n)。
我了解这些方法会消除使用堆的好处,因此我正在寻找更好的方法。
【问题讨论】:
-
我认为这与stackoverflow.com/questions/7650917/… 是同一个问题——您不必花费 O(i) 对已排序的辅助结构进行操作。
-
你需要迭代器在堆变化时保持有效吗?
-
@Jeff 不,不一定。
标签: iterator heap binary-heap