在面试题目中有一部分是让大家求时间复杂度的问题,例如给出我们:  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 计算时间复杂度相关推荐

  1. 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 为 ...

  2. 主定理(Master Theorem) 及其应用

    主定理"Master Theorem" 一.主定理(Master Theorem) 二.应用举例 在分析算法的时候,我们经常需要分析递归算法的时间复杂度. 一.主定理(Master ...

  3. 计算时间复杂度--(简单版)

    步骤: 1.找到执行次数最多的语句 2.语句执行语句的数量级 3.用O表示结果 计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦. 然后: 1.用常数1取代运行 ...

  4. 你还在为时间复杂度不懂而担心吗???赶紧进来,这里手把手教你计算时间复杂度!!!

    作者:低调 作者宣言:写好每一篇博客 文章目录 前言 一.什么是时间复杂度? 1.1时间复杂度的概念 1.2复杂度计算在算法的意义 1.3如何计算常见算法的时间复杂度? 二.常见时间复杂度计算举例 三 ...

  5. 素数的有关性质(二)欧拉函数的一些定理证明与计算

    文章目录 写在前面 内容回顾 模mmm剩余类环 定理 模ppp剩余类域 定义 欧拉函数的定义 欧拉函数的性质 命题1:欧拉函数等于与mmm互素整数个数 命题2:取值为素数ppp的欧拉函数等于p−1p- ...

  6. fast marching method 计算内波相速度

    在计算内孤立波传播轨迹的时候,可以应用(Jackson,2009)(J09)提出的经验公式 C(x,y)=Cmaxtanh[B1+H(x,y)B2]−−−−−−−−−−−−−−−−√ C(x,y)=C ...

  7. 冒泡排序+怎么计算时间复杂度

    冒泡排序的基本思想 时间复杂度为O(N^2) 每次比较两个相邻元素,如果他们的顺序错误就把它们交换过来. 举个栗子 例如我们需要将 12,35,99,18,76,  5个数进行从大到小排序,既然是从大 ...

  8. 主定理(Master Theorem)

    主定理是分析分治算法时间复杂度很重要的一个定理. 我们之前对于一个递归类的代码进行时间复杂度分析,一般会采用递归树的方式,下面我们先介绍一下递归树的方式,理解之后,再引入主定理的相关内容. 分治的介绍 ...

  9. java求时间复杂度求值_计算时间复杂度例题(示例代码)

    一.引言: 写给自己看 算法是程序的灵魂,想学好算法就必须先搞懂时间复杂度 算时间复杂度就是算基本语句条数 5个例题 二.例题 1). for(int i=0; i for(int j=i; j Sy ...

最新文章

  1. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
  2. poj3617Best Cow Line
  3. Makefile(二)
  4. Mybatis简单入门及配置文件标签详情
  5. Docker 全套笔记整理
  6. Linux运维之ntpdate同步网络时间
  7. java桌面项目打包_by icewee_写得太棒了,直接转载了
  8. 用WPF实现打印及打印预览
  9. w10系统打不开服务器共享打印机,共享打印机拒绝访问怎么办?Win10打印机无法共享的解决办法...
  10. Dragonfly 修改数据像素点大小
  11. virt-install命令详解
  12. 算法013:二维数组中的查找-在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断中是否存在
  13. <update></update>
  14. VuePress 开发技术文档网站,管理.md文件,生成静态网站
  15. 使用Python 封装一个简单的Mysql工具类
  16. Vagrant up启动失败 invalid byte sequence in UTF-8 (ArgumentError)
  17. 使用 FFmpeg 推流,使用 VLC 软件进行拉流
  18. Layui前端判断,Date()函数时间戳转换
  19. 调用百度语音识别接口实现语音识别与语音合成
  20. Gdevops峰会| 在什么情况下应该考虑换数据库了?

热门文章

  1. 完美解决安装系统出现问题——安装程序无法创建新的系统分区,也无法定位现有的系统分区,详情请查看日志文件,
  2. 电机调速制动matlab,鼠笼式三相异步电机:起动、调速、制动(原理与Simulink仿真)...
  3. ASCII,UTF,GBK 是什么
  4. 为什么医院治不好你的鼻炎
  5. 卷走超大屏电视半壁江山:TCL屏实力说话
  6. DDD兴起的原因,以及与微服务的关系
  7. 7805和78l05可以代换吗_78L05和7805有什么区别
  8. 服务器离家出走怎么修复,减肥减到“大姨妈”离家出走?教你几招把它找回来!...
  9. Java并发编程学习笔记——volatile与synchronized关键字原理及使用
  10. 博客园博客怎样让百度收录?