【问题标题】:Finding the complexity T(n) = 4T(n/2) + (n^2)*logn using the iteration method使用迭代法求复杂度 T(n) = 4T(n/2) + (n^2)*logn
【发布时间】:2016-04-04 22:39:55
【问题描述】:

我需要仅使用迭代方法来查找此递归的复杂性:

T(n) = 4T(n/2) + (n^2)*logn

我知道你可以使用master方法解决这个问题,复杂度是(n^2)(logn)^2,但是我尝试使用迭代方法解决它,我得到了别的东西:

T(n) = 4 * T(n/2) + (n^2) * log(n)
T(n/2) = 4 * T (n/4) + ((n/2)^2) * log(n/2)
T(n/4) = 4 * T(n/8) + ((n/4)^2) * log(n/4)

T(n) = 4 * (4 *  (4 * T(n/8) + (n/4)^2 * log(n/4)) + (n/2)^2 * log(n/2)) + (n^2) * log(n)

T(n) = 64T(n/8) + 16((n/4)^2) * log(n/4) + 4((n/2)^2) * log(n/2) + (n^2)log(n)

T(n) = (4^i) * T(n/(2^i)) + 4^(i-1) * (n/(2^(i-1)))^2 * log(n/(2^(i-1)))

使用 i = logn 后,我发现该算法的复杂度为 2^n.. 这是不正确的。

【问题讨论】:

    标签: algorithm math big-o recurrence


    【解决方案1】:

    如果你小心地展开递归,你会得到:

    现在复杂的总和变成了

    n/2^k = 1k = log(n) 时,此递归将自行耗尽。将其代回得到的等式中:

    ,其中c = T(1)

    所以一切都由n^2 log^2(n) 主导,这就是递归的复杂性。

    P.S.其实不用近似求和,用初等数学很容易计算出来。

    【讨论】:

      【解决方案2】:

      人们可以更进一步地在双方分配等价术语。

      T(n)/n^2 = T(n/2)/(n/2)^2 + log(n)
      

      已经找到了。现在要在左侧得到 log(n) 中的一个术语,在右侧得到 log(n/2)=log(n)-1 中的相同术语,通过二项式公式考虑两者的平方

      (log(n)-1)^2 = log(n)^2 - 2*log(n) + 1
      

      这样

      T(n)/n^2 - log(n)^2/2 = T(n/2)/(n/2)^2 - log(n/2)^2/2 - 1
      
      T(n)/n^2 - log(n)^2/2 + log(n) = T(n/2)/(n/2)^2 - log(n/2)^2/2 + log(n/2)
      

      由于现在已经达到术语的等价性,因此可以得出结论,左侧的表达式是恒定的。

      T(n) = n^2 * (1/2*log(n)^2 - log(n) + C)
      

      【讨论】:

        【解决方案3】:

        这不会立即形成主定理的三种情况中的任何一种。但是我们可以根据主定理得出一个上限和下限。

        T (n) = n^2 * log n
        

        也许这会对你有所帮助。

        mastermethod

        【讨论】:

          【解决方案4】:
           if T(n/2) = 4T(n/(2^2)) + ((n/2)^2)*log (n/2)  ----> 1,
              T(n/4) = 4T(n/(2^3)) + ((n/4)^2)*log (n/4)  ----> 2
              and
              T(n/8) = 4T(n/(2^)4) + ((n/8)^2)*log (n/8)  ----> 3,
          
          
           T(n) = 4T(n/2) + (n^2)*log n
           T(n) = 4[4T(n/(2^2)) + ((n/2)^2)*log (n/2)] + (n^2)*log n  ----> replace 1 with T(n/2)
           T(n) = (4^2)T(n/4) + (n^2)*log (n/2) + (n^2)*log n
           T(n) = (4^2)[4T(n/(2^3)) + ((n/4)^2)*log (n/4)] + (n^2)*log (n/2) + (n^2)*log n ----> replace 2 with T(n/4)
           T(n) = (4^3)T(n/8) + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n ----> replace 3 with T(n/8)
           T(n) = (4^3)[4T(n/(2^)4) + ((n/8)^2)*log (n/8)] + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n
           T(n) = (4^4)T(n/16) + (n^2)*log (n/8) + (n^2)*log (n/4) + (n^2)*log (n/2) + (n^2)*log n
          
           if this goes till k,
          
           T(n) = (4^k)T(n/(2^k)) + (n^2) (log (n/8) + log (n/4) + log (n/2) + log n)
          
           if n/(2^k) = 1, n = 2^k, k = log n and T(1) = 1,
          
           T(n) = (n^2)T(1) + (n^2) (log ((n/(2^k)......(n/(2^3)) * (n/(2^2)) * (n/(2^1)) * n)
           T(n) = (n^2)T(1) + (n^2) (log ((n/(2^log n)......(n/(2^3)) * (n/(2^2)) * (n/(2^1)) * n)
           T(n) = (n^2) + (n^2) (log (2^logn)) (Using geometric series)
           T(n) = O(n^2 log n)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-08
            • 2021-05-05
            • 1970-01-01
            • 2012-08-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多