Θ(n(logba))
Θ(lga)
这一章主要是介绍了三种求运行时间的方法。这三种方法都是解决递归问题的。就像分治法这种问题的算法的运行时间。
这三种方法分别是替换法/递归树方法/主方法
4.1替换法(The substitution method)
这个方法有两个步骤:
1.猜一个答案
而比较悲催的是现在没有一个通用的方法去猜正确的答案(都说是猜了..)。
但是除了一些经验公式可以让你更容易猜出答案意外还有一些技术细节上的
忽略可以让你更好的猜对答案
1.可以忽略边界
2.可以忽略上取整和下取整
3.假设输入规模n是整数
2.用数学归纳法去证明你猜的答案是正确的
上例子:T(n) = 2T(n/2) + n
怎么猜呢?这个好像就是是归并排序的表达式啊。归并排序法的运行时间是O(nlgn)
那就猜这个呗。然后带入:
T(n) <= 2((c(n/2)lg(n/2)) + n
<= cnlg(n/2) + n
= cnlg(n/2) - cnlg2 + n
= cnlgn - cn + n
<=cnlgn(只要c>=1)
然后就基本搞定了吧。然后这个例子正好在边界条件上竟然不满足。然后书上给了两个解决这种问题的方法:
1.忽略边界条件(我没理解错吧?)
2.可一个改变边界条件
陷阱
书上讲了一个例子。这个例子的意思就是你一定要得到你猜的那个答案:比如你猜的是O(nlgn),那就必学得到这样的表达式:
T(n) <= cnlgn.才算是对的。
换元法(changing variables)
这个方法用在那些看起来递归的部分非常复杂,比如有根号的情况下使用。
4.3递归树方法(The recursion-tree method)
递归树方法呢,也分两个步骤:
1.将方程式展开成树一样的形式,然后得出答案
怎么展开呢?具体步骤不讲了。反正就是展开以后每个节点表示运行一个步骤时用的代价(cost)。
求法是先将每一层的各个节点相加得到每一层用的代价。
然后将各个层用的代价加起来久得到答案了
计算当中要得到树的层数和最底层的数字。
有个小问题我就没明白下面这两个表达式是怎么想等的?但是算一算还真是:
n(logba)<