文章目录
- 背景
 - 递归树法
 - 案例一
 - 案例二
 - 局限性
 
- 代入法/替代法
 - 主方法(重点)
 
背景
当碰到形如 T ( n ) = a T ( ⌈ n b ⌉ ) + O ( n d ) T(n)=aT(\lceil \frac{n}{b} \rceil)+O(n^d) T(n)=aT(⌈bn⌉)+O(nd)的递推式,本质上就是将问题转化为规模更小的子问题求解,此时有三种思路。
递归树法
案例一
 
     
      
       
       
         T 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
         = 
        
        
        
          { 
         
         
          
           
            
             
             
               2 
              
             
               T 
              
             
               ( 
              
              
              
                n 
               
              
                2 
               
              
             
               ) 
              
             
               + 
              
             
               n 
              
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               > 
              
             
               1 
              
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               = 
              
             
               1 
              
             
            
           
          
         
        
       
      
        T(n)=\left\{ \begin{array}{ll} 2T(\frac{n}{2})+n & if \space n>1 \\ 1 & if \space n=1 \nonumber \end{array} \right. 
       
      
    T(n)={2T(2n)+n1if n>1if n=1
 可以利用递归树:
 
 画出树,高满足 
     
      
       
        
        
          2 
         
        
          h 
         
        
       
         = 
        
       
         n 
        
       
      
        2^h=n 
       
      
    2h=n,因此 
     
      
       
       
         h 
        
       
         = 
        
       
         l 
        
       
         o 
        
        
        
          g 
         
        
          2 
         
        
       
         n 
        
       
      
        h=log_{2}n 
       
      
    h=log2n,而叶子共有n个,因此总的时间复杂度 
     
      
       
       
         T 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
         = 
        
       
         n 
        
       
         l 
        
       
         o 
        
       
         g 
        
       
         n 
        
       
      
        T(n)=nlogn 
       
      
    T(n)=nlogn
案例二
 
     
      
       
       
         T 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
         = 
        
        
        
          { 
         
         
          
           
            
             
             
               3 
              
             
               T 
              
             
               ( 
              
              
              
                n 
               
              
                4 
               
              
             
               ) 
              
             
               + 
              
              
              
                n 
               
              
                2 
               
              
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               > 
              
             
               1 
              
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               = 
              
             
               1 
              
             
            
           
          
         
        
       
      
        T(n)=\left\{ \begin{array}{ll} 3T(\frac{n}{4})+n^2 & if \space n>1 \\ 1 & if \space n=1 \nonumber \end{array} \right. 
       
      
    T(n)={3T(4n)+n21if n>1if n=1
 
 每层个数即 
     
      
       
        
        
          3 
         
        
          h 
         
        
       
      
        3^h 
       
      
    3h个。最后一层高度 
     
      
       
       
         h 
        
       
         = 
        
       
         l 
        
       
         o 
        
        
        
          g 
         
        
          4 
         
        
       
         n 
        
       
      
        h=log_4n 
       
      
    h=log4n,再利用对数技巧代入,即可求出叶子的个数,而时间复杂度为:
 
 等比数列求解
局限性
 
     
      
       
       
         T 
        
       
         ( 
        
       
         n 
        
       
         ) 
        
       
         = 
        
        
        
          { 
         
         
          
           
            
             
             
               T 
              
             
               ( 
              
              
              
                n 
               
              
                3 
               
              
             
               ) 
              
             
               + 
              
             
               T 
              
             
               ( 
              
              
               
               
                 2 
                
               
                 n 
                
               
              
                3 
               
              
             
               ) 
              
             
               + 
              
             
               n 
              
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               > 
              
             
               2 
              
             
            
           
          
          
           
            
            
              1 
             
            
           
           
            
             
             
               i 
              
             
               f 
              
             
                 
              
             
               n 
              
             
               = 
              
             
               1 
              
             
               , 
              
             
               2 
              
             
            
           
          
         
        
       
      
        T(n)=\left\{ \begin{array}{ll} T(\frac{n}{3})+ T(\frac{2n}{3})+n & if \space n>2 \\ 1 & if \space n=1,2 \nonumber \end{array} \right. 
       
      
    T(n)={T(3n)+T(32n)+n1if n>2if n=1,2
 
 此时树的高度不一致,无法计算
代入法/替代法
此法先假设时间复杂度,再去验证假设成立。因此最难之处在于怎么假设,用处不大
主方法(重点)
T ( n ) = a T ( ⌈ n b ⌉ ) + O ( n d ) T(n)=aT(\lceil \frac{n}{b} \rceil)+O(n^d) T(n)=aT(⌈bn⌉)+O(nd)的时间复杂度如下:
T ( n ) = { O ( n d ) d > log  b a O ( n d l o g n ) d = log  b a O ( n log  b a ) d < log  b a T(n)=\left\{ \begin{array}{ll} O(n^d) & d>\log_{b}a \\\\ O(n^{d}logn) & d=\log_{b}a \\\\ O(n^{\log_{b}a}) & d<\log_{b}a \nonumber \end{array} \right. T(n)=⎩ ⎨ ⎧O(nd)O(ndlogn)O(nlogba)d>logbad=logbad<logba
以后碰到这种递推分治式子代入公式即可



















