确定递归函数的CN和时间复杂度

时间:2015-10-31 15:32:24

标签: algorithm time-complexity complexity-theory asymptotic-complexity recurrence

public static int test(int N) {
  if (N == 1) return 1; 
  return (3 * (test(N/2) + test(N/2)) + f(N)) 
}

public static void f(int a) {
  for (int i = 1; i <= a; i++) 
  System.out.println(“algo rocks”);
}

我试图确定CN和上面代码的复杂性

我得出了这个结论

  • C 1 = 0 - &gt;终止条件
  • C N = 2C N / 2 + N

我迷失了3这个功能成倍增加你能检查我的工作并指导我错误的地方。

1 个答案:

答案 0 :(得分:1)

你声称C(1)= 0,实际上是1,你错了。

所以,C(1)= 1。

此外,最坏情况下函数f()的时间复杂度为O(N),因为N被传递给函数。

所以,你的复发关系结果是:

T(N) = 3 * 2 * T(N/2) + O(N)
     = 6 T(N/2) + O(N).

我将离开复发关系供你解决。这很容易。如果您无法计算,请至少尝试一次后在此答案下面ping。