使用 max heapify 在数组中查找第 k 个最小元素的时间复杂度

Posted

技术标签:

【中文标题】使用 max heapify 在数组中查找第 k 个最小元素的时间复杂度【英文标题】:Time complexity for finding k-th minimum element in array using max heapify 【发布时间】:2022-01-23 21:26:23 【问题描述】:

我已经给出了一个数组(注意:它是不是堆排序的)并且我想使用 max heapify 方法找到第 k 个最小元素的时间复杂度? 最初是堆排序的数组有很多可用的解决方案吗? 但在这种情况下它只是一个数组

【问题讨论】:

你能证明自己任何努力解决这个问题吗? 【参考方案1】:

堆化前 ? 值的时间复杂度为 O(?)。

要潜在地将所有剩余值与该堆中的顶部值交换(并恢复堆属性),时间复杂度为 O((?-?)log?)。

读取该堆的顶部值(即答案)的时间复杂度为 O(1)。

结合起来,我们得到 O(? + (?-?)log?)

【讨论】:

以上是关于使用 max heapify 在数组中查找第 k 个最小元素的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章

堆和二叉搜索树

Max-Heapify 中最坏的情况——你如何得到 2n/3?

MAX-HEAPIFY 中的最坏情况:“最坏情况发生在树的底层正好是半满时”

Max-Heapify中最糟糕的情况 - 为什么你得到2n / 3?

2013 查找数组主元素

数组-折半查找