递归方程组解的渐进阶的求法——代入法

递归方程组解的渐进阶的求法——代入法

用这个办法既可估计上界也可估计下界。如前面所指出,方法的关键步骤在于预先对解答作出推测,然后用数学归纳法证明推测的正确性。

例如,我们要估计T(n)的上界,T(n)满足递归方程:

img115.gif

其中img109.gif是地板(floors)函数的记号,img113.gif表示不大于n的最大整数。

我们推测T(n)=O(nlog n),即推测存在正的常数C和自然数n0,使得当n≥n0时有:

T(n)≤Cnlog n (6.2)

事实上,取n0=22=4,并取

img76.gif

那么,当n0n≤2n0时,(6.2)成立。今归纳假设当2k-1n0n≤2kn0k≥1时,(1.1.16)成立。那么,当2kn0n≤2k+1n0时,我们有:

img114.gif

即(6.2)仍然成立,于是对所有nn0,(6.2)成立。可见我们的推测是正确的。因而得出结论:递归方程(6.1)的解的渐近阶为O(nlogn)。

这个方法的局限性在于它只适合容易推测出答案的递归方程或善于进行推测的高手。推测递归方程的正确解,没有一般的方法,得靠经验的积累和洞察力。我们在这里提三点建议:

(1) 如果一个递归方程类似于你从前见过的已知其解的方程,那么推测它有类似的解是合理的。作为例子,考虑递归方程:

img116.gif

右边项的变元中加了一个数17,使得方程看起来难于推测。但是它在形式上与(6.1)很类似。实际上,当n充分大时

img117.gifimg118.gif

相差无几。因此可以推测(6.3)与(6.1)有类似的上界T(n)=O(nlogn)。进一步,数学归纳将证明此推测是正确的。

(2)从较宽松的界开始推测,逐步逼近精确界。比如对于递归方程(6.1),要估计其解的渐近下界。由于明显地有T(n)≥n,我们可以从推测T(n)=Ω(n)开始,发现太松后,把推测的阶往上提,就可以得到T(n)=Ω(nlog n)的精确估计。

(3)作变元的替换有时会使一个末知其解的递归方程变成类似于你曾见过的已知其解的方程,从而使得只要将变换后的方程的正确解的变元作逆变换,便可得到所需要的解。例如考虑递归方程:

img119.gif

看起来很复杂,因为右端变元中带根号。但是,如果作变元替换m=logn,即令n=2m,将其代入(6.4),则(6.4)变成:

img99.gif

m限制在正偶数集上,则(6.5)又可改写为:

T(2m)=2T(2m/2)+m

若令S(m)=T(2m),则S(m)满足的递归方程:

S(m)=2S(m/2)+m

与(6.1)类似,因而有:

S(m)=O(m1og m),

进而得到T(n)=T(2m)=S(m)=O(m1ogm)=O(lognloglogn) (6.6)

上面的论证只能表明:当(充分大的)n是2的正偶次幂或换句话说是4的正整数次幂时(6.6)才成立。进一步的分析表明(6.6)对所有充分大的正整数n都成立,从而,递归方程(6.4)解的渐近阶得到估计。

在使用代入法时,有三点要提醒:

(1)记号O不能滥用。比如,在估计(6.1)解的上界时,有人可能会推测T(n)=O(n),即对于充分大的n,有T(n)≤Cn ,其中C是确定的正的常数。他进一步运用数学归纳法,推出:

img100.gif

从而认为推测T(n)=O(n)是正确的。实际上,这个推测是错误的,原因是他滥用了记号O ,错误地把(C+l)nCn等同起来。

(2)当对递归方程解的渐近阶的推测无可非议,但用数学归纳法去论证又通不过时,不妨在原有推测的基础上减去一个低阶项再试试。作为一个例子,考虑递归方程

img101.gif

其中img102.gif是天花板(floors)函数的记号。我们推测解的渐近上界为O(n)。我们要设法证明对于适当选择的正常数C和自然数n0,当nn0时有T(n)≤Cn。把我们的推测代入递归方程,得到:

img103.gif

我们不能由此推断T(n)≤Cn,归纳法碰到障碍。原因在于(6.8)的右端比Cn多出一个低阶常量。为了抵消这一低阶量,我们可在原推测中减去一个待定的低阶量b,即修改原来的推测为T(n)≤Cn-b 。现在将它代人(6.7),得到:

img104.gif

只要b≥1,新的推测在归纳法中将得到通过。

(3)因为我们要估计的是递归方程解的渐近阶,所以不必要求所作的推测对递归方程的初始条件(如T(0)、T(1))成立,而只要对T(n)成立,其中n充分大。比如,我们推测(6.1)的解T(n)≤Cnlogn,而且已被证明是正确的,但是当n=l时,这个推测却不成立,因为(Cnlogn)|n=1=0而T(l)>0。

转载于:https://www.cnblogs.com/tongzhiyong/archive/2007/04/08/704887.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载】C# 理解泛型

术语表 generics:泛型type-safe:类型安全collection: 集合compiler:编译器run time:程序运行时object: 对象.NET library:.Net类库value type: 值类型box: 装箱unbox: 拆箱implicity: 隐式explicity: 显式linked list:…

javascript 作用_JavaScript承诺如何从内到外真正发挥作用

javascript 作用One of the most important questions I faced in interviews was how promises are implemented. Since async/await is becoming more popular, you need to understand promises.我在采访中面临的最重要的问题之一是如何实现承诺。 由于异步/等待变得越来越流…

linux 文件理解,对linux中文件系统的理解

首先在linux系统当中一个可被挂在的数据为一个文件系统1.在安装linux过程中我们要进行磁盘分区,可以分根目录/,‘/home‘,‘/boot’,swap等等这些分区,每一个分区(’/(根目录)‘,’/home‘...)就是一个文件系统。2.文件系统分配完…

编译原理—语法分析器(Java)

递归下降语法分析 1. 语法成分说明 <语句块> :: begin<语句串> end <语句串> :: <语句>{&#xff1b;<语句>} <语句> :: <赋值语句> | <循环语句> | <条件语句> <关系运算符> :: < | < | > | > | |…

老笔记整理四:字符串的完美度

今天在宠果网上发现一道题目&#xff0c;求一个字符串的完美度http://hero.pongo.cn/home/index觉得这道题很有趣就挑战了一下&#xff0c;结果没有在规定的1小时里面写完&#xff08;笑&#xff09;&#xff0c;多花了10分钟终于做出来了。题目是这样的&#xff1a;我们要给每…

nlp构建_使用NLP构建自杀性推文分类器

nlp构建Over the years, suicide has been one of the major causes of death worldwide, According to Wikipedia, Suicide resulted in 828,000 global deaths in 2015, an increase from 712,000 deaths in 1990. This makes suicide the 10th leading cause of death world…

域名跳转

案例&#xff1a;当访问lsx.com网站&#xff0c;是我最早论坛的域名。回车之后会自动跳转到lshx.com。 为什么药lsx跳转到lshx.com呢&#xff1f; 为了统一品牌。建议换成了lshx.com。所有之前的lsx.com就不要用了&#xff0c;就让它跳转到lshx.com。是因为之前lsx.com上有很多…

Elastic Stack 安装

Elastic Stack 是一套支持数据采集、存储、分析、并可视化全面的分析工具&#xff0c;简称 ELK&#xff08;Elasticsearch&#xff0c;Logstash&#xff0c;Kibana&#xff09;的缩写。 安装Elastic Stack 时&#xff0c;必须相关组件使用相同的版本&#xff0c;例如&#xff1…

区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望

区块链去中心化分布式by Arthur Camara通过亚瑟卡马拉(Arthur Camara) 为什么渐进式去中心化是区块链的最大希望 (Why Progressive Decentralization is blockchain’s best hope) 不变性是区块链的最大优势和最大障碍。 逐步分权可能是答案。 (Immutability is blockchain’s…

编译原理—语义分析(Java)

递归下降语法制导翻译 实现含多条简单赋值语句的简化语言的语义分析和中间代码生成。 测试样例 begin a:2; b:4; c:c-1; area:3.14*a*a; s:2*3.1416*r*(hr); end #词法分析 public class analyzer {public static List<String> llistnew ArrayList<>();static …

linux问题总结

linux问题总结 编写后台进程的管理脚本&#xff0c;使用service deamon-name stop的时候&#xff0c;出现如下提示&#xff1a;/sbin/service: line 66: 23299 Terminated env -i LANG"$LANG" PATH"$PATH" TERM"$TERM" "${SERVICEDIR}/${SE…

linux vi行尾总是显示颜色,【转载】Linux 下使用 vi 没有颜色的解决办法

vi 是没有颜色的&#xff0c;vim 是有颜色的。我们可以通过 rpm -qa |grep vim 看看系统中是否安装了下面 3 个 rpm 包&#xff0c;如果有就是安装了 vim 。[rootBetty ~]# rpm -qa |grep vimvim-minimal-7.0.109-7.el5vim-enhanced-7.0.109-7.el5vim-common-7.0.109-7.el5如果…

时间序列分析 lstm_LSTM —时间序列分析

时间序列分析 lstmNeural networks can be a hard concept to wrap your head around. I think this is mostly due to the fact that they can be used for so many different things such as classification, identification or just simply regression.神经网络可能是一个难…

关于计算圆周率PI的经典程序

短短几行代码&#xff0c;却也可圈可点。如把变量s放在PI表达式中&#xff0c;还有正负值的处理&#xff0c;都堪称经典。尤其是处处考虑执行效率的思想令人敬佩。 /* pi/41-1/31/5-1/71/9-…… */ #include <stdio.h> int main(){ int s1; float pi0.,n1.,…

华为产品技术学习笔记之路由原理(一)

路由器&#xff1a;路由器是一种典型的网络连接设备&#xff0c;用来进行路由选择和报文转发。路由器与它直接相连的网络的跳数为0&#xff0c;通过一台路由器可达的网络的跳数为1.路由协议&#xff1a;路由器之间维护路由表的规则&#xff0c;用以发现路由&#xff0c;生成路由…

Linux网络配置:设置IP地址、网关DNS、主机名

查看网络信息 1、ifconfig eth0 2、ifconfig -a 3、ip add 设置主机名需改配置文件&#xff1a; /etc/hosts /etc/sysconfig/network vim /etc/sysconfig/network NETWORKINGyes NETWORKING_IPV6no HOSTNAMEwendyhost Linux配置网络 方法一&#xff1a; 1、使用setup命令进入如…

编译原理—小型(简化)高级语言分析器前端(Java)

实现一个一遍扫描的编译前端&#xff0c;将简化高级语言的部分语法成分&#xff08;含赋值语句、分支语句、循环语句等&#xff09;翻译成四元式&#xff08;或三地址代码&#xff09;&#xff0c;还要求有合理的语法出错报错和错误恢复功能。 测试样例 beginwhile a<b do…

linux boot菜单列表,Bootstrap 下拉菜单(Dropdowns)简介

Bootstrap 下拉菜单是可切换的&#xff0c;是以列表格式显示链接的上下文菜单。这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现。如需使用下拉菜单&#xff0c;只需要在 class .dropdown 内加上下拉菜单即可。下面的实例演示了基本的下拉菜单&#xff1a;实例主…

dynamodb管理ttl_如何使用DynamoDB TTL和Lambda安排临时任务

dynamodb管理ttlby Yan Cui崔燕 如何使用DynamoDB TTL和Lambda安排临时任务 (How to schedule ad-hoc tasks with DynamoDB TTL and Lambda) CloudWatch Events let you easily create cron jobs with Lambda. However, it’s not designed for running lots of ad-hoc tasks,…

5g创业的构想_数据科学项目的五个具体构想

5g创业的构想Do you want to enter the data science world? Congratulations! That’s (still) the right choice.您想进入数据科学世界吗&#xff1f; 恭喜你&#xff01; 那(仍然)是正确的选择。 The market currently gets tougher. So, you must be mentally prepared f…