给定以下函数
int g(int y) {
if (y <= 0) {
return 1;
}
else {
return g(y-1) + g(y-2) + g(y-3);
}
}
我们需要找到T(n)
运行时间。现在,我知道你可以写
T(n) = T(n-1) + T(n-2) + T(n-3) + 1
我只是不确定您是否可以进一步简化它,例如 T(n) = 3T(n-1) + 1
?
最佳答案
设S(n) = T(n) + 1/2,则S(n) = S(n-1) + S(n-2) + S( n-3).
那么T(n)应该是c1 x1n + c2 x2n + c3 x3n - 1/2,其中 xi 是方程 x3 - x2的根sup> - x - 1 = 0 和 ci 是特定系数。
T(n) 的精确解有点复杂。实际上 x1 = 1.84, x2,x3 = -0.42 ± 0.61i(是的,它们是不是实数)。
但是,如果 T(n) 可以简化为 T(n) = 3T(n-1) + 1,则 T( n) 必须类似于 c1 xn + c0。因此,您无法进一步简化它。
关于algorithm - 简化 T(n) 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879795/