《算法分析与设计》实验教学大纲new_第1页
《算法分析与设计》实验教学大纲new_第2页
《算法分析与设计》实验教学大纲new_第3页
《算法分析与设计》实验教学大纲new_第4页
《算法分析与设计》实验教学大纲new_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《算法分析与设计》实验教学大纲课程编号:10000284课程名称:算法分析与设计英文名称:AlgorithmAnalysisandDesign适应专业:软件工程执笔人:刘淑英实验教材(指导书):王晓东,计算机算法设计与分析,电子工业出版社,2007主要参考书目:①张铭、刘晓丹译电子工业出版社出版的《数据结构与算法分析》②徐士良主编清华大学出版社出版的《计算机常用算法》第二版③卢开澄主编清华大学出版社出版的《计算机指导引论-设计与分析》

一、实验学时总学时:48

总学分:3

实验学时:10

二、实验课的任务、性质与目的《算法设计与分析》是计算机专业的专业核心课程,其先修课程有数据结构和至少一门高级语言。算法设计与分析课程将覆盖计算机软件实现中的大部分算法,并具有一定的深度和广度,使学生对计算机常用算法有一个全盘的了解;通过此课的学习,学生应该具有针对所给的问题设计和实现高效算法的能力。通过上机实验,将使学生熟悉、掌握课堂教学中所学的大部分算法。同时,上机实习是对学生在软件设计方面的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧等,以培养良好的编程风格和科学作风。通过理论联系实际,以最终提高学生动手操作的能力以及分析问题的能力。本课程的主要目的是研究计算机领域及其它有关领域中的主要算法设计方法及一些常用算法,使学生掌握算法设计的常用方法,以便运用这些方法来设计解决一些常用的或较为复杂的实际问题的算法,并力争做到快捷、有效,从而提高程序设计的质量。同时,还要使学生学会分析算法、估计算法的复杂性,以便理解并科学评估有一个算法的好坏。它属于技术基础课,是进行软件设计的核心内容,是一门实践性很强的课程。学生应具有C或C++、数据结构的基础知识。三、实验内容(1)分治策略算法(4学时)实验内容:用分治法实现快速排序、归并分类算法;编写程序实现循环赛日程表。设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其它n-1个选手各赛一次(2)每个选手一天只能赛一场(3)循环赛进行n-1天。实验要求:掌握递归算法实现的过程;了解快速排序算法的思想,掌握用算法设计思想解题的思路。(2)贪心算法(2学时)实验内容:编写一个简单的程序,实现单源最短路径问题;编写一段程序,实现找零;编写程序实现多机调度问题。实验要求:掌握贪心算法的基本设计思路,并用其解决实际问题。(3)动态规划算法(2学时)实验内容:编写一个简单的程序,解决0-1背包问题;编程解决合唱队形安排。实验要求:掌握动态规划算法设计的基本策略。(4)回溯算法(2学时)实验内容:用回溯法解8皇后问题;批处理作业调度。实验要求:掌握回溯法的算法框架和算法的基本思想。

四、实验要求(1)学生在完成预习报告、熟悉实验内容后才能进入实验室进行上机实验。实验1人一组,由学生独立操作完成实验。(2)学生分析问题,熟悉解决问题的算法描述。要求记录上机实验过程,且得到指导教师认可后,学生方可离开实验室。(3)实验完成后提交实验报告。(4)实验过程由指导老师监督,听从老师安排和督导。

五、实验项目的设置与内容提要

本课程主要通过综合设计性实验,完成一个问题的算法分析设计过程,培养学生解决设计问题的能力,提高学生综合设计能力。要求学生通过查阅文献、小组讨论完成实验任务。

序号实验项目名称实验学时实验类型实验要求内容提要1分治策略算法4综合设计性必做用分治策略解决排序等问题。2贪心算法2综合设计性必做掌握贪心算法的基本设计思路,并用其解决实际问题。3动态规划算法2综合设计性必做掌握动态规划算法设计的基本策略。4回溯算法2综合设计性必做掌握回溯算法的基本思想。

六、考核方式(1)每次任务完成后由指导老师逐个的检查实验内容、结果并评分,占实验成绩60%。(2)上机考勤评分,占实验成绩10%。(3)实验报告占实验成绩30%。实验一排序问题求解实验目的1)以排序(分类)问题为例,掌握分治法的基本设计策略。2)熟练掌握一般插入排序算法的实现;3)熟练掌握快速排序算法的实现;4)理解常见的算法经验分析方法;实验环境计算机、C语言程序设计环境实验学时4学时,必做实验。实验内容与步骤生成实验数据.要求:编写一个函数datagenetare,生成2000个在区间[1,10000]上的随机整数,并将这些数输出到外部文件data.txt中。这些数作为后面算法的实验数据。实现直接插入排序算法.要求:实现insertionsort算法。算法的输入是data.txt;输出记录为文件:resultsIS.txt;同时记录运行时间为TimeIS。直接插入算法思想:Procedureinsertionsort(A,n) A(0)=-¥ forj=2tondo item=A(j);i=j-1 whileitem<A(i)do A(i+1)=A(i);i=i-1 repeat A(i+1)=item repeatEndinsertionsort用A(m)用A(m)划分集合A的函数:Procedurepartition(m,p) integerm,p,I;globalA(m:p-1) v=A(m);I=mLoop loopI=I+1untilA(I)>=vrepeat loopp=p-1untilA(p)<=vrepeat ifI<p thencallinterchange(A(i),A(p))ElseexitEndifRepeatA(m)=A(p);A(p)=vEndpartition要求:实现QuickSort算法。算法的输入是data.txt;输出记录为文件:resultsQS.txt;同时记录运行时间为TimeQS。快速排序算法思想:ProcedureQuickSort(p,q)integerp,q;globaln,A(1:n)ifp<qthen j←q+1 callPartition(p,j)callQuickSort(p,j-1) callQuickSort(j+1,q)endifendQuickSort实验报告:实验报告应包括以下内容:(1)题目;(2)2个算法的基本思想描述;(3)算法理论分析(参考教材);(4)程序流程图;(5)给出data.txt、resultsIS.txt、resultsQS.txt三个文件任选其一的清单;TimeIS、TimeQS的记录结果;(6)实验分析;以表或者图的形式给出这2个算法的经验对比分析结果;并和理论分析结论进行对比。(7)说明本次调试实验的心得体会、经验等。如果程序未通过,应分析其原因。实验二背包问题求解实验目的1)以背包问题为例,掌握贪心法的基本设计策略。2)熟练掌握各种贪心策略情况下的背包问题的算法并实现;其中:量度标准分别取:效益增量P、物品重量w、P/w比值;3)分析实验结果来验证理解贪心法中目标函数设计的重要性。实验环境计算机、C语言程序设计环境实验学时2学时,必做实验。实验内容与步骤理解需要求解背包问题.(1)背包问题的描述:已知有n种物品和一个可容纳M重量的背包,每种物品i的重量为。假定将物品i的一部分放入背包就会得到的效益,这里,,。显然,由于背包容量是M,因此,要求所有选中要装入背包的物品总重量不得超过M.。如果这n件物品的总重量不超过M,则把所有物品装入背包自然获得最大效益。现需解决的问题是,在这些物品重量的和大于M的情况下,该如何装包,使得得到更大的效益值。由以上叙述,可将这个问题形式表述如下:极大化目标函数约束条件(2)用贪心策略求解背包问题首先需确定最优的量度标准。这里考虑三种策略:策略1:按物品价值p降序装包,策略2:按物品重w升序装包策略3:按物品价值与重量比值p/w的降序装包(3)分别以上面三种策略分别求以下情况背包问题的解:n=7,M=15,()=(10,5,15,7,6,18,3)()=(2,3,5,7,1,4,1)。以策略3为例的背包问题的贪心算法描述:procedureGREEDY-KNAPSACK(P,W,M,X,n)//P(1:n)和W(1:n)分别含有按P(i)/W(i)≥P(i+1)/W(i+1)排序的n件物品的效益值和重量。M是背包的容量,而X(1:n)是解向量。//realP(1:n),W(1:n),X(1:n),M,cu;integeri,n;X0//将解向量初始化为零cuM//cu是背包剩余容量fori1tondoifW(i)>cuthenexitendifX(i)1cucu-W(i)repeatifi≤nthenX(i)cu/W(i)endifendGREEDY-KNAPSACK以策略1作为量度标准求解要求问题,记录解向量为X1、目标函数的值fp1(即最后装好包后背包的效益值)、背包的重量fw1;以策略2作为量度标准求解要求问题,记录解向量为X21、目标函数的值fp2(即最后装好包后背包的效益值)、背包的重量fw2;以策略3作为量度标准求解要求问题,记录解向量为X3、目标函数的值fp3即最后装好包后背包的效益值)、背包的重量fw3;实验报告:实验报告应包括以下内容:(1)题目;(2)算法的基本思想描述;(3)程序流程图;(4)给出3个程序任意之一的程序清单;(5)实验分析;通过实验结果对比分析说明哪种策略好。(6)说明本次调试实验的心得体会、经验等。如果程序未通过,应分析其原因。Tips:1.解向量的表示。需要注意:因为算法中涉及到排序,如何保证各种物品的原始命名(如果以第几种,即序号,来命名物品)关系需要考虑。#defineMAX200typedefstructSolution//定义的解向量{ intx[MAX];表示该号物品放了多少在背包里,这里intorder[MAX];表示物品的序号,相当于其名字}Solution;SolutionX;所以,初始化时,为:for(i=0;i<n;i++){ X.order[i]=i; X.x[i]=0;}2.主要函数:voidGreedyKnapsack(floatprofit[],floatweight[],floatx[],intm,intn) { floatcu; inti; cu=float(m); for(i=0;i<n;i++) { x[i]=0; } for(i=0;i<n;i++) { if(weight[i]>cu) break; x[i]=1; cu=cu-weight[i]; } if(i<n) { x[i]=cu/weight[i]; } }实验三最短路径问题求解实验目的:1)以最短路径问题为例,掌握动态规划的基本设计策略;2)掌握dijkstra贪心法求解最短路径问题并实现;3)掌握动态规划方法Floyd算法求解最短路径问题并实现;3)分析实验结果。实验环境计算机、C语言程序设计环境实验学时2学时,必做实验。实验内容与步骤546315463122.然后改写你的程序,求得所有各点之间的最短距离;输出保存到文件dijkstra-output2.txt.3.以上图作为输入,利用Floyd算法求得所有各点直接的最短距离;输出保存到文件floyd-output1.txt.实验报告实验报告应包括以下内容:(1)题目;(2)写出算法设计思想;(3)程序清单;(4)运行的结果;(5)对运行情况所作的分析以及本次调试程序所取的经验。如果程序未通过,应分析其原因。Tips:主要函数voiddijkstra::algorithm()//算法函数{ initialize(); intcount=0; inti; intu; while(count<num_of_vertices) { u=minimum(); set[++count]=u; mark[u]=1; for(i=1;i<=num_of_vertices;i++) { if(graph[u][i]>0) { if(mark[i]!=1) { if(pathestimate[i]>pathestimate[u]+graph[u][i]) { pathestimate[i]=pathestimate[u]+graph[u][i]; predecessor[i]=u; } } }} }}//---------------------------------------------------------------------------floatgraph[maxsize][maxsize];//成本矩阵,邻接矩阵//floydalgorithmfor(k=0;k<n;k++) {//graph[i][j]=min{graph[i][j]},graph[i][k]+graph[k][j]for(i=0;i<n;i++)//每次找到最优的路径代替原来的路径for(j=0;j<n;j++)if(graph[i][j]>graph[i][k]+graph[k][j])//状态转换条件 {graph[i][j]=graph[i][k]+graph[k][j];//状态转换方程}}实验四:N-皇后问题求解实验目的: 1)以Q-皇后问题为例,掌握回溯法的基本设计策略。 2)掌握回溯法解决Q-皇后问题的算法并实现; 3)分析实验结果。实验环境 计算机、C语言程序设计环境实验学时 2学时,必做实验。实验内容与步骤用回溯法求解N-Queen,参考教材算法思想,并实现你的算法。要求:用键盘输入N;输出此时解的个数,并统计运算时间。给出N=4,5,6时,N-Queen解的个数。尝试增大N,观察运行情况;并理解该算法的时间复杂度。实验报告实验报告应包括以下内容:(1)题目;(2)写出算法设计思想;(3)运行的结果;(4)对运行情况所作的分析以及本次调试程序所取的经验。(5)如果程序未通过,应分析其原因。Tips:主要函数等 while(k>0)//对所有行执行以下语句 { X[k]=X[k]+1;//移到下一列 while(X[k]<=n&&!PLACE(k)) { X[k]=X[k]+1;//移到下一列,再判断 } if(X[k]<=n)//找到一个位置 { if(k==n)//一个完整的解 { //print printf("thesoutionis:\n"); for(t=1;t<=n;t++) printf("%3d",X[t]); printf("\n"); count+=1; } else {k=k+1;X[k]=0;}//转向下一行 } else k=k-1;//回溯 } printf("\nthenumberofthesolutionsis%d\n",count);boolPLACE(intk){ i=1; while(i<k) { if(X[i]==X[k]||abs(X[i]-X[k])==abs(i-k)) returnfalse; i=i+1; } returntrue;}附录1关于文件的操作以背包问题为例:例如外部文件为knapsack-input.txt:2,读入文件的操作:FILE*fp;/*Openforread(willfailiffile"knapsack-input.txt"doesnotexist)*/if((fp=fopen("knapsack-input.t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论