如何确定给定递归函数的 运行 时间 T(n)?
How to determine the running time T(n) for a given recursive function?
如何确定下一个函数的T(n)的递推公式?
if(N == 0)
return 1;
s = 0;
x = function(N/3);
for(i = 1; i <= N; i++){
s += x;
}
return s;
您可以确定递归调用 x = function(N/3)
,其复杂度为 T(n/3)
。以下是 N
加法,因此要考虑 N
操作。
因此这个函数复杂度的递推关系是
T(n) = T(n/3) + n
因此
T(n) = O(n.log3(n))
您可以使用大师定理:
T(n) = a*T(n/b) + C * n^k(a,b,C > 0,k 在 N 中)。
情况 1:a < b^k --> T(n) 在 Θ (n^k)
情况 2:a = b^k --> T(n) 在 Θ (n^k * log (n))
情况 3:a > b^k --> T(n) 在 Θ (n^logb a)
在你的情况下 T(n) = 1 * T(n/3) + С * n^1.
a = 1, b = 3, k = 1 --> T(n) 在 Θ (n) 中。
如何确定下一个函数的T(n)的递推公式?
if(N == 0)
return 1;
s = 0;
x = function(N/3);
for(i = 1; i <= N; i++){
s += x;
}
return s;
您可以确定递归调用 x = function(N/3)
,其复杂度为 T(n/3)
。以下是 N
加法,因此要考虑 N
操作。
因此这个函数复杂度的递推关系是
T(n) = T(n/3) + n
因此
T(n) = O(n.log3(n))
您可以使用大师定理:
T(n) = a*T(n/b) + C * n^k(a,b,C > 0,k 在 N 中)。
情况 1:a < b^k --> T(n) 在 Θ (n^k)
情况 2:a = b^k --> T(n) 在 Θ (n^k * log (n))
情况 3:a > b^k --> T(n) 在 Θ (n^logb a)
在你的情况下 T(n) = 1 * T(n/3) + С * n^1.
a = 1, b = 3, k = 1 --> T(n) 在 Θ (n) 中。