Big O表示法中以下代码的时间复杂度是多少?

时间:2014-08-28 10:37:55

标签: performance algorithm big-o time-complexity

  1. T(n) = 8*T(n/2) + n*n

  2. T(n) = 3*T(n/4) + n

  3. 我想计算Big O表示法的时间复杂度。答案是什么(不使用主定理)

2 个答案:

答案 0 :(得分:4)

主定理适用于T(n) = a*T(n/b) + n^c形式的任何重复。它查看并比较了重复的两个部分:

1)这个级别的常量工作的大小(c) 2)递归调用的数量和大小(a和b)

从这里开始,我们将log_b(a)与c进行比较。有三种可能性

  1. log_b (a) > c - > T(n)O(n^log_b (a))
  2. log_b (a) < c - &gt; T(n)O(n^c)
  3. log_b (a) = c - &gt; T(n)O(n^c log(n))
  4. 所以你的两个例子......

    1. T(n) = 8*T(n/2) + n*n,因此a = 8, b = 2, c = 2log_2 (8) > 2,因此T(n)O(n^(log_2 (8)) = O(n^3)
    2. T(n) = 3 * T(n/4) + n,因此a = 3, b = 4, c = 1log_4 (3) < 1,因此T(n)O(n^c) = O(n)
    3. A fuller explanation on Wikipedia

答案 1 :(得分:2)

对于第一个关系,您可以这样做:

enter image description here