标签: iterator heap binary-heap
我正在寻找一种在二进制堆(最大或最小)上实现迭代器的方法。
也就是说,通过第i次使用其nextNode()函数,可以获得堆中第i个(更大或更小的)元素。
请注意,此操作不会真正提取堆的根!
我最初的想法是:
我了解这些方法消除了使用堆的好处,因此我正在寻找一种更好的方法。
非常感谢。
答案 0 :(得分:0)
目前尚不清楚用例是什么,因此很难说什么使解决方案可行或比其他解决方案更好。
也就是说,我建议对已经提出的一般“提取和排序”构想进行一些改动:如果我们可以很好地更改数据结构,则可以就地进行排序。
在Wikipedia上建议的基本实现是引擎盖下的部分排序列表。我们可以(希望)一次性支付一次 O ( n log( n ))费用,以便在第一次{{ 1}}被调用,之后next()是 O (1)。至关重要的是,完全排序的列表仍然是有效的堆。
next()
此外,如果您考虑使用heapsort算法,则可以从第二阶段开始,因为您正在使用有效堆开始。