Algorithm 找到第i个最大元素

Algorithm 找到第i个最大元素,algorithm,divide-and-conquer,recurrence,Algorithm,Divide And Conquer,Recurrence,我想用分治法计算一行整数的第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); } 是这样吗?如果是这样的话,我们怎么能发现它的时间复杂性呢 时间复杂度由以下递推关系描述: Tn=Tn-q+Tq-

我想用分治法计算一行整数的第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);
}
是这样吗?如果是这样的话,我们怎么能发现它的时间复杂性呢

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

Tn=Tn-q+Tq-1+n

但是,在不知道q值的情况下,我们如何解决这个递推关系呢


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

这是算法的一种变体,它可以查找第i个最小元素,而不是第i个最大元素。它的运行时间在最坏情况下为开^2,在平均情况下为开

要查看最坏的情况,假设您正在搜索第n个最大元素,并且算法总是选择q作为剩余范围内的最大元素。因此,您将调用第i个函数n次。此外,分区子例程将启动,因此总运行时间为^2


要理解一般案例分析,请查看Tim Rawgarden教授给出的解释。

时间复杂性是什么意思?一般情况下,最坏情况下,还有其他情况吗?然后确定正确的递推关系。无论你对什么版本的时间复杂性感兴趣,你对递归关系的理解目前都是错误的。