算法主公式

这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接截图

  

不得不说,算法导论是一本非常偏向于数学的算法书,里面的对于各种算法结论的正确性大都有着严格的数学上的推导。之前对于主方法的描述只是大略地看了一下,看是看懂了,但是当时没有刻意将这个结论记下来,当我往后看遇到递归式求解部分的时候发觉还是忘记了主方法的求解过程,只能模糊记得部分而已委屈,昨天晚上再复习的时候,发觉这个描述可以不用带有让人烦恼的 ε ,我是采用了如下的记忆方法~

      对于递归式 T(n) = a * T(n/b) + f(n);

       1.我们不妨设f(n) = n^k;   我们可以求出 k 的值

       2.我们再求出lna/lnb;(即logab,貌似编辑器无法打出对数的下标,就转换成除法啦~)

          3.比较lna/lnb 与 k的大小

       4.如果k > lna/lnb , 有 T(n) = Θ(f(n));  如果 k < lna/lnb  有 T(n) = Θ(n ^(lna/lnb));如果k = lna/lnb

则T(n) = Θ(lgn * n^(lna/lnb));

比如T(n) = 9*T(n/3) + n;

有 ln9/ln3 = 2   ; f(n) = n^1 得到 k = 1   有 2 > 1 即得到 T(n) = Θ(n^2);

这样的方法应该会简单点吧~  我只是觉得算导里面每次对于递归式的求解都要拿一个ε来说事总是有点不爽的感觉,虽然这种方法失去了数学上的严谨证明,。。。。orz







算法导论上写的太mathmetical了,记不住。

以递归式为T(n) = a*T(n/b)+f(n)为例

   (1)如果n^>f(n)  则复杂度为O(n) = n^

   (2)如果n^=f(n)  则复杂度为O(n) = n^*lgn

   (2)如果n^<f(n)  则复杂度为O(n) = f(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值