代码之家  ›  专栏  ›  技术社区  ›  cstac

复杂度算法递推关系

  •  1
  • cstac  · 技术社区  · 10 年前
    int function(int n){
    if (n<=1)
     return 1;
    else 
     return (2*function(n/2));
    }
    

    运行时间的递推关系T(n)是什么?为什么?

    2 回复  |  直到 10 年前
        1
  •  1
  •   user4668606 user4668606    10 年前

    该算法的复杂度函数为

    T(n) = T(n / 2) + 1
    T(1) = 1
    

    应用 master-theorem ,我们会得到

    a = 1
    b = 2
    c = 0 (1 = n^0)
    
    log b(A) = log2(1) = 0 = 0 c, thus case 2
    apply values and the result is O(log n).
    

    正如@guillaume已经正确指出的那样,使用线性函数可以更容易地解决这个问题。

        2
  •  1
  •   guillaume girod-vitouchkina    10 年前

    你可以直接计算:它是最接近的2^n,最大或相等。

    计算L=log2(n),取2^L或2^(L+1)

    复杂性为O(log2N):log2N操作。