第二节 算法复杂度分析的的基本符号及 递归关系式下的复杂度解法

这次的主要知识点是:

1.各种复杂度符号  2.递归复杂度解法: 分为三种 替换法(猜!)   递归树法    主定理

1各种复杂度符号

big O definition:

O(g(n))= { f(n) : there exist constants c>0, n0>0 such that 0<=f(n)<=cg(n) for all n>=n0}

big Ω definition:

Ω(g(n))= { f(n): there exist constants c>0, n0>0 such that 0<=cg(n)<=f(n) for all n>=n0}

big Θ definition:

Θ(g(n)) = O(g(n)) ∩Ω(g(n))

some small notation

small o definition:

ο(g(n))= { f(n) : for any constant c>0, there is a constant n0>0 such that 0<=f(n)<cg(n) for all n>=n0}

small ω definiton:

ω(g(n))= { f(n): for any constant c>0, there is a constant n0>0 such that 0<=cg(n)<f(n) for all n>=n0}

2 递归求解

递归的求解方法在教程中提到了3种: 替换法、递归树 和 主定理(叫主定理是因为它是主要用到的定理)

下面分别讲这三个定理:

替换法:其重要的过程就是猜,假设! 假设一个复杂度,然后进行证明

其过程是: 1. 猜 解的形式

        2. 通过归纳法 验证

      3. 得出使解真正有效的常数

解法的一个例子见我的算法笔记,里面有详细的推导。

递归树: 递归树方法并不是一个严格的证明,只是一种启发性的思路。它可以作为替换法的猜测的来源

上一节就有一个递归树的例子,这一节在给出一个更复杂的例子:

解: T(n) = T(n/4)+T(n/2)+n2:

主定理: 主定理是非常重要的.他可以解决很多递归问题,但是也没有完全覆盖所有的情况。它分为三种

情况,需要记好多东西。。。

主定理是应用到下面形式的递归上的:

T(n) = aT(n/b)+f(n), 其中 a>=1,b>1:

比较f(n)和nlogba   根据比较的情况分为三种情况:

1. f(n) = O(nlogba-ε) for 某个常数ε>0.

这个条件是指 f(n) 以  nlogba 比是多项式级别慢的

其解为: T(n) = Θ(nlogba)

2. f(n)=Θ(nlogbalgkn) 对常数k>=0.

这个条件是指f(n)和 nlogba是以相似的速度在增长的

其解为: T(n)=Θ(nlogbalgk+1n).

3. f(n)= Ω(nlogba+ε)  for 某个常数ε>0.

这个条件是指f(n)增长的比 nlogba

而且!需要f(n)满足一个正则条件:af(n/b)<=cf(n) for 某常数c<1

其解为:T(n)=Θ(f(n))

主定理可以通过递归树很好的理解与证明!比如 第三种情况那个正则条件怎么来的等。

然后我们来通过递归树来分析一下主定理:

算法打基础——符号&递归解法的更多相关文章

  1. [LeetCode系列]爬梯问题的递归解法转换为迭代解法

    有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少) 本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第 ...

  2. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  3. [Python3 练习] 006 汉诺塔2 非递归解法

    题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...

  4. [Python3 练习] 005 汉诺塔1 递归解法

    题目:汉诺塔 I (1) 描述 传说,在世界中心贝拿勒斯(在印度北部)的圣庙外有左中右三根足够长的柱子(塔) 左边柱子上套着 64 片金片,金片按"上小下大"排,其余两根是空柱子 ...

  5. Java实现 蓝桥杯VIP 算法训练 非递归(暴力)

    试题 算法训练 非递归 问题描述 当x>1时,Hermite多项式的定义见第二版教材125页.用户输入x和n,试编写"非递归"函数,输出对应的Hermite多项式的值.其中x ...

  6. 汉诺塔(河内塔)算法 ----C语言递归实现

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...

  7. C#中八皇后问题的递归解法——N皇后

    百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...

  8. C#算法基础之递归排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. 算法打基础——顺序统计(找第k小数)

    这次主要是讲如何在线性时间下找n个元素的未排序序列中第k小的数.当然如果\(k=1 or k=n\),即找最大最小 数,线性时间内遍历即可完成,当拓展到一般,如中位数时,相关算法就值得研究了.这里还要 ...

随机推荐

  1. 学习javascript 的一点感想

    原文:学习javascript 的一点感想 //动态性是指,在一个Javascript对象中,要为一个属性赋值,我们不必事先创建一个字段,只需要在使用的时候做赋值操作即可,如下例:var obj=ne ...

  2. 当<script>中的type等于text/html的妙用

    我们可以在<script>片断中定义一个被JS调用的代码,但代码又不在页面上显示,这时,我们可以使用下面的方法: <script id="commentTemplate&q ...

  3. android控制文件:ViewPager+Fragment+GridView使用(与AndroidQuery框架结合)

    最近我看到一个AndroidQuery该框架.里面Demo,有一个屏幕,让博主喜欢.很顺利的左右滑动,感觉非常好,所以拿来和大家分享一下.看看结果图.: 从图中能够看出.上面的布局是一个Layout里 ...

  4. Python学习笔记21:数据库操作(sqlite3)

    Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言. SQLite作为后端数据库,能够搭配Python建站点,或者制作有数据存储需求的工具. SQLite还在其他领域有广泛 ...

  5. Unity3D专访——真正的面试

    本来想写一系列的,一半的攻击,现在面试的水.人之奸,用大哥的话说,要走新手是做螺丝钉和抹布用的.还有一半是对出出学校的或者是自废武功转3d的朋友们提供一个比較有价值的參考. 只是我时间实在仓促.没有保 ...

  6. MyEclipse优化全攻略

    (0) 吐槽 Eclipse仅仅是个半成品有木有?什么都须要自己安装插件,新手非常难用有木有? 安装上插件以后了版本号兼容和各种问题烦死人有木有? 都怪碎片和版本号乱公布有木有? IntelliJ I ...

  7. 【百度地图API】自定义可编辑的交通路线

    原文:[百度地图API]自定义可编辑的交通路线 任务描述: 我想自己绘制一条从地铁站出口到天安门的道路,而且还需要根据我的喜好来改变这条路线. 如何实现: 鼠标左击地图,绘制路线:双击后,绘制结束:绘 ...

  8. IIS7 URL Rewrite 用法实例

    原文:IIS7 URL Rewrite 用法实例 很友好的URL地址,使访问的人很容易记住.要求你的用户记住" http://www.contoso.com/article.aspx?id= ...

  9. IplImage 封装释放

    IplImage是openCV库中非常重要的一个结构体,库中的图像都是保存为这个结构体后再进行操作的,详细结构例如以下: </pre><pre> typedef struct ...

  10. openstack shelve/unshelve/stop浅析

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! stop的虚拟机仅仅是将虚拟 ...