数据结构实习报告_数据结构程序实习报告

实习报告 时间:2020-02-27 03:14:38 收藏本文下载本文
【www.daodoc.com - 实习报告】

数据结构实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构程序实习报告”。

数据结构实习报告

班级:13软件二班

姓名:殷健 学号:1345536225

子集和数问题

1:问题描述

子集和数问题1:子集和问题的为〈W,c〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

2:问题分析

程序中设计了函数void computeSumofSub(int s,int k,int r),其意义是从第k项开始,如果s(已经决策的和数)和w[k](当前元素)之和为和数,就把结果输出来,否则如果s与,w[k],w[k+1]之和小于和数,则调用computeSumofsub(s+w[k],k+1,r-w[k]),意为选择此结点的左分支,再判断s和后面所有元素之和是否不小于M(所有的加起来都小,必定无解),并且s+w[k+1]M,也是无解),若条件符合即调用computeSumofSub(s,k+1,r-w[k]),即选择当前结点的右分支。

算法展示:

#include using namespace std;#include #include #define M 50 cla SumOfSub{ private: int w[M];

int m;int x[M];public: SumOfSub(int a[], int b, int n){

for(int i=0;i=m&&s+w[k+1]

};void main(){ int sum=0;int w[M];srand((unsigned)time(NULL));

for(int i=0;i

} cout

cout

} cout>m;sum=m*sum;cout

复杂性分析: 对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。其它说明: 按书中所讲的约束条件,程序中所有变量都是整型,输入的各元素要从小到大输入,而且不能有重复的元素。若是想要无序输入,可以程序中加入程序1.c的归并排序算法,对输入的数组排序即可。

拓展一

问题描述: 子集和数问题拓展一:子集和问题的为〈W,c,p〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

问题分析:

增加一个数组p,使得p的每个元素与w对应元素关系为pi=Wi+10;最后结果W子集中元素个数越多,则p和最大,但也可以将每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。

算法演示

#include using namespace std;#include #include #define M 50 cla SumOfSub{ private: int w[M];int p[M];int m;int x[M];

int N[M];int max;int j;public: SumOfSub(int a[], int b, int n){

max=0;j=0;

for(int i=0;i

w[i]=a[i];

p[i]=a[i]+10;

}

m = b;

x[0]=n;} void computeSumOfSub(int s, int k, int r){ x[k] = 1;if(s+w[k] == m){ printResult(k);cout

} else if(s+w[k]+w[k+1] =m&&s+w[k+1]

int S=0;int i;

cout

for(i=0;i

S=S+p[i];

cout

}

cout

cout

if(S>max){

max=S;

int J=0;

for(i=0;i

if(x[i]==1){

N[J]=w[i];

J++;

}

}

j=J;

} } void special(){

cout

for(int i=0;i

cout

}

cout

for(int i=0;i

w[i]=rand();

if(w[i]==0){

w[i]=rand();

}

sum=sum+w[i];} cout

cout>m;sum=m*sum;cout

r += w[i];} sumOfSub.computeSumOfSub(0, 0, r);

sumOfSub.special();} 运行结果

复杂性分析

对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。

拓展二

问题描述

子集和数问题拓展一:子集和问题的为〈W,c,P〉。其中,W={w1,w2,...,wn}是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得∑W1=c∑W(0

问题分析

增加一个数组随机数组P,每个符合条件子集对应P集合的元素和计算出做个比较,然后输出最大的再对应原W子集。

算法演示

#include using namespace std;#include #include #define M 50 cla SumOfSub{ private: int w[M];int p[M];int m;

int x[M];int N[M];int max;int j;public: SumOfSub(int a[], int b, int n){

max=0;

j=0;

cout

for(int i=0;i

w[i]=a[i];

p[i]=rand();

cout

}

cout

m = b;

x[0]=n;} void computeSumOfSub(int s, int k, int r){ x[k] = 1;if(s+w[k] == m){ printResult(k);cout

} else if(s+w[k]+w[k+1] =m&&s+w[k+1]

int S=0;int i;

cout

for(i=0;i

S=S+p[i];

cout

}

cout

cout

if(S>max){

max=S;

int J=0;

for(i=0;i

if(x[i]==1){

N[J]=w[i];

J++;

}

}

j=J;

} } void special(){

cout

for(int i=0;i

cout

}

cout

for(int i=0;i

w[i]=rand();

if(w[i]==0){

w[i]=rand();

}

sum=sum+w[i];} cout

cout>m;sum=m*sum;cout

r += w[i];} sumOfSub.computeSumOfSub(0, 0, r);

sumOfSub.special();}

运行结果

复杂性分析

对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2^n。尽管差异很大,但当n很大时,对某些输入而言,回溯法仍可在短时间内求解。

数据结构实习报告

一、概述软件开发的流程二、回顾C语言的基本语法:1、常量(类型)2、变量(类型、定义)3、表达式(例子:三位数的拆分)4、控制语句(if条件语句,例子:饿了吗?for循环语句,例子:做好事问题求解)5......

数据结构实习报告

附件:实习报告格式,如下:数据结构实习报告班级: 姓名:xxx(20121514101)xxx(20121514101) xxx(20121514101) 指导教师:日期: 题目一、问题描述(把你所选的题目及要求说一下)二、概要设计(抽......

数据结构实习报告

数据结构第六次作业p134——11411203张玉24.template void SeqQueue::EnQueue(const T& x){//插入函数if(IsFull()==true){maxSize=2*maxSize;elements[rear]=x;rear=(rear+......

数据结构实习报告

数据结构课程设计的实习报告怎么写呀,请求做过课设的同学发一篇范文过来谢谢-_-规范实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:1、需求分析以......

数据结构实习报告

一、需求分析1、程序所实现的功能;2、程序的输入,包含输入的数据格式和说明;3、程序的输出,程序输出的形式;4、测试数据,如果程序输入的数据量比较大,需要给出测试数据;5、合作人及......

下载数据结构实习报告word格式文档
下载数据结构实习报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文