如果我们有一个功能: -
cross-entropy
据我所知,时间复杂度可以计算为: -
int x=0;
int fun(int n)
{
if(n==0)
return 1;
for(int i=0; i<n;i++)
x += fun(i);
}
我说错了吗?
答案 0 :(得分:1)
如果您正在测量函数调用的数量(或添加 - 结果相同),则正确的重复关系为:
T(0) = 0
T(n) = T(0) + T(1) + T(2) + ... + T(n-1) + n
您可以计算前几个值:
T(0) = 0
T(1) = 1
T(2) = 3
T(3) = 7
T(4) = 15
你可以从中猜出T(n)= 2 ^ n - 1,并且通过归纳证明很容易检查。
从某种意义上说,你知道T(n)= O(n!),因为n! &GT; 2 ^ n表示n> 3,但T(n)= O(2 ^ n)是一个更严格的界限。
答案 1 :(得分:0)
1. T(n) = T(n-1) + T(n-2) + T(n-3) + .... + T(0)
// Replace n with n-1
2. T(n-1) = T(n-2) + T(n-3) + .... + T(0)
在第一个方程式中将T(n-2) + T(n-3) + .... + T(0)
替换为T(n-1)
T(n) = T(n-1) + T(n-1)
= 2 * T(n-1)
= 2 * 2 * T(n-2) // Using T(n-1) = 2 * T(n-2)
= 2^n * T(n-n)
= 2^n * T(0) // Consider T(0) = 1
= 2^n