Algorithm 简化T(n)运行时

Algorithm 简化T(n)运行时,algorithm,runtime,analysis,Algorithm,Runtime,Analysis,给定以下函数 int g(int y) { if (y <= 0) { return 1; } else { return g(y-1) + g(y-2) + g(y-3); } } 我只是不确定你是否可以进一步简化它,比如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)应该是c1x1n+c2x2n+c3x3n-1/2,其中xi是方程的根x3-x2-x-1=0,ci是特定系数

给定以下函数

int g(int y) {
  if (y <= 0) {
    return 1;
  } 
  else {
    return g(y-1) + g(y-2) + g(y-3);
  }
}
我只是不确定你是否可以进一步简化它,比如
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)应该是c1x1n+c2x2n+c3x3n-1/2,其中xi是方程的根x3-x2-x-1=0ci是特定系数

T(n)的精确解有点复杂。实际上,x1=1.84,x2,x3=-0.42±0.61i(是的,它们不是实数)

然而,如果T(n)可以简化为类似T(n)=3T(n-1)+1的形式,那么T(n)必须类似于c1xn+c0。因此,您不能进一步简化它。

您的函数不可用

T(n) = T(n-1) + T(n-2) + T(n-3) + 1
是的

要进行检查,请使用以下“y”运行原始函数

g(0) = 1
g(1) = 3
g(2) = 5

g(3) = 9 (i.e. = g(0) + g(1) + g(2) = 9, not g(1) + g(2) + g(3) + 1 = 10)
使用动态规划避免重新计算已计算的T(n)s

intg(inty)
{

如果(y阶,或精确?阶数分析很容易;精确分析涉及Tribonaci序列。嗯,我们能把它写成线性系统的矩阵方程吗?是的,你能。事实上,这就是解决大多数线性递归的方法。精确解是通过对所得递归矩阵进行对角化来给出的。@NickNicolini:“仅仅找到T(n)运行时间”…O(n)比T(n)更容易找到,而不是更难!是的,T(n)意味着精确的运行时间,O(n)将找到T(n)的顺序(这更容易)。
if n > 2
    T(n) = T(n-1) + T(n-2) + T(n-3)
or 
    T(n) = 1, 3, 5 for n = 0, 1, 2 respectively.
g(0) = 1
g(1) = 3
g(2) = 5

g(3) = 9 (i.e. = g(0) + g(1) + g(2) = 9, not g(1) + g(2) + g(3) + 1 = 10)
int g(int y)
{
    if(y <= 0)
        return 1;

    if(y ==  1)
        return 3;

    if(y == 2)
        return 5;

    int a1 = 1; int a2 = 3; int a3 = 5;
    int ret = 1;

    for(int i = 2; i < y; ++i)
    {
        ret = a1 + a2 + a3;
        a1 = a2;
        a2 = a3;
        a3 = ret;
    }

    return ret;
}