无序列表中的Kth元素,使用k阶统计量 - 时间复杂度O(n)?

时间:2011-04-02 06:17:25

标签: algorithm

有人可以告诉我,随机选择算法如何给出O(n)的平均时间复杂度?如果随机选择的枢轴(在第一次传递期间)是列表中的第k个元素,我会看到它将具有最佳情况O(n)。但这怎么可能是平均情况呢?我们不能保证每次运行算法时我们都会在第一次传递中找到正确的算法rt?

2 个答案:

答案 0 :(得分:4)

选择随机位置并对当前范围进行分区后,我们知道第k个元素是在左侧还是在右侧。然后我们在一边追求算法。因此,我们的平均复杂度为T(n)= n + T(n / 2),(n为分区)。因此我们平均有O(n)

答案 1 :(得分:3)

在第一遍之后你知道第k个元素将在哪个“一半”。现在你在那个“一半”等处重复这个过程。

因此,在第一次迭代的平均情况下,您执行n个步骤,在第二个n / 2步骤中,然后是n / 4步骤,依此类推。作为包络计算的后面,假设n = 2 ** k。步骤总数为

2**k + 2**k/2 + 2**k/4 + ... = 2**k + 2**(k-1) + 2**(k-2) + ... + 2 + 1 
                             = 2**(k+1) - 1 
                             = 2n - 1

因此,算法是O(2n - 1)= O(n)。