文章目录

  • 使用主定理求时间复杂度
    • 主定理
    • 直接可用主定理
    • 转化之后可以利用主定理

使用主定理求时间复杂度

很多算法最后都可以写出 T(n)=aT(nb)+f(n))(a≥1,b≥1)T(n)=aT(\frac{n}{b}) + f(n)) (a\ge1,b\ge1)T(n)=aT(bn​)+f(n))(a≥1,b≥1) 的递推式。针对这种形式的递推式,通常情况下我们直接可以用主定理求解复杂度,而不需要笔和纸的帮助。

主定理

直接可用主定理

  • 例1:T(n)=2T(n4)+1T(n)=2T(\frac{n}{4})+1T(n)=2T(4n​)+1

    • 解:由题目得:a=2,b=4,f(n)=1a=2,b=4,f(n)=1a=2,b=4,f(n)=1 ,此时 logba=log42=0.5log_{b}a=log_{4}2=0.5logb​a=log4​2=0.5 ,

      则 只需要比较 n0.5n^{0.5}n0.5和 f(n)=1f(n)=1f(n)=1 的大小。

      可以利用主定理的第一种情况:

      ​ 存在常数 ε=0.5\varepsilon =0.5ε=0.5 使得有 f(n)=O(n0.5−0.5)f(n)=O(n^{0.5-0.5})f(n)=O(n0.5−0.5),则T(n)=Θ(n0.5)T(n)=\Theta(n^{0.5})T(n)=Θ(n0.5)

  • 例2:T(n)=2T(n4)+nT(n)=2T(\frac{n}{4})+\sqrt{n}T(n)=2T(4n​)+n​

    • 解:由题目得:a=2,b=4,f(n)=na=2,b=4,f(n)=\sqrt{n}a=2,b=4,f(n)=n​ ,此时 logba=log42=0.5log_{b}a=log_{4}2=0.5logb​a=log4​2=0.5 ,

      则 只需要比较 n0.5n^{0.5}n0.5和 f(n)=nf(n)=\sqrt{n}f(n)=n​ 的大小。

      可以利用主定理的第二种情况:

      ​ 有 f(n)=O(n0.5)f(n)=O(n^{0.5})f(n)=O(n0.5),则T(n)=Θ(n0.5lgn)T(n)=\Theta(n^{0.5}lgn)T(n)=Θ(n0.5lgn)

  • 例3:T(n)=2T(n4)+n2T(n)=2T(\frac{n}{4})+n^{2}T(n)=2T(4n​)+n2

    • 解:由题目得:a=2,b=4,f(n)=n2a=2,b=4,f(n)=n^{2}a=2,b=4,f(n)=n2 ,此时 logba=log42=0.5log_{b}a=log_{4}2=0.5logb​a=log4​2=0.5 ,

      则 只需要比较 n0.5n^{0.5}n0.5和 f(n)=n2f(n)=n^{2}f(n)=n2 的大小。

      可以利用主定理的第三种情况:

      ​ 存在常数 ε=1.5\varepsilon =1.5ε=1.5 使得有 f(n)=Ω(n0.5+1.5)f(n)=\Omega(n^{0.5+1.5})f(n)=Ω(n0.5+1.5),且对常数 18<c<1\frac{1}{8}<c<181​<c<1与所有足够大的nnn,有2∗(n4)2≤c∗n22*(\frac{n}{4})^{2}\le c*n^{2}2∗(4n​)2≤c∗n2

      ​ 则T(n)=Θ(n2)T(n)=\Theta(n^{2})T(n)=Θ(n2)

转化之后可以利用主定理

有一些递推式看着不满足主定理的形式,但是转换之后可以使用主定理。

  • 例1:T(n)=2T(n−1)+nT(n)=2T(n-1)+nT(n)=2T(n−1)+n

    • 解:令n=lg(k)n=lg(k)n=lg(k),

      则原式可化为:T(lg(k))=2T(lg(k2))+nT(lg(k))=2T(lg(\frac{k}{2}))+nT(lg(k))=2T(lg(2k​))+n

      此时看着像主定理了,是吧。因为TTT 是一种关系,所以我们可以把关系 TTT 用 L(k)=T(lg(k))L(k)=T(lg(k))L(k)=T(lg(k))替换掉,则:

      L(k)=2L(k2)+lg(k)L(k)=2L(\frac{k}{2})+lg(k)L(k)=2L(2k​)+lg(k)

      此时和上面一样可以应用主定理的第一种情况,得到L(k)=Θ(k)L(k)=\Theta(k)L(k)=Θ(k)

      再次代换回去得:L(k)=T(lg(k))=T(n)=Θ(k)=Θ(n2)L(k)=T(lg(k))=T(n)=\Theta(k)=\Theta(n^{2})L(k)=T(lg(k))=T(n)=Θ(k)=Θ(n2)

  • 例2:T(n)=nT(n)+nT(n)=\sqrt{n}T(\sqrt{n})+nT(n)=n​T(n​)+n

    • 解:令 n=2kn=2^kn=2k,

      则原式可化为:T(2k)=2k2T(2k2))+2kT(2^k)=2^{\frac{k}{2}}T(2^{\frac{k}{2}}))+2^kT(2k)=22k​T(22k​))+2k

      两边同时除以2k2^k2k得:T(2k)2k=T(2k2))2k2+1\frac{T(2^k)}{2^k}=\frac{T(2^{\frac{k}{2}}))}{2^{\frac{k}{2}}}+12kT(2k)​=22k​T(22k​))​+1

      此时看着像主定理了,是吧。因为TTT 是一种关系,所以我们可以把关系 TTT 用 L(k)=T(2k)2kL(k)=\frac{T(2^k)}{2^k}L(k)=2kT(2k)​替换掉,则:

      L(k)=L(k2)+1L(k)=L(\frac{k}{2})+1L(k)=L(2k​)+1

      此时和上面一样可以应用主定理的第二种情况,得到L(k)=Θ(lg(k))L(k)=\Theta(lg(k))L(k)=Θ(lg(k))

      再次代换回去得:L(k)=T(2k)2k=T(n)n=Θ(lg(k))=Θ(lg(lg(n)))L(k)=\frac{T(2^k)}{2^k}=\frac{T(n)}{n}=\Theta(lg(k))=\Theta(lg(lg(n)))L(k)=2kT(2k)​=nT(n)​=Θ(lg(k))=Θ(lg(lg(n)))

      整理可得:T(n)=nΘ(lg(lg(n)))=Θ(nlg(lg(n)))T(n)=n\Theta(lg(lg(n)))=\Theta(nlg(lg(n)))T(n)=nΘ(lg(lg(n)))=Θ(nlg(lg(n)))

使用主定理求时间复杂度相关推荐

  1. 时间复杂度主定理分析及练习

    本文主要分析主定理,时间复杂度详细分析请移步至此.主定理是一种现在常用分析时间复杂度的方法,它主要适用于递归形式如下: 当  和  为常量且是一个渐进正函数时有以下三种情况: 如果,则 如果,则 如果 ...

  2. 主定理(Master Theorem)与时间复杂度

    1. 问题 Karatsuba 大整数的快速乘积算法的运行时间(时间复杂度的递推关系式)为 T(n)=O(n)+4⋅T(n/2),求其最终的时间复杂度. 2. 主定理的内容 3. 分析 所以根据主定理 ...

  3. 基于主定理以及递推树求解递归算法的时间复杂度

    非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可.但是递归算法的时间复杂度则无法通过这种方式求得.有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度.如下所示: 这种 ...

  4. 时间复杂度、渐进记法、主定理

    目录 一 . 大 O 记法 二.Ω 记法. 三. Θ记法 四.小o记法 五.命中缓存对时间效率的影响. 六.主定理 时间复杂度反应了一个程序的运行时间关于实例个数变化而变化规律.在一个排序程序中,可能 ...

  5. 运用主定理计算递归问题时间复杂度

    主定理 符号Θ ,既是上界也是下界,等于. 符号O ,表示上界,时间复杂度小于等于该值. 符号Ω ,表示下界,时间复杂度大于等于该值. 意思就是Θ 是平均时间复杂度,O 是最坏情况下的复杂度,Ω 是最 ...

  6. 时间复杂度-主定理分析

    目录 1.定理 2.举例 1.定理 主定理分析是一种时间复杂度的计算方式,当时间复杂度推根据实际情况推算出来是下面T(n)的形式的时候,可以通过主定理分析计算它的时间复杂度. 其实就是根据前半部分的a ...

  7. 递归算法时间复杂度的数学证明过程(主定理)

    由于平常的工作有时候会碰到递归,又刚好看到了这个主定理,因此多了解了一点,了解这个定理大致是怎么推导的.本文内容主要参照B站视频https://www.bilibili.com/video/BV1Q7 ...

  8. 主定理求解算法时间复杂度

    主定理 所谓主定理,就是用来解递归方程的一种方法,此方法可以用来求解大多数递归方程. 设递归方程为T(n)=aT(n/b)+f(n)  (其中a≥1,b>1) 主定理: 1. 如果存在常数ε&g ...

  9. 递归算法复杂度与主定理的推导

    一.基本概念 分治法的基本思想 分治法就是把一个大的问题分解成为若干个小的问题,求出小问题的解后合并即为大问题的解 分治法能够解决的问题的一般特征 该问题可以分解为若干规模规模较小的相同问题: 该问题 ...

最新文章

  1. VS.net下编写makefile文件--NMAKE用法
  2. 一段时间以来的SEO优化结果
  3. 阿里云ECS使用cloudfs4oss挂载OSS
  4. HEVC 编解码资源
  5. 浅谈管理数据平台的一些想法
  6. 《Mastering opencv....读书笔记》基于标记的虚拟现实
  7. windows超级终端介绍及widows7超级终端下载
  8. axios 上传文件 封装_axios 封装上传文件的请求方法
  9. Grub2引导进入DOS系统
  10. 菜鸟点评-FILCO 忍者二代机械键
  11. python上下对齐_python-docx设置表格对齐方式
  12. ElasticSearch 基础(七)之分析器
  13. R语言下载GEOquery包
  14. 如何降低代码圈复杂度
  15. Introduction to Fabric.js/ Part 8 - Clipping with clipPaths(介绍Fabric.js第八部分-剪裁)
  16. docker安装mysql并挂载配置文件和修改密码
  17. 苹果更新一半能取消吗_苹果股价最新行情-iPhone12一半用户选蓝色 苹果股价还会继续涨吗?...
  18. hihoCoder 1430 A Boring Problem(数论)
  19. JNA实战笔记汇总一 简单认识JNA|成功调用JNA
  20. rhca考试难度大吗?rhca有用吗?

热门文章

  1. 管理驾驶舱后台内存数据库解决方案
  2. Unity特效学习笔记——受击爆点
  3. 正版推荐 -CCleaner for Mac专业卸载清理工具软件
  4. MySQL8.0添加新用户并授予远程访问权限
  5. 解决pyinstaller打包后在Win7运行提示缺少api-ms-win-crt*.dll
  6. 【看书】int的范围
  7. 电路-并联谐振电路分析
  8. OpenStack Swift Account Reaper
  9. java如何开启远程调试服务端口_Java远程调试
  10. Bootstrap里的文件作用