队列和广搜.pptVIP

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
队列和广搜

例4. 程序复杂度 给出一段程序,计算它的时间复杂度。这段程序只有三种语句: –OP x:执行一条时间耗费为x 的指令。这里的x 为不超过100 的正整数。 –LOOP x:与} 配套,中间的语句循环x 次,其中x 可以为规模n,也可以是不超过100 的正整数。 end:与LOOP 配套,循环终止。 注意:OP 语句的参数不能为变量n,而LOOP 语句的参数可以为变量n,但不允许有其他名字的变量。这样,整个程序的时间复杂度应为n 的多项式。你的任务就是计算并显示出这个多项式。 输出仅包含一行,即时间复杂度的多项式。这个多项式应该按通常的方式显示处理,即不要输出0n 这样的项,n项也不要输出为n^1,等等。 使用栈计算表达式 由于Loop与最近的NED配对,因此进入循环(Loop)相当于入栈;退出循环(end)相当于出栈 分析没有变量n只有常数的简单情况 基于栈的扫描算法: –LOOP y和OP x: 把语句入栈 –end:不断从栈里弹出语句,直到弹出LOOP y。弹出op x过程中累加操作数x,最后乘以循环次数y,把OP x*y压入栈中,相当于用一条OP等效一个LOOP 直接推广栈扫描算法 –栈里的每个操作数不是数,而是多项式 –多项式加法,多项式与整数的乘积 问题: –多项式如何表示 –多项式操作的时间复杂度是怎样的? “把括号展开” 先想办法去掉所有LOOP/end 借助当前乘数确定这次OP的最终效果 基本算法 设 m2为当前n的次幂;m1为乘数,即当前项nm2的系数;max为n的最高次幂。初始时m1=1,m2=0,max=0。 a为存储循环次数的栈,栈顶指针为p。若循环次数为n的话,a[p]=0; ans为结果表达式,其中ans[i]为ni的系数。 主循环:一条一条语句处理 –遇到LOP (n)x命令: ⑴LOP n: 0入栈a;m2←m2+1,并调整max ⑵LOP x: x入栈a;m1←m1*x –遇到OP x命令: ans[m2]←ans[m2]+m1*x; {结果使nm2的系数增加m1*x} –遇到end命令: 若a的栈顶元素为0,则m2←m2-1;否则m1←m1 div a[p]。a出栈操作; 数据结构 var a,ans:array[0..10000]of longint; /*a为存储循环次数的栈,栈顶指针为p。若循环次数为n的话,a[p]=0,n的次幂为m2;ans为结果表达式,其中ans[i]为ni的系数*/ m1,m2,p,max,x,i:longint; /*m1为乘数,m2为当前n的次幂,max为n的最高次幂*/ s:string; /*命令行*/ 注意输入格式 1、用字符串输入一行命令,命令串的首字符可辨别出其类型(‘L’、‘O’、‘E’)。删除命令字后处理操作数; 2、一条命令中的命令字与操作数间用空格隔开;同行的命令与命令之间用空格隔开,最后一条命令尾没有空格; 3、逐行处理命令。读入当前行命令后,处理一条命令即删除该命令子串,直至串空为止。 处理当前行命令s while s do/*由左而由处理当前命令*/ { while (length(s)0)and(s[1]= ) do delete(s,1,1); /*略去命令前的无用空格*/ case s[1] of /*分析命令类型*/ O: /*处理OP命令*/ { i ← pos( ,s);delete(s,1,i); /*删除’OP’*/ i ← pos( ,s); /*将时间耗费串转换为整数x*/ if i=0 /* OP命令是否为当前行的最后一条命令*/ then { val(s,x,ok);s ← ‘ } else { val(copy(s,1,i-1),x,ok);delete(s,1,i);}; ans[m2] ← ans[m2]+m1*x; /*结果使nm2的系数增加m1*x*/ continue; };/*O*/ L: /*处理LOP命令*/ { i←pos(‘ ’,s);delete(

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档