Recursion 将递归转换为动态&;计算其时间复杂度
我正在解一个代码,我的递归函数是这样的->Recursion 将递归转换为动态&;计算其时间复杂度,recursion,time-complexity,dynamic-programming,recurrence,Recursion,Time Complexity,Dynamic Programming,Recurrence,我正在解一个代码,我的递归函数是这样的-> int rec(n) { if(n>=(n/2+n/3+n/4)) { return n; } else { return rec(n/2) + rec(n/3) + rec(n/4); } } 我想知道这个函数的时间复杂度是多少 我想这个循环关系应该是- T(n) = T(n/2) + T(n/3) + T(n/4) + f(n) 如何解决这种递推关系?在这种情况下,f(n)的值
int rec(n)
{
if(n>=(n/2+n/3+n/4))
{
return n;
}
else
{
return rec(n/2) + rec(n/3) + rec(n/4);
}
}
我想知道这个函数的时间复杂度是多少
我想这个循环关系应该是-
T(n) = T(n/2) + T(n/3) + T(n/4) + f(n)
如何解决这种递推关系?在这种情况下,f(n)的值是多少
还有,如何将其转换为动态规划
我编写的将其转换为动态的代码是-
long long rec(long long n)
{
long long c[n]; // The number range is between 1 to 10^9
for(int i=0;i<n;i++)
c[n]=0;
if(n>=(n/2+n/3+n/4))
{
c[n]=n;
return n;
}
else
{
if (c[n]==0)
c[n]=c[n/2]+c[n/3]+c[n/4];
return c[n];
}
}
long-long-rec(长n)
{
long long c[n];//数字范围在1到10^9之间
对于(int i=0;i=(n/2+n/3+n/4))
{
c[n]=n;
返回n;
}
其他的
{
如果(c[n]==0)
c[n]=c[n/2]+c[n/3]+c[n/4];
返回c[n];
}
}
然而,在将递归转换为动态之后,我的程序拒绝显示正确的答案。我想我还没有把它正确地转换成动态规划。你能告诉我怎么做吗
感谢if(n>=(n/2+n/3+n/4))基本上等同于if(n经验法则:
O(n^(a/b))
,即polinomial。这两个函数都不一致地使用缩进,而且由于缩进不一致,很容易误读。我拒绝阅读这样一个碍眼的东西。请骄傲一点,修复您的缩进。希望其他人会跟随我。您的第二段代码没有编译,并且由于缺失而存在明显错误请给我们您运行的实际代码,以便我们能够提供有意义的反馈。好的,对发布的问题进行必要的更改。
T(0) = 1
T(n) = T(n/2) + T(n/3) + T(n/4)
T(n) <= cnlog2n
T(n) <= cn/2*logn/2 + cn/3*logn/3 + cn/4*logn/4
= cn/2*logn - cn/2*log2 + cn/3*logn - cn/3*log3 + cn/4*logn - cn/4*log4
= cn/2*logn - cn/2 + cn/3*logn - cn/3*log3 + cn/4*logn - cn/2
= 13/12*cn*logn - cn(log3/3 - 1)
if T(n) = O(n^2) then T(n) <= cn^2
T(n) <= c(n/2)^2 + c(n/3)^2 + c(n/4)^2
= cn^2/4 + cn^2/9 + cn^2/16
= 15cn^2/36 <= cn^2