在 O(n) 中查找并排序 n 值数组中的 log2(n) 最小值和 log2(n) 最大值

Find and sort in O(n) the log2(n) smallest values and the log2(n) largest values in an array of n values

设 A 为 n 个不同数字(正数和负数)的数组。

我们对 ⌊log_2(n)⌋ 最小值感兴趣,

并且在 ⌊log_2(n)⌋ 个最大值中。

查找计算此 2⌊log_2(n)⌋ 值的算法,

并将它们呈现在排序数组中 (size = 2⌊log_2(n)⌋)

1. the running time of the algorithm must be θ(n),
2. prove that the running time is θ(n).

我想也许堆排序会有用,但我真的不确定。

我不需要代码只是想法...我将不胜感激任何帮助

谢谢 :) 如果我有英文错误请见谅 :(

我的一般方法是创建 2 个堆数据结构,一个用于最大值,一个用于最小值,并在它们中堆化数组 for/in。如果处理得当,堆化是线性时间复杂度的操作。

然后我将从两个堆中提取 ⌊log_2(n)⌋ 项,其中每次提取都具有复杂性 O(log n)。因此,这将为我们提供以下粗略的计算估计:

2 * n + 2 * (log(n))^2

2 * n 两次堆肥操作。 log(n) * log(n) 用于从其中一个堆中提取 log(n) 元素。 2 * (log(n))^2 用于从两个堆中提取 log(n) 个元素。

在大 O 术语中,支配项是 n,因为 log(n) 即使是 2 的幂也逐渐变小。所以上面的整个表达式呈现出一个甜蜜的 O(n).