MIT公开课《算法导论》笔记二:渐近符号、递归及解法

内容均来自MIT公开课Introduction to Algorithms中Charles E. Leiserson和Erik Demaine老师的讲解。

http://v.163.com/special/opencourse/algorithms.html


一. 渐进符号

a. 大O表示法

      存在正数c与N,对所有的n≥N,满足 0 ≤ f(n) ≤ cg(n )。f(n)的复杂度最多与g(n)一个数量级,即小于等于。

b  Ω 符号

       f(n) = Ω(g(n)),对于所有n ≥ n0时,0 ≤ cg(n ) ≤ f(n) 成立。f(n)的复杂度最少与g(n)一个数量级,即大于等于。

Θ符号。例如f(n) = Θ(g(n)),表示f(n)的复杂度既大于等于g(n)的复杂度,又小于等于g(n)的复杂度,即于g(n)的复杂度相当。


二 求解递归的三种方法

a. 代换法

第一步:Guess the form of the solution。代换法在大多数情况下是有效的,但是不幸的是第一步需是猜答案。你不需要完全猜出来,你可以不需要知道常数系数确切是多少,仅需要猜它的形式。

第二步:通过数学归纳法验证第一步才出来的form是否满足条件。

第三步:也是第二步的必然结果,如果猜对了那么很容易解出常数系数。

例如下图所示是如何利用代换法解一个递归式:

那么,上图中证明了T(n)小于等于一个常数乘以n^3。图中所解出的答案就是上界,不过不是严格的上界,事实上我们认为n的平方也成立。所以这并不能证明递归式的答案就是n^3,这只是表示至多是O(n^3)

b 递归树法

对于很多人来说,理解抽象的东西不如理解具体的东西更容易,而一个递归表达式就是一个抽象的东西,不容易看出其中所隐含的执行序列和规律,如每层递归的成本。但如果我们将该抽象表达式用图形的方式加以展开,则抽象变具体,就容易理解了。虽然不是所有抽象的东西都可以用具体的形象来描述,但抽象递归表达式恰恰可以被具体化。

而将抽象递归表达式具体化的最佳图形表示就是递归树。该方法我们在解乘法运算的递归表达式时已经使用过。这种递归树给出的是一个算法递归执行的成本模型。该模型以输入规模为n开始,一层层地分解,直到输入规模变为1为止。而这个时候的解决方案已经是琐细的了。图3-5为表达式T(n) = T(n /4) + T(n / 2)+ n2 的递归树。

 
 
图3-5  T(n) = T(n/4) + T(n/ 2)+ n2的递归树

很显然,递归树解法的优点是直观,很多情况下我们可以直接看出来答案。但缺点是不一定可靠,就像任何使用省略号的方法一样。(省略号到底是省略了什么?)例如,图3-3里面的省略号总让我们觉得这个结果不怎么令人放心:虽然第1层、第2层的成本没有任何问题,但我们怎么能断定没有画出的第3层的成本是(5/16)2n2呢?当然,为了保险,我们可以画出第3层并验证结果就是(5/16)2n2,但第4层的结果又如何肯定呢?

很显然,将每一层都画出来并不现实,因此,省略号就成为画递归树时不可缺少的工具。而这个省略号就成为很多人心头解不开的疙瘩。

c 主定理法

Master Method 

T(n) = aT(n/b)+h(n)

a >=1 ; b >1 ; h(n) : 不参与递归的复杂度函数

判断n^log (a)与h(n)的大小关系

= Θ(h(n)) :该方法的复杂度为   Θ(h(n)*lg(n))

> Θ(h(n)) :该方法的复杂度为   Θ(n^(log a/log b))

< Θ(h(n)) :该方法复杂度为 Θ(h(n))

这样可以帮助你快速的分析出你得算法的复杂度是否符合要求。

分别举出了主定理方法的三个应用场景的例子以及一个主定理方法不适用的例子。下图转自http://blog.csdn.net/xyd0512/article/details/8211482 侵删


证明主定理法。略去。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值