算法设计实验报告.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计实验报告   《算法设计》课程报告   课题名称:算法设计与实现   课题负责人名:张樱紫   同组成员名单:无   指导教师:左劼   评阅成绩:   评阅意见:   提交报告时间:XX年12月23日   算法设计与实现课程设计   软件工程专业   学生张樱紫指导老师左劼   [摘要]课程设计报告实现了算法设计课程中5个的主要算法,包括分治法,动态规划,贪心算法,回溯法以及分支限界法。每种算法用一个问题描述应用解决,包括源程序代码及执行结果还有算法复杂度以及问题描述,分析、证明,测试数据和运行结果。   关键词:算法设计分治法动态规划贪心算法回溯法分支限界法   对计算机科学来说,算法的概念至关重要。通俗的讲,算法是指解决问题的一种方法或一个过程。算法实由若干条指令组成的有穷序列,且满足确定性,有限性,输入满足:有零个或多个由外部提供的量作为算法的输入。输出满足:算法产生至少一个量作为输入。通过在课程中,学习掌握了一些主要算法并了解了一些新型算法。   本课程设计报告中,主要实现了五种算法,包括分治法,包括分治法,动态规划,贪心算法,回溯法以及分支限界法。下面是每种算法的详细设计实现:   一、分治法:   问题描述   赛程问题:有N个运动员进行单循环赛,即每个运动员要和所有其他运动员进行一次比赛。   ?试用分治法为这N个运动员安排比赛日程。   ?要求每个运动员每天只进行一场比赛,   ?n是偶数时循环进行n-1天,n是奇数时循环进行n天。   ?将运动员从1到N编号。   分析、证明   整个赛程,当N为偶数的时候,N-1天能够结束,   而当N为奇数的时候,只能在至少N天结束,、   因为,由已知“每个运动员要和所有其他运动员进行一次比赛”则每个运动员总共进行N-1场,又由每一场有两个运动员参加,N个运动员就进行了M=[N*]/2,又因为已知“要求每个运动员每天只进行一场比赛”则没人每天只能进行1场,所有运动员为N,每一场由两个运动员参加,当N为偶数的时候,每天只能出现的场数为N/2场,推出至少的天数为M/(N/2)=N-1场。当N为奇数的时候,由于每个运动员每天只能进行一场,所以每天能进行的总场数最多只能为/2场,则整个赛程的天数最少需要天数M/[(N-1)/2]=N天   总体思路:按分治策略,将所有分为两半,n个选手可以通过n/2个选手设计的比赛日程表来决定。递归地用一分为二的略对选手进行分割,直到只剩下两个选手。   对于N为奇数的情况可以虚拟多一个选手,使其编程N+1个选手的日程表,最然后忽略虚拟运动员参与的比赛。对于分割时候N/2的情况也做特殊处理,前n/2轮比赛空选手与下一个未参赛的选手进行比赛   代码实现   voidmatch(inta[][N],intk)   {   intn=1,m=1;   for(inti=1;i   usingnamespacestd;   intmain()   {   inta,b,c;intq(intn,intm);coutab;   c=q(a,b);   cout   usingnamespacestd;   inttile=0;//全局变量,表示特殊格的号   intboard[1000][1000];   intmain()   {   inttr,tc,dr,dc,size;inttile=0;//全局变量,表示特殊格的号voidchessBoard(inttr,inttc,intdr,intdc,intsize);couttrtcdrdcsize;cout   intstr[][40];//存放结果intn;   intf(intx)//计算2^x的函数{   inty=1;   for(inti=1;i ))for(intj=0;j#include   intstr[][40];//存放结果intn;   intf(intx)//计算2^x的函数{   ints=1;   for(inti=1;i   intmain(){   intmax,min;//存放最大值和最小值inti,n,t;   inta[100];//存放数组scanf(%d,n);for(i=0;ia[n-i-1])   {//k和n-k-1位置的两个数进行比较,小前大后t=a[i];   次比较的要求。

文档评论(0)

sanshengyuan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档