主项定理Master Method 计算时间复杂度

在面试题目中有一部分是让大家求时间复杂度的问题,例如给出我们:  T(n) = a * T(n/b) + f(n)   ( ³  1,b  >  1,f(n)一般是个简单函数)这样的递归方程,计算其时间复杂度。

这时可以有2种方法,来计算时间复杂度。

一是用递归树,逐层代入原式,最终形成一个级数,然后用一个函数来表达,得到T(n)。

(我们这里主要讨论第二种方法,递归树详见   http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html )。

二是应用主项定理Master Method 。其实,主项定理也就是对递归树方法的一种归纳,形成了固定的计算方式,并分三种情形来计算。这三种情形主要是比较 nlogba 与 f(n),为什么要比较这两个函数? 

观察原式,可以看出,nlogba其实相当于用递归树方法解出的递归方程的右侧的第一项,而f(n)则是递归方程的右侧的第二项,这样,主项定理实际上是在比较组成结果的两个函数项,而且这种比较是按照数量级(或者说是变化幅度)来比较的,也就是说,如2n 与 28n是数量级(变化幅度)相当的。可以简单地说,递归方程的右侧的两项,哪项变化的块,T(n)就属于哪项的数量级。

主项定理Master Method 计算时间复杂度_第1张图片

接下来我们做几道题目来巩固一下:

主项定理Master Method 计算时间复杂度_第2张图片

你可能感兴趣的:(C++,时间复杂度,面试,面试题)