算法打基础——符号&递归解法
第二节 算法复杂度分析的的基本符号及 递归关系式下的复杂度解法
这次的主要知识点是:
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))
主定理可以通过递归树很好的理解与证明!比如 第三种情况那个正则条件怎么来的等。
然后我们来通过递归树来分析一下主定理:

算法打基础——符号&递归解法的更多相关文章
- [LeetCode系列]爬梯问题的递归解法转换为迭代解法
有一个n阶的梯子, 你每次只能爬1阶或2阶, 请问共有多少种登顶的爬法?(正好爬完n阶, 不能多也不能少) 本题最优解是直接套用菲波那切数列即可(因为菲波那切数列的第n个元素正好等于第n-1个元素和第 ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- [Python3 练习] 006 汉诺塔2 非递归解法
题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...
- [Python3 练习] 005 汉诺塔1 递归解法
题目:汉诺塔 I (1) 描述 传说,在世界中心贝拿勒斯(在印度北部)的圣庙外有左中右三根足够长的柱子(塔) 左边柱子上套着 64 片金片,金片按"上小下大"排,其余两根是空柱子 ...
- Java实现 蓝桥杯VIP 算法训练 非递归(暴力)
试题 算法训练 非递归 问题描述 当x>1时,Hermite多项式的定义见第二版教材125页.用户输入x和n,试编写"非递归"函数,输出对应的Hermite多项式的值.其中x ...
- 汉诺塔(河内塔)算法 ----C语言递归实现
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...
- C#中八皇后问题的递归解法——N皇后
百度测试部2015年10月份的面试题之——八皇后. 八皇后问题的介绍在此.以下是用递归思想实现八皇后-N皇后. 代码如下: using System;using System.Collections. ...
- C#算法基础之递归排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 算法打基础——顺序统计(找第k小数)
这次主要是讲如何在线性时间下找n个元素的未排序序列中第k小的数.当然如果\(k=1 or k=n\),即找最大最小 数,线性时间内遍历即可完成,当拓展到一般,如中位数时,相关算法就值得研究了.这里还要 ...
随机推荐
- 【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘
原文:[高德地图API]从零开始学高德JS API(七)——定位方式大揭秘 摘要:关于定位,分为GPS定位和网络定位2种.GPS定位,精度较高,可达到10米,但室内不可用,且超级费电.网络定位,分为w ...
- android 编译共享ccache的缓存
1. android自带的ccache版本号(2.4版本号)过低,是无法支持以上的功能的,须要使用新版ccache. 2. 最新的ccache请到http://ccache.samba.org/dow ...
- C#-面向对象的多态思想 ---ShinePans
总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 1.首先利用接口来实现多态: 接口相当于"功能,"接口 ...
- Ubuntu下的用户和权限(二)
五.chown.chgrp命令 从名字就能够猜測他们是干嘛的,可是这两个命令须要root权限. chown命令的格式为:chown user:group file 中间的user : group三项 ...
- MVC创建XML,并实现增删改
原文:MVC创建XML,并实现增删改 如果创建如下的XML: <?xml version="1.0" encoding="utf-8" standalon ...
- 《全体育·瑜伽》
今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...
- ZOJ 2675 Little Mammoth(计算几何)
圆形与矩形截面的面积 三角仍然可以做到这一点 代码: #include<stdio.h> #include<string.h> #include<stdlib.h> ...
- Linux常用命令汇总-速查
对Linux新手有用的20个命令 对中级Linux用户有用的20个命令 对Linux专家非常有用的20个命令 20个最受欢迎的Linux命令 20个有趣的Linux命令
- AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver
1. 问题描述和起因 在使用Appium1.7.0及其以下版本的时候,我们可以直接使用如下代码来创建一个AppiumDriver实例进行对安卓设备的操作. driver = new AndroidDr ...
- Javascript实战开发:教你使用raphael.js绘制中国地图
最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作.在本文中,我给大 ...