我希望确定递归算法的平均处理时间T(n):
int myTest( int n ) {
if ( n <= 0 ) {
return 0;
}
else {
int i = random( n - 1 );
return myTest( i ) + myTest( n - 1 - i );
}
}
假设算法random(int n)花费一个时间单位来返回在[0,n]范围内均匀分布的随机整数值,而所有其他指令花费极小的时间(例如T(0)=0)。
这显然不是简单形式的T(n) = a * T(n/b) + c,所以我不知道如何编写它。由于每次从0到n-1范围内取一个随机数并将其两次提供给函数并要求这两个调用的求和,因此我无法弄清楚如何编写它。
T(0)
是存在的。但是当你从步骤1转到步骤2时,你假设对于i>0
,T(i)
的值也存在。我们如何证明这一点?因为如果它是无限的,那么证明的以下步骤就没有依据了。 - fjardonmyTest(n)
调用myTest(i)
,那么 0 <=i
<n
。 - Paul Hankin