先贴出两个初中数学公式
使用换根公式和对数倒数性质可以得出这样的结论:

alogbn=nlogba

a^{log_bn}=n^{log_ba}
等比数列求和公式:

Sn=anq−a1q−1

S_n=\frac{a_nq-a_1}{q-1}

这个关于f(n)的公式可以估计满足分治关系的函数的阶:如果f(n)=af(nb)+g(n)f(n)=af(\frac{n}{b})+g(n)那么有:

f(n)=akf(1)+∑j=0k−1ajg(nbj)

f(n)=a^kf(1)+\sum_{j=0}^{k-1}a^jg(\frac{n}{b^j})

主定理(MasterTheorem):

设ff是满足递推关系:

f(n)=af(nb)+cndf(n)=af(\frac{n}{b})+cn^d

的增函数,其中n=bkn=b^k,kk是一个正整数,a≥1a\geq1,bb是大于1的正整数,cc和dd是实数,满足cc是正的且bb是非负的。那么f(n)f(n)是

  1. O(nd)O(n^d) a<bda

  2. O(ndlogn)O(n^dlogn) a=bda=b^d

  3. O(nlogba)O(n^{log_ba}) a>bda>b^d

怎么证明呢?可以分为三种情况来证明:

  1. a<bda
  2. a=bda=b^d
  3. a>bda>b^d

首先可以将f(n)=akf(1)+∑k−1j=0ajg(nbj)f(n)=a^kf(1)+\sum_{j=0}^{k-1}a^jg(\frac{n}{b^j}) ,代入主定理递推关系,因为g(n)=cndg(n)=cn^d,可以得到

f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d

f(n)=a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d\\ =a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d

由于n=bkn=b^k,所以k=logbnk=log_bn

优先考虑a=bda=b^d的情况:

f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d=(bd)logbnf(1)+cnd∑j=0k−1(bd)jb−jd=ndf(1)+cndk=ndf(1)+cndlogbn

f(n)=a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d\\ =a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d\\ =({b^d})^{log_bn}f(1)+cn^d\sum_{j=0}^{k-1}({b^d})^jb^{-jd}\\ =n^df(1)+cn^dk\\ =n^df(1)+cn^dlog_bn\\
所以 a=bda=b^d时, f(n)f(n)是 O(ndlogn)O(n^dlogn)

然后是a≠bd a\neq b^d的情况,使用等比数列求和公式可以做出如下推导:

f(n)=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+c∑j=0k−1aj(nbj)d=akf(1)+cnd∑j=0k−1(abd)j=akf(1)+((abd)k−1)cndbda−bd=akf(1)+(abd)logbncbdnda−bd+ndbdcbd−a=nlogbaf(1)+(abd)logbncbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogbabdcbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogban−dcbdnda−bd+ndbdcbd−a=nlogbaf(1)+nlogbacbda−bd+ndbdcbd−a=nlogbaf(1)+nlogban−dcbdnda−bd+ndbdcbd−a=C1nd+C2nlogba

f(n)=a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d\\ =a^kf(1)+c\sum_{j=0}^{k-1}a^j(\frac{n}{b^j})^d\\ =a^kf(1)+cn^d\sum_{j=0}^{k-1}(\frac{a}{b^d})^j\\ =a^kf(1)+\frac{((\frac{a}{b^d})^k-1)cn^db^d}{a-b^d}\\ =a^kf(1)+\frac{(\frac{a}{b^d})^{log_bn}cb^dn^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =n^{log_ba}f(1)+\frac{(\frac{a}{b^d})^{log_bn}cb^dn^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =n^{log_ba}f(1)+\frac{{n^{log_b{\frac{a}{b^d}}}}cb^dn^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =n^{log_ba}f(1)+\frac{{n^{log_ba}}n^{-d}cb^dn^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =n^{log_ba}f(1)+\frac{{n^{log_ba}}cb^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =n^{log_ba}f(1)+\frac{{n^{log_ba}}n^{-d}cb^dn^d}{a-b^d}+\frac{n^db^dc}{b^d-a}\\ =C_1n^d+C_2n^{log_ba}

这里C1=bdcbd−aC_1=\frac{b^dc}{b^d-a}, C2=f(1)+bdca−bdC_2=f(1)+\frac{b^dc}{a-b^d}

我们还可以推导出结论:

当a<bda

logba<logbbd=d

log_ba

当a>bda > b^d

logba>logbbd=d

log_ba>log_b{b^d}=d

同时使用已经得出的结论f(n)=C1nd+C2nlogbaf(n)=C_1n^d+C_2n^{log_ba},可以完成证明

  1. O(nd)O(n^d) a<bda

  2. O(nlogba)O(n^{log_ba}) a>bda>b^d

至此,主定理的证明全部完成。

离散数学及其应用学习笔记——主定理(Master Theorem)的证明相关推荐

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

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

  2. 主定理(master theorem)学习小记

    前言 这是分析复杂度的一个玩意儿,东西不多,原本只要死记一下就好了,但是考虑到我不太好的记忆力,所以还是解析一遍比较好 正文 主定理是用来分析T(n)=aT(nb)+f(n)T(n)=aT(\frac ...

  3. 主定理 Master Theorem

    分治法主定理 主定理的证明 假设有递归式: T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn​)+f(n) 证明: T(n)=aT(n/b ...

  4. 主定理(Master Theorem)

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

  5. 泰斗破环神学习笔记——主界面开发

    泰斗破环神学习笔记--主界面开发 主界面主要就是,角色状态面板.角色信息面板.金币与钻石数额面板 文章目录 泰斗破环神学习笔记--主界面开发 前言 一.委托(delegate) 二.事件(Event) ...

  6. MySQL学习笔记-主键索引和二级索引

    文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...

  7. 【Bandit Algorithms学习笔记】UCB算法的理论证明

    文章目录 前言 算法优势 算法原理 UCB公式 UCB算法流程 相关定理及证明 定理7.1 证明 定理7.2 证明 总结 参考资料 前言 笔者毕设研究的是Bandit问题,因此最近在学习相关的内容,想 ...

  8. 『Discrete Mathematics and Its Applications』离散数学及其应用学习笔记

    教材是Discrete Mathematics and Its Applications 7th,做了一些简单的翻译和简单的笔记. 1. The Foundations: Logic and Proo ...

  9. 《MySQL实战45讲》实践篇 24-29 学习笔记 (主备篇)

    图片来自于极客时间,如有版权问题,请联系我删除. 24 | MySQL是怎么保证主备一致的? 主备切换流程如下: 建议把节点 B(也就是备库)设置成只读(readonly)模式. 1.有时候一些运营类 ...

最新文章

  1. very_confusing
  2. android9怎样适配nfc,android – 如何使用NFC动作
  3. Java分布式篇5——FastDFS
  4. JavaScript的三大高阶函数
  5. 芬兰诺基亚获得三个欧洲市场的5G订单
  6. [OpenCV学习]1、环境搭建
  7. 对字符串进行折半查找c语言,C语言:编写折半查找函数
  8. 剑指offer——面试题42-2:翻转单词顺序
  9. mysql实训报告_MySQL实验报告
  10. Prime Path素数筛与BFS动态规划
  11. STM32的ucgui移植
  12. J2EE框架DDoS漏洞预警公告
  13. 3串锂电池充电保护板设计
  14. android 5.1 屏蔽MENU键 返回键唤醒系统
  15. java StringBuilder用法,用逗号拼接字符串 zhaoqian,sunli,zhouwu
  16. sasl java_SASL协议java实现
  17. Harbor docker
  18. Python如何读取STL文件,生成STL文件预览图(缩略图)
  19. 我对响应式编程中Mono和Flux的理解
  20. linux中文输入法 2017,ubuntu 16.04 下安装并切换搜狗中文输入法

热门文章

  1. C语言的fclose()函数
  2. MATERIALISE_MAGICS_TOOLING_EXPERT_V2.1.1-LND
  3. 修复office 2007或2010安装程序找不到Proplas.ww/Proplsww.cab
  4. 辣鸡百度云PC端密码输入老是错误的解决办法(即使你输入的是对的)
  5. web仿微信支付界面,自定义模拟键盘
  6. MT2503芯片处理器平台简介
  7. 通信原理 简易数字基带信号系统仿真设计的matlab实现(带眼图)
  8. 深度学习数据标注工具
  9. FPGA图像处理_查找表的使用(正弦函数的实现)(含源码)
  10. 电子产品21个权威认证