主项定理Master Method 计算时间复杂度
2015-09-09 20:49
609 查看
在面试题目中有一部分是让大家求时间复杂度的问题,例如给出我们: T(n) = a * T(n/b) + f(n) (a ³ 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)就属于哪项的数量级。
接下来我们做几道题目来巩固一下:
这时可以有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)就属于哪项的数量级。
接下来我们做几道题目来巩固一下:
相关文章推荐
- Android开发:在onTouchEvent中处理任意时间的长按事件
- 02.Jquery Mobile介绍以及Jquery Mobile页面与对话框
- SGU103 The traffic lights 绞脑题
- java 环境变量设置 经典啊 很详细
- HDU - 1233 还是畅通工程(最小生成树模板题)
- 国科:做一家有梦想的芯片企业 五年后年收入100亿---C114
- java读取网页
- 数据库访问性能优化
- hibernate中one-to-one两种配置方式
- 快速排序
- C语言去掉字符串前后空格,中间多余空格
- centos7在VMware下配置网络连接
- bootstrap笔记第一天
- 算法导论——动态规划之最长公共子序列(LCS)和最长回文子序列(LPS)
- POJ - 1287 Networking(最小生成树模板题)
- 为什么解析 array_column不可用,
- 第一天:探索(2)
- Web前端——JQuery的进阶(测试使用 jQuery进行指定的操作)
- Codechef September Challenge 2015
- 有return的情况下try catch finally的执行顺序