找到第i个最伟大的元素

时间:2015-03-29 02:18:31

标签: algorithm divide-and-conquer recurrence

我想使用Divide-and-Conquer程序计算一行整数中的第i个最大元素,并分析算法的渐近时间复杂度。

Algorithm ith(A,low,high){
   q=partition(A,low,high);
   if (high-i+1==q) return A[q];
   else if (high-i+1<q) ith(A,low,q-1);
   else ith(A,q+1,high);
}

是不是?如果是这样,我们怎么能找到它的时间复杂度?

时间复杂度由以下递归关系描述:

T(N)= T(N-Q)+ T(Q-1)+Θ(n)的

但是如何在不知道q的值的情况下解决这种递归关系呢?

或者是否有一个时间复杂度较低的算法来计算一行整数的第i个最大元素?

1 个答案:

答案 0 :(得分:0)

这是quick select算法的变体(找到i-th最小元素而不是i-th最大元素)。在最坏的情况下,它的运行时间为O(n^2),在平均情况下为O(n)

要查看最坏的情况,假设您正在搜索nth最大元素,并且算法总是选择q作为剩余范围中的最大元素。所以你将调用ith函数n次。此外,分区子例程需要O(n),因此总运行时间为O(n^2)

要了解平均案例分析,请查看Tim Roughgarden教授here给出的解释。