0

我正在尝试实现一种算法,以在 O(1) 时间内找到具有 n 个不同元素的 Max-Heap 的第 10 个最大元素。

我试图绘制它并使用堆属性,但随着我深入堆,它变得越来越复杂。这是我制作的草稿,也是我坚持的地方——从我们有不同的元素和堆属性的事实来看,我们知道父级总是大于其子级。因此,根是最大元素。下一个最大元素是根的儿子之间的较大元素。

编辑:我还考虑过将较大的儿子与另一位父母的儿子进行比较。如果其中至少一个大于另一个父级,则通过堆属性,我们从最大的儿子继续并继续这样做直到我们有 10 个元素,但这并不总是正确的,因为随着我们深入,可能没有元素,现在我们需要从头再来。

任何解释甚至伪代码都会非常受欢迎。

提前致谢!

4

1 回答 1

1

一种可能的解决方案,很可能不是禁食,但仍然 O(1) 将提取堆的所有顶部元素(被视为一棵树)下降到 10 级。然后对它们进行排序并返回第十个元素。

请注意,提取元素的数量是有界的,这导致了 O(1) 的工作量。

于 2017-05-14T08:54:56.433 回答