我正在尝试实现一种算法,在O(1)时间内找到具有n个不同元素的Max-Heap的第10个最大元素。
我试图绘制它并使用堆属性,但随着我在堆中更深入,它变得越来越复杂。这是我制作的草案,我被困在哪里 - 由于我们有不同的元素和堆属性,我们知道父元素总是大于它的子元素。因此根是最大元素。下一个最大元素是根的儿子之间的更大元素。
编辑:我还想过将较大的儿子与另一个父母的儿子进行比较。如果它们中的至少一个大于另一个父类,则通过堆属性我们从最大的儿子继续并继续这样做直到我们有10个元素,但它并不总是正确的,因为可能没有元素,因为我们更深入,现在我们需要重新回头。
任何解释甚至伪代码都会受到很多关注。
提前致谢!
答案 0 :(得分:1)
一种可能的解决方案,很可能不是禁食,但仍然是O(1)将提取堆的所有顶部元素(视为树)降低到10级。然后对它们进行排序并返回第十元件。
请注意,提取的元素数量是有界的,这导致了O(1)的努力。