主定理一般形式是T(n) = a T(n / b) + f(n), a >= 1, b > 1。递归项可以理解为一个高度为 logbn 的 a 叉树, 这样 total operation就是  (a ^ logbn) - 1,  右边的f(n)假设为 nc 那么我们对比一下这两项就会发现 T(n)的复杂度主要取决于 logba 与 c 的大小。所以我们才会有接下来的三种case。也需要注意什么时候不可以使用主定理。

Case 1:  c < logba ,   O(n) = n ^ logba  , 意味着我们可以忽略 f(n)

Case 2:  c = logba,    O(n) = nlogk + 1n   ,  k >= 0

Case 3:  c > logba,    O(n) = nc

Reference:

https://en.wikipedia.org/wiki/Master_theorem

重新粗推了一下Master Theorem的更多相关文章

  1. Master Theorem

    Master theorem provides a solution in asymptotic terms to solve time complexity problem of most divi ...

  2. 对主定理(Master Theorem)的理解

    前言 虽说在学OI的时候学到了非常多的有递归结构的算法或方法,也很清楚他们的复杂度,但更多时候只是能够大概脑补这些方法为什么是这个复杂度,而从未从定理的角度去严格证明他们.因此借着这个机会把主定理整个 ...

  3. 算法设计与分析 - 主定理Master theorem (分治法递推时间复杂度)

    英文原版不上了 直接中文 定义 假设有递推关系式T(n)=aT(n/b)+f(n) 其中n为问题规模 a为递推的子问题数量 n/b为每个子问题的规模(假设每个子问题的规模基本一样) f(n)为递推以外 ...

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

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

  5. git回滚远程仓库代码/错提master分支的恢复

    前言 今天周五了,刚接了个新微服务模块,下班前高高兴兴开发完,提交git代码,jenkins发布到测试环境.突然看到一个提示 我最近提的代码呢?!! 想到可能会提错仓库,转念一想,不对呀,我怎有这么高 ...

  6. 如何删掉git版本库master分支的第一个commit

    这个操作会将库清空,一般来说在建库开始的时候操作. 适用场景: git init初始化版本库之后,提交第一个点之后发现这个点出问题了,但是此时内心如果有洁癖的话, 你会觉得不完美,很想把这个点干掉重来 ...

  7. github的版本控制master和branch develop

    一.git版本控制原理 master(主分支), develop(分支),虽然是主分支和分支,却是平级关系,develop可以理解为开发库,master为生产库. 本地版本:master, devel ...

  8. git的分支远程连接和远程分支的拉取推送及冲突处理

    目录 备注: 知识点 Feature分支 多人协作 推送分支 远程分支推送建议 克隆(clone)远程仓库 分支的推送和冲突处理 关联本地分支和远程分支 推送时指定分支或设置分支跟踪 拉取分支时文件冲 ...

  9. 1. Git 克隆代码

    1. Git 克隆代码 git clone git://github.com/facebook/hiphop-php.git 2. Git更新分支 查看服务器上的所有分支 [huzg@slave3 h ...

随机推荐

  1. JavaScript基础笔记(七)DOM

    DOM DOM可以将任何HTML或者XML文档描述成一个由多层节点构成的结构. 一.节点层次 一)Node类型 DOM1定义了一个Node接口,该接口将由DOM中所有节点类型实现. 每一个节点都有一个 ...

  2. Java中类加载过程和对象创建过程

    类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...

  3. vim小技巧2

    yyp:复制当前行到下一行 cw:改变当前字符串 xp:交换当前字符和右边字符

  4. HTML5 — 地理定位

    Geolocation:地理定位,获取当前浏览器所在的地理坐标信息(包括经度.纬度.海拔高度.移动速度),实现LBS应用(Location Based Service)——基于定位的服务,如订   餐 ...

  5. java第十三周测试记录

    今天课上遇到了问题,在我的上一篇随笔,这个阻碍了我很长时间,而且上一次也是这个问题,真的吃一堑不长一智,这次我应该就记住了,嗯. 设计思路: 俩个库: 1.一个库存商品,商品的基本属性和商品的数量(数 ...

  6. 使用Logstash filter grok过滤日志文件

    Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...

  7. jsp下载文件的实现方法及注意事项 (转)

    jsp中实现文件下载,最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>. 但是,这样服务器上的目录资源 ...

  8. Linux之磁盘分区篇

    作业三: 1)   开启Linux系统前添加一块大小为20G的SCSI硬盘 2)   开启系统,右击桌面,打开终端 3)   为新加的硬盘分区,一个主分区大小为10G,剩余空间给扩展分区,在扩展分区上 ...

  9. es6学习笔记一:迭代器和for-of循环

    我们如何遍历一个数组呢?在20年前,我们是这样遍历一个数组的: var myArr = []; for (var i = 0; i < arr.length; i++) { console.lo ...

  10. django之内置Admin

    本篇导航: 配置路由 定制Admin Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django ...