算法笔记:递归算法时间复杂度计算 之 主方法(Master Method)及 证明思路

一、定义

主方法是一种公式化的递归式时间复杂度求解方法,掌握后可以对特定形式的递归式快速求解,其定义如下:

对于此形式的递归式:\large T(n) = aT(\frac{n}{b})+f(n)

其中a >= 1, b > 1, f(n)渐进趋正 (渐进趋正即对于足够大的n,f(n)大于零)

比较 f(n) 与 \small n^{\log_b{a}}  (推倒可知 \small n^{\log_b{a}} 即递归树的叶子节点数量)分三种情况:

(1)情况一:f(n) 渐进小于 \small n^{\log_b{a}} 

         即 存在\large \varepsilon>0,使得  \large f(n)=O(n^{log_b{a} - \varepsilon })  成立时:

         \large T(n)=\Theta (n^{log_b{a}})

(2)情况二:f(n) 渐进等于 \small n^{\log_b{a}}\cdot lg^k n(存在一个k >=0使得式子满足即可)

          即 存在k>=0,使得  \large f(n)=\Theta (n^{log_b{a}}\cdot lg^{k}{n})  成立时:

          \large T(n)=\Theta (n^{log_{b}{a}}\cdot lg^{k+1}{n})

(3)情况三:f(n) 渐进大于 \small n^{\log_b{a}} 且 渐进树上各层f(n)的和指数递减

          即 存在\large \varepsilon>0,\large {\varepsilon}'>0,使得  \large f(n)=\Omega (n^{log_b{a}+\varepsilon })  且  \large af(\frac{n}{b})\leq (1-{\varepsilon }')\cdot f(n)  成立时:

          \large T(n)=\Theta (f(n))

二、证明思路

(这里只给出证明思路以及部分粗略的证明过程)

(1)思路:运用递归树,将每层加起来,再层层相加,看看会发生什么( T(n)由谁主导? )

(2)证明:(这里只部分证明情况三,其他类似)

    首先画出递归树

算法笔记:递归算法时间复杂度计算 之 主方法(Master Method)及 证明思路_第1张图片

可知递归树的层数:  \large log{_{b}{n}}  -->  递归树的叶子数:  \large a^{log{_{b}{n}}}=n^{log_{b}{a}}

计算各层的和:

  第一层:f(n)

  第二层:af(n/b)

  第三层:\large a^2\cdot f(\frac{n}{b^2})

.............

  最后一层(叶子层):\large \Theta (n^{log_{b}{a}})

在情况三中我们已经假定各层f(n)的和指数递减且f(n)渐进大于\small n^{\log_b{a}}:故而可以确定此情况下T(n)=O(f(n))

(渐进下界的证明过程类似)

 

 

 

 

你可能感兴趣的:(算法,#递归)