第四章算法策略1.pptVIP

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

else//不止两个数{mid=(i+j)/2;

maxmin(i,mid,lmax,lmin)//一分为二,分两组寻找大小值?maxmin(mid+1,j,rmax,rmin);

if(lmaxrmax)//合并—获取最大值fmax=lmax;elsefmax=rmax;if(lminrmin)//合并—获取最小值fmin=rmin;elsefmin=lmin;

}第61页,共88页,星期日,2025年,2月5日实例:A=(22,13,-5,-8,15,60,17,31,47)第62页,共88页,星期日,2025年,2月5日算法分析1:以上算法的尝试范围是A:3——9,B:0——9,C:0——9。共尝试700次,每次,不是一个好的算法。算法设计2:将算式变形为除法:DDDDDD/A=ABCAB。此时枚举范围:A:3——9D:1——9,共尝试7*9=63次。约束条件:测试商的万位、十位与除数是否相同,千位与个位是否相同,都相同时为解。第29页,共88页,星期日,2025年,2月5日main(){intA,B,C,D,E,F;for(A=3;A=9;A++)for(D=1;D=9;D++){E=D*100000+D*10000+D*1000+D*100+D*10+D;if(EmodA=0)//整除是条件F=E\A;if(F\10000=Aand(Fmod100)\10=A)//万位与十位是否等于Aif(F\1000==Fmod10)//千位与个位数字是否相等print(F,”*”,A,”=”,E);}}第30页,共88页,星期日,2025年,2月5日蛮力法的表现形式非常多,如第三章3.2.4例题、3.2.5例1及本章下一节4.3.3例4的算法1等。本节将通过蛮力策略,用算法模拟问题中所描述的全部过程和全部状态,来找出问题的解,并与经过数学建模后的算法进行效率上的比较。4.2.2其它范例第31页,共88页,星期日,2025年,2月5日【例3】狱吏问题某国王对囚犯进行大赦,让一狱吏n次通过一排锁着的n间牢房,每通过一次,按所定规则转动n间牢房中的某些门锁,每转动一次,原来锁着的被打开,原来打开的被锁上;通过n次后,门锁开着的,牢房中的犯人放出,否则犯人不得获释。转动门锁的规则是这样的,第一次通过牢房,要转动每一把门锁,即把全部锁打开;第二次通过牢房时,从第二间开始转动,每隔一间转动一次;第k次通过牢房,从第k间开始转动,每隔k-1间转动一次;问通过n次后,哪些牢房的锁仍然是打开的?第32页,共88页,星期日,2025年,2月5日算法设计1:1)用n个空间的一维数组a[n],每个元素记录一个锁的状态,1为被锁上,0为被打开。2)用数学运算方便模拟开关锁的技巧,对i号锁的一次开关锁可以转化为算术运算:a[i]=1-a[i]。3)第一次转动的是1,2,3,……,n号牢房;第二次转动的是2,4,6,……号牢房;第三次转动的是3,6,9,……号牢房;第i次转动的是i,2i,3i,4i,……号牢房,是起点为i,公差为i的等差数列。4)用蛮力法通过循环模拟狱吏的开关过程,最后当第i号牢房对应的数组元素a[i]为0时,该牢房的囚犯得到大赦。第33页,共88页,星期日,2025年,2月5日main1(){int*a,i,j,n;input(n);a=calloc(n+1,sizeof(int));for(i=1;i=n;i++)a[i]=1;for(i=1;i=n;i++)for(j=i;j=n;j=j+i)a[i]=1-a[i];for(i=1;i=n;i++)if(a[i]=0)print(i,”isfree.”);}算法分析:以一次开关锁计算,算法的时间复杂度为n(1+1/2+1/3+……+1/n)=O(nlogn)。第34页,共88页,星期日,2025年,2月5日问题分析:另一种理解:第一次转动的是编号为1的倍数的牢房;第二次转动的是编号为2的倍数的牢房;第三次转动的是编号为3的倍数的牢房;……

文档评论(0)

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

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档