主定理 Master Theorem

主定理 Master Theorem

  • 什么是主定理?
    在算法分析中,主定理(master theorem)提供了用渐近符号表示许多由分治法得到的递推关系式的方法。
  • 主定理的作用?
    简单来说是用来计算递归时时间复杂度的一种方法。

当有递归关系式
T ( n ) = a T ( n b ) + O ( n d ) T\left ( n \right )= aT\left ( \frac{n}{b} \right )+O\left ( n^{d} \right ) T(n)=aT(bn)+O(nd)
其中 n n n为问题规模, a a a为执行的递归子问题数量, n b \frac{n}{b} bn为子问题的规模

主定理 Master Theorem_第1张图片
由递归关系可得到上表,累加得到
T o t a l w o r k = ∑ i = 0 l o g b n O ( n d ) ( a b d ) i Total work= \sum_{i=0}^{log_bn}O \left ( n^{d} \right )\left ( \frac{a}{b^{d}} \right )^i Totalwork=i=0logbnO(nd)(bda)i
其中 i i i为从0开始的递归层数
由时间复杂度的定义可知

  • a b d > 1 \frac{a}{b^{d}}> 1 bda>1时,时间复杂度为最后一项
    T o t a l w o r k = O ( O ( n d ) ( a b d ) l o g b n ) = O ( n l o g b a ) Total work=O\left ( O\left ( n^d \right )\left ( \frac{a}{b^d} \right )^{log_bn }\right )=O\left(n^{log_ba}\right ) Totalwork=O(O(nd)(bda)logbn)=O(nlogba)

  • a b d = 1 \frac{a}{b^{d}}= 1 bda=1时,等比数列求和
    T o t a l w o r k = O ( n d ) ( 1 + l o g b n ) = O ( n d l o g b n ) Total work=O\left ( n^d \right )\left ( 1+log_bn \right )=O\left ( n^dlog_bn \right ) Totalwork=O(nd)(1+logbn)=O(ndlogbn)

  • a b d < 1 \frac{a}{b^{d}}<1 bda<1时,时间复杂度为第一项
    T o t a l w o r k = O ( O ( n d ) ( a b d ) 0 ) = O ( n d ) Total work=O\left ( O\left ( n^d \right )\left ( \frac{a}{b^d} \right )^0 \right )=O\left ( n^d \right ) Totalwork=O(O(nd)(bda)0)=O(nd)

举个栗子

  • 归并排序时:
    a=2(将一个区间分为两个待排序的区间且分别执行)
    b=2(将区间分成两个部分)
    d=1(每次递归结束将两个区间归并时间复杂度 O ( n ) O(n) O(n)
    所以归并排序的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)

  • 二分查找位置时:
    a=1(虽然将一个区间分为了两个,但是由于会比较mid与当前值,所以实际被执行的区间是左区间或者右区间其中一个,所以a=1而不是a=2)
    b=2(将区间分成两个部分)
    d=0(由于是查找位置,所以每次操作只有一次求mid,时间复杂度为 O ( 1 ) O(1) O(1)
    所以二分查找位置的时间复杂度为 O ( l o g n ) O(logn) O(logn)

你可能感兴趣的:(主定理 Master Theorem)