在写递归程序时,往往要分析它们的时间复杂度,而且时间复杂度一般不太容易直接看出来。在分析递归程序的时间复杂度,有个比较有名的定理是the master method.

     我们知道一般递归程序的时间复杂度可以用递归的公式表达出来,比如merge sort的时间复杂度的递归公式可以表示为T(n) = 2T(n/2) + O(n),而对于更一般的情况的,可以写成T(n) = aT(n/b) + O(n^d),根据master method,有下面分析时间复杂度的公式:

p_w_picpath

    下面对master method进行证明,首先画出T(n) = aT(n/b) + O(n^d)的递归调用树,可以知道第一层有1个问题,第二层有a*n/b的子问题,第三层有(a*n/b)^2,最后一层有(a*n/b)^(logb^n)个,所以,问题的总规模为

p_w_picpath

   所以,

   1.当a = b^d,那么,问题规模为c(n^d)*log(b^n),即O(n^d logn)

   2.当a < b^d,那么,问题规模为

                     the master method_第1张图片

      由于

             p_w_picpath  

那么,

             p_w_picpath

所以问题规模最终为O(n^d)

     3.当a  > b^d,那么,问题规模为

                     the master method_第2张图片

       由于

                    p_w_picpath

       那么

                   p_w_picpath  

       故问题规模最终为O(n^(logb^a))