【Master Theorem主定理】递归时间复杂度分析

主定理的内容

《算法导论》中提到了主定理,用来分析分治方法带来的
主定理是解决递归时间复杂度的一种直接方法适合于以下类型的递推公式
T ( n ) = a T ( n / b ) + O ( n d ) a > = 1 b > 1 T(n) = aT(n/b) + O(n^d) (a >= 1 且 b > 1)

其中 n n 为问题规模, a a 为递推的子问题数量, n / b n/b 为每个子问题的规模(假设每个子问题的规模基本一样), O ( n d ) O(n^d) 为递推以外进行的计算工作量

那么问题的时间复杂度 T ( n ) T(n)

  • 如果 a < b d a < b^d ,则 T ( n ) = O ( n d ) T(n) = O(n^d)
  • 如果 a = b d a = b^d ,则 T ( n ) = O ( n d l o g n ) T(n) = O(n^dlogn)
  • 如果 a > b d a > b^d ,则 T ( n ) = O ( n l o g b a ) T(n) = O(n^{log_b^a})

说明:像 T ( n ) = T ( n ) + 1 T(n) = T(\sqrt{n}) + 1 这个公式就不符合上面的递归类型,不过它可以通过换元得到上面形式,这里不再赘述

具体应用

例:二分查找

T ( n ) = T ( n / 2 ) + O ( n 0 ) T(n) = T(n/2) + O(n^0) 假设每个子问题的规模基本一样

a = 1 , b = 2 , d = 0 , b d = 1 a = 1, b = 2, d = 0,b^d = 1 ,所以 T ( n ) = O ( l o g n ) T(n) = O(logn)


例:归并排序

T ( n ) = 2 T ( n / 2 ) + O ( n 1 ) T(n) = 2T(n/2) + O(n^1) 假设每个子问题的规模基本一样

a = 2 , b = 2 , d = 1 , b d = 2 a = 2, b = 2, d = 1,b^d = 2 ,所以 T ( n ) = O ( n l o g n ) T(n) = O(nlogn)


例:LeetCode 236. 二叉树的最近公共祖先
LeetCode 题解 | 236. 二叉树的最近公共祖先(经典递归 C++)

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == NULL)
            return NULL;
            
        // 可认为左右子树已经实现了函数的功能
        TreeNode* left =  lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);
        
        if(root == p || root == q) 
            return root;
        
        if(left == NULL)
            return right;
        if(right == NULL)
            return left;      
        if(left && right) // p和q在两侧
            return root;
        
        return NULL; // 必须有返回值
    }
};

T ( n ) = 2 T ( n / 2 ) + O ( n 0 ) T(n) = 2T(n/2) + O(n^0) 假设每个子问题的规模基本一样,也就是说我们可以假设左右子树的结点数相同

a = 2 , b = 2 , d = 0 , b d = 1 a = 2, b = 2, d = 0,b^d = 1 ,所以 T ( n ) = O ( n ) T(n) = O(n)


例:LeetCode 105. 从前序与中序遍历序列构造二叉树

LeetCode 题解 | 105. 从前序与中序遍历序列构造二叉树(递归 C++)


主定理证明

参考证明

发布了270 篇原创文章 · 获赞 111 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43827595/article/details/104440145