主项定理Master Method 计算时间复杂度
在面试题目中有一部分是让大家求时间复杂度的问题,例如给出我们: T(n) = a * T(n/b) + f(n) ( a ³ 1,b > 1,f(n)一般是个简单函数)这样的递归方程,计算其时间复杂度。
这时可以有2种方法,来计算时间复杂度。
一是用递归树,逐层代入原式,最终形成一个级数,然后用一个函数来表达,得到T(n)。
(我们这里主要讨论第二种方法,递归树详见 http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html )。
二是应用主项定理Master Method 。其实,主项定理也就是对递归树方法的一种归纳,形成了固定的计算方式,并分三种情形来计算。这三种情形主要是比较 nlogba 与 f(n),为什么要比较这两个函数?
观察原式,可以看出,nlogba其实相当于用递归树方法解出的递归方程的右侧的第一项,而f(n)则是递归方程的右侧的第二项,这样,主项定理实际上是在比较组成结果的两个函数项,而且这种比较是按照数量级(或者说是变化幅度)来比较的,也就是说,如2n 与 28n是数量级(变化幅度)相当的。可以简单地说,递归方程的右侧的两项,哪项变化的块,T(n)就属于哪项的数量级。
接下来我们做几道题目来巩固一下:
主项定理Master Method 计算时间复杂度相关推荐
- master method(主定理)
master method(主定理) 假设有递推关系式 T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn)+f(n) ,其中 nnn 为 ...
- 主定理(Master Theorem) 及其应用
主定理"Master Theorem" 一.主定理(Master Theorem) 二.应用举例 在分析算法的时候,我们经常需要分析递归算法的时间复杂度. 一.主定理(Master ...
- 计算时间复杂度--(简单版)
步骤: 1.找到执行次数最多的语句 2.语句执行语句的数量级 3.用O表示结果 计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦. 然后: 1.用常数1取代运行 ...
- 你还在为时间复杂度不懂而担心吗???赶紧进来,这里手把手教你计算时间复杂度!!!
作者:低调 作者宣言:写好每一篇博客 文章目录 前言 一.什么是时间复杂度? 1.1时间复杂度的概念 1.2复杂度计算在算法的意义 1.3如何计算常见算法的时间复杂度? 二.常见时间复杂度计算举例 三 ...
- 素数的有关性质(二)欧拉函数的一些定理证明与计算
文章目录 写在前面 内容回顾 模mmm剩余类环 定理 模ppp剩余类域 定义 欧拉函数的定义 欧拉函数的性质 命题1:欧拉函数等于与mmm互素整数个数 命题2:取值为素数ppp的欧拉函数等于p−1p- ...
- fast marching method 计算内波相速度
在计算内孤立波传播轨迹的时候,可以应用(Jackson,2009)(J09)提出的经验公式 C(x,y)=Cmaxtanh[B1+H(x,y)B2]−−−−−−−−−−−−−−−−√ C(x,y)=C ...
- 冒泡排序+怎么计算时间复杂度
冒泡排序的基本思想 时间复杂度为O(N^2) 每次比较两个相邻元素,如果他们的顺序错误就把它们交换过来. 举个栗子 例如我们需要将 12,35,99,18,76, 5个数进行从大到小排序,既然是从大 ...
- 主定理(Master Theorem)
主定理是分析分治算法时间复杂度很重要的一个定理. 我们之前对于一个递归类的代码进行时间复杂度分析,一般会采用递归树的方式,下面我们先介绍一下递归树的方式,理解之后,再引入主定理的相关内容. 分治的介绍 ...
- java求时间复杂度求值_计算时间复杂度例题(示例代码)
一.引言: 写给自己看 算法是程序的灵魂,想学好算法就必须先搞懂时间复杂度 算时间复杂度就是算基本语句条数 5个例题 二.例题 1). for(int i=0; i for(int j=i; j Sy ...
最新文章
- Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
- poj3617Best Cow Line
- Makefile(二)
- Mybatis简单入门及配置文件标签详情
- Docker 全套笔记整理
- Linux运维之ntpdate同步网络时间
- java桌面项目打包_by icewee_写得太棒了,直接转载了
- 用WPF实现打印及打印预览
- w10系统打不开服务器共享打印机,共享打印机拒绝访问怎么办?Win10打印机无法共享的解决办法...
- Dragonfly 修改数据像素点大小
- virt-install命令详解
- 算法013:二维数组中的查找-在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断中是否存在
- <update></update>
- VuePress 开发技术文档网站,管理.md文件,生成静态网站
- 使用Python 封装一个简单的Mysql工具类
- Vagrant up启动失败 invalid byte sequence in UTF-8 (ArgumentError)
- 使用 FFmpeg 推流,使用 VLC 软件进行拉流
- Layui前端判断,Date()函数时间戳转换
- 调用百度语音识别接口实现语音识别与语音合成
- Gdevops峰会| 在什么情况下应该考虑换数据库了?
热门文章
- 完美解决安装系统出现问题——安装程序无法创建新的系统分区,也无法定位现有的系统分区,详情请查看日志文件,
- 电机调速制动matlab,鼠笼式三相异步电机:起动、调速、制动(原理与Simulink仿真)...
- ASCII,UTF,GBK 是什么
- 为什么医院治不好你的鼻炎
- 卷走超大屏电视半壁江山:TCL屏实力说话
- DDD兴起的原因,以及与微服务的关系
- 7805和78l05可以代换吗_78L05和7805有什么区别
- 服务器离家出走怎么修复,减肥减到“大姨妈”离家出走?教你几招把它找回来!...
- Java并发编程学习笔记——volatile与synchronized关键字原理及使用
- 博客园博客怎样让百度收录?