1、算法设计课程设计报告算法设计与分析课程设计报告题 目: 循环赛日程表 院 (系): 信息科学与工程学院 专业班级: 软工 学生姓名: 学 号: 指导教师: 2013年12月30 日至2014年1月10日华中科技大学武昌分校制 算法设计与分析 课程设计任务书一、设计题目循环赛日程表问题描述:设有n=2k个运动员要进行网球循环赛。现要设计一个满足一下要求的比赛日程表。(1)每个选手必须与其他n-1个选手各赛一次。(2)每个选手一天只能参赛一次。(3)循环赛在n-1天内结束。请按此要求将比赛日程表设计成有n行和n-1列的一个表格。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手,其中1in
2、,1jn-1。例如:当n=4时,其比赛日程表如下: 1 2 3 (天)2341434123211 2 3 4当n=8时,其比赛日程表如下: 1 2 3 4 5 6 7 (天)2345678143658741278563218766781234587214385634127654321 1 2 3 4 5 6 7 8二、设计主要内容具体要求如下:(1)使用分治策略递归算法实现。(2)使用分治策略非递归算法实现。(3)使用递推算法实现。(4)对各种算法的时间复杂度进行分析和比较。(5)设计出相应的菜单,通过菜单的选择实现各个功能三、原始资料无四、要求的设计成果(1) 实现该系统功能的程序代码(2)
3、 撰写符合规范要求的课程设计报告五、进程安排序号课程设计内容学时分配备注1选题与搜集资料1天2分析与设计1天3模块实现4天4系统调试与测试2天5撰写课程设计报告2天合计10天六、主要参考资料1吕国英算法设计与分析第2版北京:清华大学出版社,20112 王晓东算法设计与分析 北京,清华大学出版社,20093 徐士良计算机常用算法第2版北京,清华大学出版社出版,2010指导教师(签名): 20 年 月 日1. 常用算法 11 常用算法1.1分治算法 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。当我们求
4、解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。分治法解题一般步骤:(1)分解,将要解决的问题划分成若干规模较小的同类问题;(2)求解,当子问题划分得足够小时,用较简单的方法解决;(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。1.2递推算法给定一个数的序列H0,H1,Hn,若存在整数n0
5、,使当nn0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hi(0in)联系起来,这样的式子就叫做递推关系。递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。递推算法分为顺推和逆推两种。所谓顺推法是从已知条件出发,逐步推算出要解决的问题的方法叫顺推。所谓逆推法从已知问题的结果出发,用迭代表达式逐步推算出问题的开始的条件,即顺推法的逆过程,称为逆推。2 问题分析及算法设计2.1分治策略递归算法的设计int a5050;fun1() int n=1.k;input(k);for(i=1;i=k;i=i+1) n=n*2; digui(1,n,n);f
6、or(i=1;i=k;i=i+1)print(换行);for(j=1;jn/2;t-) for(m=i;m=i-1+n/2;m=m+1) amt=am+n/2t-n/2; for(m=i+n/2;m=i-1+n;m=m+1) amt=am-n/2t-n/2;2.2 分治策略非递归算法的设计fun2() int n=1,e,m; int i,j,t,h,k; int w,y;input(k) for(i=1;i=k;i=i+1) n=n*2; for(j=1;j=n;j=j+1) aj1=j; m=n; for(n=2;ne;t=t-1) for(i=1;im;i=i+n) for(h=i;h=
7、i-1+e;h=h+1) aht=ah+et-e; for(h=i+e;h=i-1+n;h=h+1) aht=ah-et-e; for(i=1;i=m;i=i+1) print(n); for(j=1;j=m;j=j+1) print(aij); print(n);2.3 递推策略算法的设计fun3() int n=2,e=1,i,j,k,k0; int w,y; a11=1; input(k); for(k0=1;k0=k;k0=k0+1) for(i=e+1;i=n;i=i+1) for(j=1;j=n;j=j+1) aij=ai-ej+e; for(j=e+1;j=n;j=j+1) fo
8、r(i=1;i=e;i=i+1) aij=aij-e+e; for(j=e+1;j=n;j=j+1) for(i=e+1;i=n;i=i+1) aij=aij-e-e; e=n; n=n*2; n=n/2; for(i=1;i=n;i=i+1) printf(n); for(j=1;jn/2;t-) /for(t=4;t2;t-) for(m=i;m=i-1+n/2;m+) /for(m=1;m=2;m+) amt=am+n/2t-n/2; /从右上角开始遍历a14=a32 for(m=i+n/2;m=i-1+n;m+) /for(m=3;m=4;m+) amt=am-n/2t-n/2; /向
9、右下角遍历a34=a12,a44=a22 /对角相等策略void fun1() int k,n=1,i,j; int w,y; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(i=1;i2, for(i=1;i=n;i+) / 2 1 printf(n); for(j=1;j=n;j+) printf(%4d,aij); y=clock(); printf(n); b0=y-w; printf(该算法用时%dn,y-w); printf(n); 3.2 分治策略非递归算法的实现void fun2() int n=1,e,m; int i,j,t,
10、h,k; int w,y; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(i=1;i=k;i+) n=n*2; /确定数组的边长 for(j=1;j=n;j+) aj1=j; /初始化1n m=n; for(n=2;ne;t-) for(i=1;im;i=i+n) for(h=i;h=i-1+e;h+) aht=ah+et-e; /如方法 for(h=i+e;h=i-1+n;h+) aht=ah-et-e; for(i=1;i=m;i+) printf(n); for(j=1;j=m;j+) printf(%4d,aij); y=clock()
11、; printf(n); b1=y-w; printf(%dn,y-w); printf(n); 3.3 递推策略算法的实现void fun3() int n=2,e=1,i,j,k,k0; int w,y; a11=1; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(k0=1;k0=k;k0+) for(i=e+1;i=n;i+) for(j=1;j=n;j+) aij=ai-ej+e; for(j=e+1;j=n;j+) for(i=1;i=e;i+) aij=aij-e+e; for(j=e+1;j=n;j+) for(i=e+1;i=n
12、;i+) aij=aij-e-e; e=n; n=n*2; n=n/2; for(i=1;i=n;i+) printf(n); for(j=1;j=n;j+) printf(%4d,aij); y=clock(); printf(n); b2=y-w; printf(%dn,y-w); printf(n); 4 测试和分析4.1分治策略递归算法测试4.2分治策略递归算法时间复杂度的分析理论上O(lg2n),实际上三个各不一样4.3 分治策略非递归算法测试4.4分治策略非递归算法时间复杂度的分析理论上O(lg2n),实际上三个各不一样4.5 递推策略算法测试4.6 递推策略算法时间复杂度的分析理
13、论上O(lg2n),实际上三个各不一样4.7 三种算法的比较从时间复杂度和适用的范围等方面对各种算法进行比较和说明。5 总结 经过这次的课程设计,让我受益良多,算法设计这门课程主要教会我们如何优化算法,每个算法的复杂程度都是不相同的,优化了的算法可以让程序变得简单,实用性较强,价值较高。在这次课程设计中,我遇到了很多以前没遇到的困难,我受益良多。当然,这不是我第一次做课程设计,所以我的优点在于对于课程设计上手简单。总的来说,课程设计让我将理论知识运用到了实际中解决问题,我的实力得到了提升。参考文献1. 使用教材1吕国英算法设计与分析第2版北京,清华大学出版社,20112. 教学参考资源1 王晓
14、东算法设计与分析 北京,清华大学出版社,20092 徐士良计算机常用算法(第二版)北京,清华大学出版社出版,20103 王新C语言课程设计北京:清华大学出版社,20094 严蔚敏数据结构与算法北京:清华大学出版社,2010附录#include#includeint a10001000;int b2=0;void digui(int i,int j,int n) int t,m; if(n=2) ain=j; ajn=i; ain-1=i; ajn-1=j; else digui(i,i+n/2-1,n/2); digui(i+n/2,j,n/2); for(t=n;tn/2;t-) for(m
15、=i;m=i-1+n/2;m+) amt=am+n/2t-n/2; for(m=i+n/2;m=i-1+n;m+) amt=am-n/2t-n/2; void fun1() int k,n=1,i,j; int w,y; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(i=1;i2, for(i=1;i=n;i+) / 2 1 printf(n); for(j=1;j=n;j+) printf(%4d,aij); y=clock(); printf(n); b0=y-w; printf(该算法用时%dn,y-w); printf(n);void
16、fun2() int n=1,e,m; int i,j,t,h,k; int w,y; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(i=1;i=k;i+) n=n*2; /确定数组的边长 for(j=1;j=n;j+) aj1=j; /初始化1n m=n; for(n=2;ne;t-) for(i=1;im;i=i+n) for(h=i;h=i-1+e;h+) aht=ah+et-e; /如方法 for(h=i+e;h=i-1+n;h+) aht=ah-et-e; for(i=1;i=m;i+) printf(n); for(j=1;j=m;
17、j+) printf(%4d,aij); y=clock(); printf(n); b1=y-w; printf(%dn,y-w); printf(n);void fun3() int n=2,e=1,i,j,k,k0; int w,y; a11=1; printf(请输入2的幂指数n); scanf(%d,&k); w=clock(); for(k0=1;k0=k;k0+) for(i=e+1;i=n;i+) for(j=1;j=n;j+) aij=ai-ej+e; for(j=e+1;j=n;j+) for(i=1;i=e;i+) aij=aij-e+e; for(j=e+1;j=n;j
18、+) for(i=e+1;i=n;i+) aij=aij-e-e; e=n; n=n*2; n=n/2; for(i=1;i=n;i+) printf(n); for(j=1;j=n;j+) printf(%4d,aij); y=clock(); printf(n); b2=y-w; printf(%dn,y-w); printf(n);void jiemian() printf(*欢迎使用日程表系统*n); printf( 软工1101 李杰n); printf(ttt1.二 分 递 归 方 法nn); printf(ttt2.二 分 非 递 归 方 法nn); printf(ttt3.递
19、推 实 现 方 法nn); printf(ttt4.比 较 三 个 方 法 用 时nn); printf(ttt0.退 出 系 统nn);void main() int s;l1:jiemian(); scanf(%d,&s); switch(s) case 0: printf(tt退出成功,欢迎下次使用n); break; case 1: fun1();goto l1; case 2: fun2();goto l1; case 3: fun3();goto l1; case 4: if(b0=0) printf(tt第一个算法还未运行,无时间统计n); goto l2; goto l1; e
20、lse printf(tt第一个算法用时%dn,b0);l2:if(b1=0) printf(tt第二个算法还未运行,无时间统计n); goto l3; goto l1; else printf(tt第二个算法用时%dn,b1);l3:if(b2=0) printf(tt第三个算法还未运行,无时间统计n); goto l1; else printf(tt第三个算法用时%dn,b2); goto l1; default: printf(tt输入不合法,请重新输入n);goto l1; (要求:一级标题,黑体,三号,居中;二级标题,黑体,小三号;三级标题,黑体,四号;正文,宋体,小四号,1.25倍行距)课程设计成绩评定表成绩评定项 目比例得 分平时成绩(百分制记分)30%业务考核成绩(百分制记分)70%总评成绩(百分制记分)100%评定等级优 良 中 及格 不及格指导教师(签名):20 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1