递归算法复杂度的求法
来源:互联网 发布:淘宝装修助手 编辑:程序博客网 时间:2024/05/18 02:17
算法导论公开课第二课里给出了三种方法,求解T(n) = aT(n/b) + f(n)
第一种代入法:观察a和b的数量关系,猜测最后的结果。例如T(n) = 4T(n/2),那么T(n)最后很可能是Θ(n^2)的复杂度。设出T(n)的形式,然后利用数学归纳法证明之。适用于较简单的递归式。
第二种递归树法:分别写出每一层的时间复杂度再求和。这种方法适合递归树比较有规律的情况,譬如归并算法或二分查找,递归树的每一层之和呈某种简单的数列,这样很方便就可以求和。
第三种是更加形式化的主方法【预计算:叶节点数目为n^log(b,a)。因为树的高度是log(b,n),每层的节点数目为a^层数,所以叶节点的数目即第log(b,n)层的数目为a^(log(b,n)),即n^(b,a),lg表示以2为底】
根据f(n)的不同分三种情况:
case1: f(n) = O(n^(log(b,a)-ε)),即f(n)比叶节点数目要多项式小于,最终的复杂度T(n)=Θ(n^log(b,a));
case2: f(n)=Θ(n^log(b,a)*lg^k(n)),通俗地理解就是,f(n)比叶节点数目差不多,但不会多项式大于。(因为因子是n的对数)。最终复杂度T(n)=Θ(n^log(b,a)*lg^(k+1)(n))。这里的k+1的意义在于,对每一层分解之后的f(n)进行叠加,树的高度是log(b,n),与lg(n)只差一个常数因子。所以就用lg(n)表示,在复杂度中lg(n)的幂次中体现出;
case3: f(n) = Ω(n^(log(b,a)+ε)),即f(n)比叶节点数目要多项式大于,最终的复杂度T(n)=Θ(f(n))。
- 递归算法复杂度的求法
- 数据结构:算法的时间复杂度求法
- 时间复杂度的求法
- 递归算法的复杂度分析
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归算法的时间复杂度
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度求解
- 递归算法的时间复杂度终结篇
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度分析
- 递归算法的时间复杂度计算
- 递归算法时间复杂度的估计问题
- 递归算法的时间复杂度分析
- 九度OJ 1114:神奇的口袋 (DFS、DP)
- 在Android程序中使用已有的SQLite数据库
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- TFS 无法找到新加的Windows用户
- CoreBluetooth的实现代码
- 递归算法复杂度的求法
- PHP:6种方法获取文件的扩展名
- 01-复杂度2 Maximum Subsequence Sum (25分)
- c#简单实现记事本功能
- 筛素数
- 【鸟哥的linux私房菜-学习笔记】首次使用相关知识、在线求助 man page
- Douglas Crockford 大神写的 JavaScript 异步控制库:RQ(上)
- 网络编程 笔记(九)Echo客户端 Utniy实现
- hdu5282 最长公共子序列