Algorithm 找到第i个最大元素
我想用分治法计算一行整数的第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-
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教授给出的解释。时间复杂性是什么意思?一般情况下,最坏情况下,还有其他情况吗?然后确定正确的递推关系。无论你对什么版本的时间复杂性感兴趣,你对递归关系的理解目前都是错误的。