数据结构课程设计说明Word格式.docx
《数据结构课程设计说明Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计说明Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
专业:
XXXXXXXXXXXXXXX
一、课程设计的基本要求
二、课程设计的主要内容(包含分工)
三、课程设计的进程安排
1.200X年XX月XX日之前:
XXXXXXXXXXXXXXX。
2.200X年XX月XX日——XX月XX日:
XXXXXXXXXXXXXXX。
2.200X年XX月XX日前:
200X年XX月XX日
《数据结构》课程设计报告(模板)
一正文
(一)名称
1、名称
详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容……。
2、名称
二附录
(二)节名称
详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容详详细内容详细内容详细内容详细内容详细内容详细内容详细内容详细内容……。
……
《数据结构》课程设计考核评估标准
通过程序设计及答辩方式,并结合学生的动手能力(编程及调试程序能力)、独立分析解决问题的能力、创新精神、总结报告、答辩水平、学习态度以及题目难易程度综合考评,成绩分优、良、中、及格和不及格五等。
课程设计的量化评分成绩见表
(1)
《数据结构》课程设计量化评分标准(每人一页)
学生姓名:
XXXX学生学号XXXX
指标
最高分
评分要素
评分
设计技术水平
20
程序运行情况良好,结构设计合理,算法说明清晰,理论分析与计算正确,实验数据无误,通用性和可扩充性强
实际动手能力
独立完成设计,能够迅速准确的进行调试和纠错
研究成果与专业知识
10
对研究的问题能较深刻分析或者有独到见解,很好地掌握了有关基础理论与专业知识,总结报告认识深刻
写作与总结提炼能力
报告结构严谨,逻辑严密,论述层次清晰,语言流畅,表达准确,重点突出,
文献综述
有较完善的文献综述,能够正确查阅参考文献资料
规范化程度
提交的电子文档及打印文档的书写、存放完全符合规范化要求
答辩情况
能简明扼要地阐述设计的主要内容,能准确流利地回答各种问题
学习态度
端正的学习态度及认真刻苦程度等
总分
200X年XX月XX日
注意:
1本评分标准适用于数据结构课程设计;
2总分满分为100分,成绩参考标准为:
优秀(100>
X≥90);
良好(90>
X≥80);
中等(80>
X≥70);
及格(70>
X≥60);
不及格(X<
60);
3发现有拷贝舞弊现象者,一律直接退回不作检查,两次舞弊者按不及格处理。
4每组学生至少要回答三个以上的问题,有两个以上问题回答不清楚者,一律不及格。
5课程设计报告不交或不规范者一律不及格。
《数据结构》学生课程设计上交时间与上交方法
课程设计的上交时间:
2010年1月21号12点前将所有需要上交内容上交至指导老师。
课程设计的上交方法:
1.每组同学的“课设设计进展情况”以E-mail形式上交;
E-mail地址:
datastrusoft08@
2.最后上交的“课设设计报告”要求有两部分:
一是电子文档(E-mail),二是打印文档。
《数据结构》课程设计上交文档要求
1文档规范化要求
最终的“课程设计报告”要求以打印文档和电子文档(E-mail)两种形式上交。
1)打印文档要求:
打印文档大小统一为A4纸幅。
并按照以下4项内容和次序装订。
各部分排版规范参见模板。
课程设计报告上交文档包含如下内容:
001封面
002任务书
003课程设计报告
正文
附录
004量化评分(每人一页,便于评分)
2)电子文档要求(各部分排版规范参见电子文档中的模板,一组交一份,用组长的学号和姓名提交):
1电子文档中包含一目录名为“(学号)(姓名)”的文件夹,所有需要上交的电子文档均在此文件夹中。
2学生按照课程设计的具体要求开发的所有源程序,存放至目录名为
“(000)(源程序)(学号)(姓名)”的文件夹中。
3封面存放于名字为
“(001)(封面)(学号)(姓名).doc”的word文档中。
4任务书存放于名字为
“(002)(任务书)(学号)(姓名).doc”的word文档中。
5课程设计报告存放于名字为
“(003)(课程设计报告)(学号)(姓名).doc”的word文档中。
6量化评分标准存放于名字为
“(004)(量化评分标准)(学号)(姓名).doc”的word文档中。
上述要求中的黑斜体部分根据实际情况填写。
2文档正文内容要求
对于正文部分内容要求必须具备如下内容:
1)目的
2)需求分析
以无二义性的陈述说明程序设计的任务,程序要做什么?
明确规定:
①输入的形式和输入值的范围;
②输出的形式;
③程序所能达到的功能;
④列出初步的测试计划。
3)概要设计
说明本程序中用到的所有数据类型的定义及含义、主程序的流程以及各程序模块的功能要求及各自之间的层次(调用)关系。
4)详细设计
实现概要设计中定义的所有数据类型,对每个操作需写出伪码算法;
对主程序和其他模块也都要写出伪码算法;
画出函数的调用关系图。
最终实现的源程序要按照良好风格的程序书写规则来编写,要求结构清晰,重点函数、重点变量以及重点功能部分要加上清晰的程序注释。
5)调试分析
测试数据,测试输出的结果(包括正确的输入及其输出结果和含有错误的输入及其输出结果)。
每个模块设计和调试时存在问题的思考(问题是哪些?
问题如何解决?
)。
进行时间和空间复杂度分析,算法的改进设想。
6)测试结果
列出完备的测试计划及其结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于需求分析中的初步测试计划。
7)用户使用说明
说明如何使用最终发布的程序,详细列出每一步的操作步骤。
8)课设总结
课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、经验和体会以及对设计与实现的回顾讨论和分析;
在课程设计过程中对课程的认识等内容。
《数据结构》课程设计题目
第一部分(以下题目60分起评,经老师同意的自拟题目按60分起评)
1P96停车场管理
2P102电梯模拟
3P123文学研究助手
4P149Haffman编/译码器
5P150教学计划编制问题邱文婷
6P151校园导游咨询
7P153全国交通咨询模拟
8P167图书管理
9P169内部排序算法比较
10P80长整数四则运算
11P100银行模拟业务刘任
12P101航空客运订票系统张飞
13P150图遍历的演示
14P168平衡二叉树操作的演示杨浩
15P152表达式类型的实现冯小佩
16P136稀疏矩阵运算器
17P117文本格式化刘嘉骐
18P98车厢调度
19P81一元稀疏多项式计算器
20P152最小生成树问题
第二部分(以下题目80分起评)
1.遗传算法的模拟
(1)问题描述
遗传算法是以达尔文生物进化论为基础,借鉴自然界中物种进化原理,依据优胜劣汰而达到优化的规律而创建的一种数学模型和算法,如下图所示。
该图以小麦品种改良的过程为例说明遗传算法(也可称为基因算法)的基本原理:
优化问题的可能解被称为是个体(individuals),首先考虑可能解(个体)组成的集合,即群体(population);
然后依据环境特征(优化问题特征)评定各个体的优劣(其适应度(fitness)来定义);
对适应度较差的个体进行淘汰,选取适应度好的个体(类比生物选择),在其上进行杂交,变异等操作形成新的群体;
最后再进入下一轮遗传进化,上述过程不断迭代,直到群体满足了某条件,此时出现了满足要求的优化解。
将上述过程形式化后就得到如下图所示的遗传算法结构框图:
initializet=0
initializeP(t)
evaluteFitnessofP(t)
whilenotstoppingcriteriondo
P’(t)=recombination{P(t)}
P’’(t)=mutation{P’(t)}
P(t+1)=selection{P’’(t)+P(t)}
EvaluteFitnessofP’’(t)
t=t+1
其中P(t)为t时刻的父代,而P'
'
(t)为t时刻的子代。
对于计算机问题而言,一般要将问题的解进行编码,编码成二进制字符串,杂交和变异就在这些字符串上进行。
遗传算法可以很好解决很多的优化问题。
(2)课程设计目的
体会遗传算法思想,能够设计并编写遗传算法的相关操作函数,并能够应用遗传算法求解具体问题。
(3)基本要求
编写遗传算法的基本操作函数,包括选择,变异,交叉等。
应用遗传算法实现求解如下函数的极值f(x)=x*sin(10*π*x)+1.0x∈[-1,2]结果精度要求在小数点后六位。
给出算法效率分析的实验结果。
(4)实现提示
根据精度要求确定个体的二进制编码位数,同时要确定该编码和[-1,2]间数的换算规则,由于是求最大值的问题,所以适应度函数就可选为f(x),值越大的个体适应度越好。
关于交叉和变异的方法参阅相关资料。
2.蚁群算法在旅行商问题中的应用
蚁群算法是在对真实蚂蚁的观测基础上提出的,单个蚂蚁是不具智能的,但生活在一起的蚁群却总是能够在蚁穴和食物间找到一条几乎是最短的路径。
这就要靠蚁群的智能,蚁群算法就基于这一智能。
下面的图例给出蚁群智能的基本思想。
蚂蚁会在自己走过的路径上留下生化信息素,同时它也会选择地面上信息素较多的路径行走。
对于下图的第二种情况,因为路上有了障碍物,所以蚂蚁需要绕过障碍物,该咋么样绕过障碍物,由于没有信息素作为指导,所以起先只能是随机的选择从左或从右走(第三个图所示);
但是随着行走次数的增加,较短的路径上留下的信息素就会较多,就有更多的蚂蚁行走,信息素进一步增多,最终较短的路就成为了选择的路(第四个图)。
这就是蚁群智能的基本原理。
图6-21蚁群算法的基本思想
蚁群算法就是应用蚁群智能实现的算法,可以用它来实现在解空间上进行最优解的搜索,很多计算机问题可以转化为搜索最优解的问题。
如旅行商问题(求解遍历全部城市的最短路经),就可用蚁群算法求解,在旅行商问题中,蚁穴到食物就对应遍历全部城市,蚂蚁就对应旅行商。
了解蚁群算法的思想,并能应用蚁群算法求解具体问题。
①应用蚁群算法求解TSP问题。
②TSP中的城市数量不少于30个,组成完全图,边上的权值自定。
③蚂蚁数量可配置,迭代次数可配置。
④给出较全面的实验结果:
结果路经及长度;
蚁群算法执行时间;
不同参数值(蚂蚁数量,迭代次数)的影响等。
⑤迭代过程需要用图形界面表示(可用C的图形库)。
3实现并对比三种基本的字符串匹配算法
字符串匹配问题是:
假定文本时一个长度为n的数组T[1..n],模式是一个长度为mn的数组P[1..m],如果0≤s≤n-m,并且T[s+1..s+m]=P[1..m],则称模式P完成了和T的匹配,且P在T中出现的位移为s,如下图所示:
图字符串匹配问题
本课程设计要实现三种基本的字符串匹配算法:
朴素匹配算法;
Rabin-Karp算法;
KMP算法。
①朴素匹配算法
是最简单的匹配算法,可以形象地看成是用一个包含模式P的模板沿文本滑动,同时对每个位移注意模板的上的字符是否与文本中的相应字符相等,如下图所示:
②Rabin-Karp算法
基本思想是将模板P用一个数p(通常是十进制)表示,如果字符串中的每位都是0-9的整数:
p=P[m]+10(P[m-1]+10(P[m-2]+…+10(P[2]+10P[1])…))
同时将T中每个m位连续的串上计算出同样的正数值,有n-m个:
t1,t2,…,tn-m。
一种较为巧妙的方法是在ts基础上可按如下方式计算ts+1:
ts+1=10(ts–10m-1T[s+1])+T[s+m+1]
由于这样的值非常大,可能会导致溢出,通常的处理办法是计算pmodq和tsmodq,计算时会用到性质a+bmodn=amodn+bmodn;
a*bmodn=amodn*bmodn。
Rabin-Karp算法的具体过程如下图所示:
图Rabin-Karp字符串匹配算法示意图
③KMP算法
图模式匹配中的信息重利用
KMP算法是一种设计得很巧妙但也较复杂的一种算法,是应用自动机思想实现的匹配算法。
其基本思想是如果已经完成了P部分字符(一个前缀q)的匹配,那么在匹配T后面的字符时可以应用P模式的信息减少比较次数,如图6-29所示。
首先需要计算模式P的前缀函数:
{1,2,…,m}{0,1,…,m-1}满足:
[q]=max{k:
k<
q且Pk是Pq的后缀}
对于模式ababababca的完整前缀函数如下图所示:
KMP算法的基本思想是用函数来确定匹配的状态迁移,算法的伪代码如下图所示:
KMP-MATCHER(T,P)
1n←length[T]
2m←length[P]
3∏←COMPUTE-PREFIX-FUNCTION(P)
4q←0
5fori←1ton
6dowhileq>
0andP[q+1]≠T[i]
7doq←∏[q]
8ifP[q+1]=T[i]
9thenq←q+1
10ifq=m
11thenprint"
Patternoccurswithshift"
i-m
12q←∏[q]
图KMP算法伪代码
应用数据结构与算法基本知识解决实际问题,对字符串匹配形成一定的认识。
①编程实现三种字符串匹配算法。
②分析三种算法的时间复杂性,通过应用三种算法在一个较长英文文本中查找一个
子串的实验数据来对比三种算法的运行时间。
需要查阅相关资料,尤其是KMP算法。
4.文档集合上的查询
设计数据结构完成在一个文档集合的存储,并构造算法实现其内容的查询。
该设计包括三个部分:
(一)应用数据结构完成文档集合的内容(基于单词的)存储,并为下一步的查询建立索引。
(二)就单个单词的查询请求,设计算法进行查询。
(三)对多个单词通过AND和OR构造的复杂查询进行处理(此处可只做两个单词的情况)。
具体情形如下面的例子:
Example
Doc1:
Iliketheclassondatastructuresandalgorithms.
Doc2:
Ihatetheclassondatastructuresandalgorithms.
Doc3:
Interestingstatisticaldatamayresultfromthissurvey.
Herearetheanswerstosomequeries:
Query1:
data
Doc1,Doc2,Doc3
Query2:
dataANDstructures
Doc1,Doc2
Query3:
likeORsurvey
Doc1,Doc3
图文档集合上的查询实例
用线性结构组织信息,查找算法的选择与应用。
①文档集合中的文档数不能少于20个。
②数据结构的设计以及查找算法的构造应考虑如何最大程度的提高查询效率。
③查询效率的提高应是综合多种查询的,而不是只针对一种查询的优化。
④给出查询效率的模拟实验数据。
AND和OR查询可转变为单个单词查询结果的组合。
5扫雷游戏李琳峰
本题目做一个NxM的扫雷游戏,每个方格包含两种状态:
关闭(closed)和打开(opened),初始化时每个方格都是关闭的,一个打开的方格也会包含两种状态:
一个数字(clue)和一个雷(bomb)。
你可以打开(open)一个方格,如果你打开的是一个bomb,那么就失败;
否则就会打开一个数字,该数字是位于[0,8]的一个整数,该数字表示其所有邻居方格(neighboringsquares)所包含的雷数,应用该信息可以帮助你扫雷。
图扫雷游戏的图例
具体实现要求的细节:
①能够打开一个方格,一个已打开的方格不能再关闭。
②能够标记一个方格,标记方格的含义是对该方格有雷的预测(并不表示真的一定有雷),当一个方格标记后该方格不能被打开,只能执行取消标记的操作,只能在取消后才能打开一个方格。
③合理分配各个操作的按键,以及各方格各种状态如何合理显示。
掌握线性结构的应用,并体会如何用计算机程序完成一个有趣的游戏。
①能够给出游戏结果(输、赢、剩余的雷数、用掉的时间按妙计)。
②游戏界面最好图形化,否则一定要清楚的字符界面。
用二维数组表示NxM区间,要仔细考虑如何初始的布置各个雷以及各个方格的状态及变化。
6.公交线路上优化路径的查询赵杰
最短路径问题是图论中的一个经典问题,其中的Dijkstra算法一直被认为是图论中的好算法,但有的时候需要适当的调整Dijkstra算法才能完成多种不同的优化路径的查询。
对于某城市的公交线路,乘坐公交的顾客希望在这样的线路上实现各种优化路径的查询。
设该城市的公交线路的输入格式为:
线路编号:
起始站名(该站坐标);
经过的站点1名(该站坐标);
经过的站点2名(该站坐标);
……;
经过的站点n名(该站坐标);
终点站名(该站坐标)。
该线路的乘坐价钱。
该线路平均经过多少时间来一辆。
车速。
例如:
63:
A(32,45);
B(76,45);
C(76,90);
N(100,100)。
1元。
5分钟。
1/每分钟。
假定线路的乘坐价钱与乘坐站数无关,假定不考虑公交线路在路上的交通堵塞。
对这样的公交线路,需要在其上进行的优化路径查询包括:
任何两个站点之间最便宜的路径;
任何两个站点之间最省时间的路径等等。
从实际问题中合理定义图模型,掌握Dijkstra算法并能用该算法解决一些实际问题。
①根据上述公交线路的输入格式,定义并建立合适的图模型。
②针对上述公交线路,能查询获得任何两个站点之间最便宜的路径,即输入站名S,T后,可以输出从S到T的最便宜的路径,输出格式为:
线路x:
站名S,…,站名M1;
换乘线路x:
站名M1,…,站名M2;
…;
站名MK,…,站名T。
共花费x元。
③针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(不考虑在中间站等下一辆线路的等待时间),即输入站名S,T后,可以输出从S到T的考虑在中间站等下一辆线路的等待时间的最省时间的路径,输出格式为:
共花费x时间。
④针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(要考虑在中间站等下一辆线路的等待时间),即输入站名S,T后,可以输出从S到T的考虑在中间站等下一辆线路的等待时间的最省时间的路径,输出格式为:
需深入考虑,应根据不同的应用目标,即不同的优化查询来建立合适的图模型。
第三部分:
以下题目90分起评(要求提出需要解决的问题、实现目的、基本要求、具体实现)
1DES加密算法的实现:
朱丰
2模拟Sensornetwork的工作
3聚类分析的初步实践
4实现简单数字图像处理冷晶晶
5二值图像数字水印技术的实践