排序和选择几乎排序的数组

时间:2017-07-28 07:43:30

标签: arrays algorithm sorting time-complexity

给定一个长度 n 的数组,其中每个项目与排序数组中的最终位置之间的距离最多为 log(n),如何有效排序它,我如何找到第k个值项(select-k)?

这是我的开始:

对于排序,使用比较模型我可以得到大约 O((logn)^ n)可能的排列,因此比较树的最大深度应该 O(nloglogn)即可。此外,对于选择问题,我有一个直觉,如果我查看第k 项的每一侧 logn 的范围( 2logn - 1 ),我可以在 O(logn)中使用确定性选择算法,但我不确定如何证明此方法的正确性。

请注意,我寻找代码(使用任何语言),而是抽象算法的草图及其时间复杂度。

感谢。

1 个答案:

答案 0 :(得分:1)

使用长度为

的minHeap
x=log(n)

从开始开始并将元素推送到Heap,因此在x插入后,您将找到最小的元素,然后继续扫描其他元素。

复杂性 -

O(n(log(x))) = x*log(x)(for heap operations for first x elements) + (n-x)(log (x))(for remaining elements)
x=log(n);

您可以通过跟踪已排序的元素数量来确定排序方式的第k个值......