数据结构与算法设计课程设计Word文档格式.doc
- 文档编号:14567143
- 上传时间:2022-10-23
- 格式:DOC
- 页数:12
- 大小:107KB
数据结构与算法设计课程设计Word文档格式.doc
《数据结构与算法设计课程设计Word文档格式.doc》由会员分享,可在线阅读,更多相关《数据结构与算法设计课程设计Word文档格式.doc(12页珍藏版)》请在冰豆网上搜索。
4.实验成绩评定分为A+、A、A-、B+、B、C、D各等级。
根据实验准备、实验态度、实验报告的书写、实验报告的内容进行综合评定,具体对应等级如下:
完全符合、非常符合、很符合、比较符合、基本符合、不符合、完全不符合。
实验名称:
算法设计基础实验(实验一)指导教师:
牟廉明,刘芳
实验时数:
4实验设备:
安装了VC++计算机
实验日期:
年月日实验地点:
第五教学楼北802
实验目的:
掌握算法设计的基本原理,熟悉算法设计的基本步骤及其软件实现。
实验准备:
1.在开始本实验之前,请复习相关实验内容;
2.需要一台准备安装WindowsXPProfessional操作系统和装有VC++6.0的计算机。
实验内容:
求n至少为多大时,n个1组成的整数能被2013整除。
实验过程:
1.1算法思想
2013=61*33,6个1能够整除33,寻找满足n个1能够整除61的n即可。
1.2算法步骤
1.定义变量y储存余数,i储存1的个数,m为被除数,初始化为111111;
2.如果被除数能够除尽61,输出i;
如果被除数不能够除尽61,while继续循环,m=y*1000000+111111,i++;
3.重复2,直到找到满足条件的m为止,输出i;
1.3算法实现(C++程序代码)
#include<
iostream>
usingnamespacestd;
intmain()
{
inty,m,i;
i=6;
m=111111;
while(y!
=0){
m=y*1000000+111111;
y=m%61;
i=i+6;
}
cout<
<
i<
endl;
return0;
}
1.4算法分析
时间复杂度为O(n);
实验总结(由学生填写):
通过该实验发现,任何问题不要盲目的使用蛮力法,一定要化蛮力为巧力,这样既可以减少程序的时间复杂度,也能得到较精确的结果。
并且在以后的解决问题的过程中,一定要多分析,多思考。
实验等级评定:
蛮力法实验—分式化简(实验二)指导教师:
牟廉明,刘芳
4实验设备:
安装了VC++的计算机
年月日实验地点:
第五教学楼北802
掌握蛮力法的基本思想和方法,熟悉搜索法的软件实现。
1.在开始本实验之前,请回顾教材的相关内容;
2.需要一台准备安装WindowsXPProfessional操作系统和装有数学软件的计算机。
设计算法,将一个给定的真分数化简为最简分数形式,例如,将6/8化简为3/4。
首先对于普通整数;
可以先利用欧几里得算法求出最大公约数,然后再讲分子分母用最大公约数作除,即可求出最简真分数。
输入:
约分前的两个整数分子和分母
输出:
约分后的分子分母
1.r=m%n;
2.循环直到r=0;
3.m=n;
n=r;
r=m%n;
4.a/n;
b/n;
5.输出b/a;
{
longinta,b,r;
cout<
"
请输入真分数的分母和分子:
;
cin>
>
a>
b;
longintm=a;
longintn=b;
r=a%b;
while(r!
=0)
{
a=b;
b=r;
r=a%b;
}
a=m/b;
b=n/b;
原分数的最简分数为:
b<
/"
a<
return0;
时间复杂度为o(n).
此次实验较为简单,也较为基础。
但需注意的是,即使是很简单的问题,也需要注意细节,尤其是在定义长整型的时候,不要单独的只定义为整型。
分治法实验—循环移位(实验三)指导教师:
安装了VC++的计算机
年月日实验地点:
第五教学楼北802
通过本次实验,让学生掌握分治法的基本思想和技巧,并学会如何用C++软件来实现.
1.在开始本实验之前,请回顾教科书的相关内容;
2.需要一台准备安装WindowsXPProfessional操作系统和装有C++软件的计算机。
设计分治算法,实现将数组A[n]中所有元素循环左移k个位置,要求时间复杂度为O(n),空间复杂度为O
(1)。
例如,对abcdefgh循环左移3位得到defghabc。
对于第6题,用分治法进行求解的话,若是采用循环赋值的方式,如果字符的个数和左移的位数成倍数关系,那么算法就比较容易实现,但是如果不成比例关系,算法写起来就比较麻烦,所以,用了另一种方式,进行三次对称交换就可以完成算法。
1.输入:
一个数组和左移位数
2.编写两个函数,一个是对称交换函数1,另一个是调用函数2,用函数2三次调用函数1,完成整个对称交换过程。
3.调用函数2
4.输出:
左移后的数组
voidfun(char*a,intm,intk)
{
inttemp;
inti,j;
for(i=m,j=k;
=k;
i++,j--)
{
if(i<
=(m+k)/2)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
voidxun(chara[],intk,intn)//(函数2)第二个调用函数,调用函数1
fun(a,0,k-1);
//第一次调用函数1,将(abc)对称交换得到(cba),最后a[]为(cbadefgh)
fun(a,k,n-1);
//第二次调用函数1,将(defgh)对称交换得到(hgfed),最后a[]为(cbahgfed)
fun(a,0,n-1);
//第三次调用函数1,将(cbadefgh)对称交换得到(defghabc),即最后a[]为(defghabc)
chara[1000];
cout<
请输入一个数组:
gets(a);
//用cin>
a;
也可以哟,不过配套的比较好看!
intk;
请输入左移位数:
k;
intn=strlen(a);
xun(a,k,n);
puts(a);
//用cout<
存在如下递推式,T(n)=2T(n/2)+n,时间复杂性为O(nlog2n)
分治法的主要思想是分而治之,在遇到一个规模比较大问题时,我们不应该直接入手,通过简单的循环语句解决,而应该对其分段对局部进行考虑,通过对局部得到整体的结果。
但在此次实验中,学会了对分治法的简单应该,但要对其加深巩固,还应该对此类问题的相关习题多多去练习,多多去领悟。
回溯法—0/1背包问题(实验四)指导教师:
年月日实验地点:
熟悉回溯法的基本思想和实现方法,掌握如何用C++实现相关算法。
1.在开始本实验之前,请回顾教科书的相关内容;
2.需要一台准备安装WindowsXPProfessional操作系统和装有C++的计算机。
给定背包容量W=20,以及6个物品,重量分别为(5,3,2,10,4,2),价值分别为(11,8,15,18,12,6)。
请用回溯法求解上述0/1背包问题。
首先把物品单价价值排序,并确定上界函数,在搜索二叉树中利用上界函数对其进行剪枝,最终确定最优解。
1.定义变量
2.编写函数knapsack(),用于将物品按单位价值排序
编写函数bound(inti),用于计算上界函数
编写函数backtrack(inti),回溯函数,用于搜索二叉树。
3.输出解决方案
//这个是只找到了一个可行解就返回了值(其实还可能有其他的解)
time.h>
//计算程序运行时间的头函数
intn;
//物品数量
doublec;
//背包容量
doubl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 设计 课程设计