替换法(代入法)求解递归式
一.原理
替换法(或者叫代入法)就是我们直接对T(n)进行猜测,然后带入原递归式中进行验证。也就是猜测一个界,然后使用数学归纳法来证明这个界是对的。
步骤{\color{Red}步骤}步骤 :
(1)猜测解的形式
(2)使用数学归纳法求出解中的常数,并证明解是正确的。
猜测要靠经验,偶尔还要靠创造力{\color{Blue}猜测要靠经验,偶尔还要靠创造力}猜测要靠经验,偶尔还要靠创造力
二.举例
现在有递归式如下:
我们首先对其进行猜测(这个最终结果算的好不好就看你猜的准不准了,有点玄学):
T(n)=θ(nlogn)T(n) = \theta(nlogn) T(n)=θ(nlogn)
然后进行求解(在这里因为该式有两个区间,分别有不同的取值,所以我们使用数学归纳法):
当 n = 3 时:有 c1∗3log3≤1≤c2∗3log3c_{1}*3log3≤1≤c_{2}*3log3 c1∗3log3≤1≤c2∗3log3解得 0<c1≤13log3,c2≥13log3{\color{Red} 0<c_{1}\le \frac{1}{3log3},c_{2}\ge\frac{1}{3log3}} 0<c1≤3log31,c2≥3log31
当小于n时:假设命题成立
当等于n时:带入可得T(n)=T(n4)+T(3n4)+n≤c2∗n4∗logn4+c2∗3n4∗log3n4+nT(n) = T(\frac{n}{4}) + T(\frac{3n}{4}) + n \le c_{2}*\frac{n}{4}*log\frac{n}{4} + c_{2}*\frac{3n}{4}*log\frac{3n}{4} + n T(n)=T(4n)+T(43n)+n≤c2∗4n∗log4n+c2∗43n∗log43n+n
对等式右边化简:(c2∗n4∗(logn−log4))+(c2∗3n4∗(logn−log43))+n(c_{2}*\frac{n}{4}*(logn-log4))+(c_{2}*\frac{3n}{4}*(logn-log\frac{4}{3}))+n(c2∗4n∗(logn−log4))+(c2∗43n∗(logn−log34))+n
展开合并得:c2nlogn−(c2n(log4−34log3))+nc_{2}nlogn-(c_{2}n(log4-\frac{3}{4}log3))+n c2nlogn−(c2n(log4−43log3))+n
将后面的n提取出来可得:c2nlogn−(c2(log4−34log3)−1)nc_{2}nlogn-(c_{2}(log4-\frac{3}{4}log3)-1)n c2nlogn−(c2(log4−43log3)−1)n
根据定义,需要使等式右边即上式 ≤ c2nlogn
所以只需要让 (c2(log4−34log3)−1)n≥0(c_{2}(log4-\frac{3}{4}log3)-1)n \ge 0(c2(log4−43log3)−1)n≥0
解得:c2≥1log4−34log3>0{\color{Red} c_{2} \ge \frac{1}{log4-\frac{3}{4}log3} >0} c2≥log4−43log31>0
若想使 T(n)≤c2nlognT(n)≤c_{2}nlognT(n)≤c2nlogn
只需取他们中较大的值:c2≥max(1log4−34log3,13log3){\color{Red} c_{2} \ge max( \frac{1}{log4-\frac{3}{4}log3},\frac{1}{3log3} )} c2≥max(log4−43log31,3log31)
此时不等式右边的约束条件的参数c2就取到了,同理我们可以解得不等式右边的约束变量c1的取值:
0<c1≤min(1log4−34log3,13log3){\color{Red} 0<c_{1}\le min(\frac{1}{log4-\frac{3}{4}log3},\frac{1}{3log3})} 0<c1≤min(log4−43log31,3log31)
得证:T(n)=θ(nlogn)T(n)=\theta(nlogn) T(n)=θ(nlogn)
替换法(代入法)求解递归式相关推荐
- 分治算法中的数学——求解递归式(代入法)
前言 在运用分治法将原问题分解成多个子问题后,通常可以得到一个关于时间复杂度的递归式,如T(n)=T(n/2)+O(1),如何求解递归式并得出该算法的时间复杂度O(f(n))就是我们要解决的问题.一般 ...
- 4.3—代入法求解递归式
对于代入法求解递归式,有以下自己的感触: 1.中间的证明过程用到了数学归纳法的思想: (1)首先证明初始条件是不是满足的,例如T(n)=O(nlgn),首先得验证当n=1的时候是不是满足条件,这里还牵 ...
- 算法导论 — 4.4 用递归树方法求解递归式
笔记 在应用代入法求解递归式时,需要事先做出一个好的猜测.然而,有时候做出好的猜测是很困难的,此时可以考虑采用递归树方法.在递归树中,每个结点表示一个单一子问题的代价.创建递归树之后,对树的每层的各子 ...
- 第四章 分治策略 4.4 用递归树方法求解递归式
4.4 用递归数方法求解递归式 一. 1. 在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用.我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次 ...
- 用递归树方法求解递归式
用递归树方法求解递归式 [备注:需要修改] 一个递归算法的递归式:T(n)=3T(n/4)+cn2T\left(n\right)=3T\left(n/4\right)+cn^2T(n)=3T(n/4) ...
- 【算法导论-主定理】用主方法求解递归式 学练结合版
问题:若某算法的计算时间表示为递推关系式:T(N)=2T(N/2)+NlogN 且 T(1)=1 则该算法的时间复杂度为( ). O(Nsqrt(N)) O(NlogN) O(N(logN)^2) O ...
- 主定理(主方法)求解递归式
1.主方法使用条件 用主方法求解递归式有条件,必须要求递归式为以下形式: 其中a>=1,b>1,f(n)渐进趋正,意为对足够大的n,f(n)是正的,即n>= n 0 n_0 n0时 ...
- 用代入法求解递归式里的”微妙细节“【算法导论P49】
当利用归纳法证明一个上界时,实际上证明一个更弱的上界可能会更难一些,因为为了证明一个更弱的上界,我们在归纳证明中也必须使用同样更弱的界. 例如: 考虑一下的递归式: T(n)=4T(n/3)+n 知道 ...
- 第四章 4.3 用代入法求解递归式
4.3-1 证明:T(n)=T(n-1)+n的解为O(n2n^2). c(n−1)2+n≤n2cn2−2cn+c+n≤n2cn2−(2c−1)n+1≤n2 c(n-1)^2+n\le n^2 \\cn ...
最新文章
- fourinone学习笔记一(上手demo)
- ThinkPHP URL模式和URL重写
- python 2: 解决python中的plot函数的图例legend不能显示中文问题
- bzoj1110: [POI2007]砝码Odw
- angular1.x todolist 实现
- 北大青鸟的java课程_北大青鸟Java课程
- Java调用webservice
- Java 将HTML转为Word
- XCode下Swift – WebView IOS demo
- android PorterDuffXfermode ,PorterDuff.Mode 使用 以及Porter-Duff规则详解
- 扩展lucas学习笔记
- 指定JDK运行Jar包
- join()方法的使用
- 句向量 Sentence Embedding
- 优化问题中什么形式有闭式解
- pdf转换器如何切换语言类型
- Springboot+poi+实现导出导入Excle表格+Vue引入echarts数据展示
- 跟牛老师一起学WEBGIS——WEBGIS基础(地图切片)
- cdo (Climate Data Operators ) 常用命令介绍:(查看文件信息、多文件合并、数据裁剪、数据插值、数据计算。。)
- 用python海龟制图画花瓣_Python绘图之(5)turtle 画一朵花
热门文章
- 微信小程序音频(录制、播放、重录)功能
- 算法系列之-互为变形词
- 阳新一中2021高考成绩查询入口,点燃激情 赢在高考 阳新一中举办2021届高三年级高考励志演讲报告会...
- 你为什么在Windows桌面右键菜单上狂点“刷新”?
- GET请求URL拼接参数
- C语言——EOF的用法——while(scanf(“%d“,num)!=EOF)
- Android学习Flutter的Widget
- ExceL文档2.上传解析Excel文档
- 记2018年苏州的第一场雪
- 【硬件】各类显示屏幕