我对解决这种递归关系非常怀疑。任何人都可以为我提供解决方案吗?
关系:
T(n)= Sumation i = 1到N T(i)+1 ......,
bigOh订单是什么?
答案 0 :(得分:2)
获取第一顺序差异可以让你摆脱总和。
T(n) - T(n-1) = (Sum(1<=i<n: T(i)) + 1) - (Sum(1<=i<n-1: T(i)) + 1) = T(n-1)
因此
T(n) = 2.T(n-1)
答案 1 :(得分:0)
递归关系描述了一个数字序列。明确指定了早期术语,后来的术语则表示为其前身的功能。作为一个简单的例子,此重复描述了序列1、2、3等:
void Sample(int n)
{
if (n > 0) {
Sample(n-1);
System.out.println('here');
} else {
return 1;
}
}
Sample(3);
在这里,第一个术语定义为1,而每个后续术语都比其前任多一个。为了分析递归关系,我们需要知道每行代码的执行时间,在上面的示例中:
void Sample(int n)
{
if (n > 0) {
// T(n-1) Sample(n-1);
// 1 System.out.println('here');
} else {
return 1;
}
}
我们将T(n)定义为:
对于求解T(n)= T(n-1)+1
,如果我们知道T(n-1)
是什么,那么我们可以用它代替并得到答案,然后用n
代替它,我们将得到:
T(n-1)= T(n-1-1)+1 => T(n-2)+1
//in continue
T(n)=[T(n-2)+1]+1 => T(n-2)+2
//and again
T(n)=[T(n-3)+2]+1 => T(n-3)+3
.
.
.
// if repeat it k times, while it ends
T(n)= T(n-k)+k
您看到它在每一步中都增加了1,如果我们进行k
次,则T(n)= T(n-k)+k
。现在,我们需要知道最小值(函数停止时,始终必须是停止点)。在此问题中,零是递归堆栈的结尾。正弦,我们假设我们走k
次达到零,解决方案将是:
// if n-k is final step
n-k = 0 => n = k
// replace k with n
T(n)= T(n-n)+n => T(n)= T(0)+n;
// we know
T(0) = 1;
T(n) = 1+n => O(n)
大的O
是n
,这意味着这种递归算法在最坏的情况下运行了n
次。