算法与结构的学习进程.docVIP

  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文档。上传文档
查看更多
算法与结构的学习进程

1.1递推算法 递推算法使用步步为营的方法,不断利用已有信息推导新的东西。 -顺推法:是从已知条件才出发,逐步推算出要解决问题的方法。例如:斐波拉契数列 -逆推法:是从已知结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。 顺推示例:兔子的繁殖过程 从表格中推出3月后每个月的兔子数量是前两个月的数量之和。 #include stdio.h #define NUM 13 int main() { int I; long fib[NUM] = (1,1);//数组前两位赋值为1; for((i=2;iNUM;i++) { fib[i] = fib[i-1]+fib[i-2]; } for(i=0;inum;i++) { printf(“%d兔子的总数:%d\n”,i,fib[i]); } getch(); return 0; } 逆推实例:银行存款 大学四年每月要能取1000,到48月刚好取完,求每月的存款数目 #include stdio.h #define FETCH 1000 #define RATE 0.017 int main() { double corpus[49]; int i; corpus[48]=(double)FETCH; for(i=47;i0;i--) { corpus[i]=(corpus[i+1]+FETCH)/(1+RATE/12); } for(i=48;i0;i--) { printf(第%d月末本利合计:%.2f\n,i,corpus[i]); } getch(); return 0; } 1.2枚举(穷举)算法 枚举法的本质就是从所有候选答案中取搜索正确的解,使用该算法需要满足两个条件: 可预先确定候选的数量; 候选答案的范围在求解之前必须由一个确定的集合。 实例:填数游戏 1 2 3 4 5 算 X 1 算法描述题 ————_ 5 5 5 5 5 5 算法描述题 x 算 ——————— 题题题题题 #includestdio.h int main() { int i1,i2,i3,i4,i5; long multi,result; for(i1=1;i1=9;i1++) { for(i2=0;i2=9;i2++) { for(i3=0;i3=9;i3++) { for(i4=0;i4=9;i4++) { for(i5=0;i5=9;i5++) { multi=i1*10000+i2*1000+i3*100+i4*10+i5; result=i5*100000+i5*10000+i5*1000+i5*100+i5*10+i5; if(multi*i1==result) { printf(\n%5d%2d%2d%2d%2d\n,i1,i2,i3,i4,i5); printf(X%5d\n,i1); printf(____________\n); printf(%3d%2d%2d%2d%2d\n,i5,i5,i5,i5,i5); } } } } } } getch(); return 0; } 结果 1.3递归算法 是一种直接或者间接地调用自身的算法。 程序示例:数制转换 #include stdio.h #include string.h void convto(char *s,int n,int b) { char bit[]={“0123456789ABCDEF”}; int len; if(n==0) { strcpy(s,””); return; //返回到上次未调用函数的下一行 } convto(s,n/b,b); len=strlen(s); s[len] = bit[n%b]; s[len+1] = ‘\0’; } void mian() { char s[80]; int i,base,old; } 1.4分治算法 使用分治法按照一下步骤: 分解:将要求解的问题划分成若干规模较小的同类问题; 求解:当子问题划分的足够小时,用简单的方法解决; 合并:将子问题的解逐层合并,即可构成最终的解 1.5贪婪算法 基本思路:从问题的

文档评论(0)

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

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

1亿VIP精品文档

相关文档