编程分治递归典型问题求解.pptxVIP

  1. 1、本文档共13页,可阅读全部内容。
  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文档。上传文档
查看更多

递归解决问题的关键找出递推公式2)找到递归终止条件注意事项:由于函数的局部变量是存在栈上的,如果有体积大的局部变量,比如数组,而递归层次又可能很深的情况下,也许会导致栈溢出,因此可以考虑使用全局数组或动态分配数组

汉诺塔问题ABCCC以C柱为中转,将盘从A柱移动到B柱上,一次只能移动一个盘,而且大盘不能压在小盘上面

Pleaseinputdiscnumber:3Thesolutionis:A-BA-CB-CA-BC-AC-BA-B汉诺塔问题

汉诺塔问题

将n个盘子从a柱移动到b柱,用c柱做中转,可以分以下3步实现:1) 先将n-1个盘子,以b为中转,从a柱移动到c柱,2) 将一个盘子从a移动到b将c柱上的n-1个盘子,以a为中转,移动到b柱终止条件?ABCCCn==1时,直接移动盘子即可,不用递归

#includestdio.h//将n个盘子从a柱移动到b柱,用c柱做中转voidHanoi(intn,chara,charb,charc){ if(n==1){ printf(“%c-%c\n“,a,b); return; } //先将n-1个盘子,以b为中转,从a柱移动到c柱, Hanoi(n-1,a,c,b); //将一个盘子从a移动到b printf(“%c-%c\n“,a,b); //将c柱上的n-1个盘子,以a为中转,移动到b柱 Hanoi(n-1,c,b,a);}汉诺塔问题

main(){ intN; scanf(“%d”,N); Hanoi(N,A,B,C);}汉诺塔问题

时间复杂度?汉诺塔问题T(n)=2*T(n-1)+1T(n)=2n-1

WWW问题(记忆化)对于一个递归函数w(a,b,c)?

如果a<=0或者b<=0或者c<=0就返回1.否则?

如果a>20或者b>20或者c>20就返回w(20,20,20)否则?

如果a<b并且b<c就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)否则?

返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)?

这是个简单的递归函数,但实现起来可能会有些问题。某些a、b、c的值会使函数运行时间无法忍受。想一想?如果a,b,c的值过大,会出现什么情况?

分治法的基本步骤分治法解题的一般步骤:分解,将要解决的问题划分成若干规模较小的同类问题;求解,当子问题划分得足够小时,用较简单的方法解决;合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

intleft=1,right=100,mid,key=38;//在[left,right]范围查找目标keywhile(left=right){mid=(left+right)/2;if(mid==key){printf(“查找成功”);break;}if(keymid){left=mid+1;}else{right=mid-1;}}二分查找的实现

例题1烦恼的高考志愿根据n位学生的估分情况,分别给每位学生推荐一所学校,要求学校的预计分数线和学生的估分相差最小(可高可低,毕竟是估分),这个最小值为不满意度。求所有学生不满意度和的最小值。读入数据有三行,第一行读入两个整数m,n。m表示学校数,n表示学生数。第二行共有m个数,表示m个学校的预计录取分数。第三行有n个数,表示n个学生的估分成绩。输出数据有一行,为最小的不满度之和。

样例数据:

input:

43

513598567689

500600550output:

32

一元三次方程的解:有形如:ax^3+bx^2+cx+d=0这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。?

提示:记方程f(x)=0,若存在2个数x1和x2,且x1,f(x1)*f(x2)0,则在(x1,x2)之间一定有一个根。例题2

P1103-简单的汉诺塔P1052-深入理解汉诺塔P1100-汉诺塔P1051-新汉诺塔P1059-无穷的序列P1038-积木大赛P1104-奶牛晒衣服P1050-二进制数01串P1039-花匠相关练习先完成例题(递归)简单的汉诺塔,WWWW问

文档评论(0)

158****9376 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档