好文档 - 专业文书写作范文服务资料分享网站

计算机算法与设计分析实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

计算机组织与体系结构——实验报告

{

thissum+=a[j]; if(thissum>sum) {

sum=thissum; besti=i; bestj=j; } } }

return sum; } int main() {

int *a=new int[50]; int x,n,besti,bestj;

cout<<\请输入字符串的个数:\cin>>n;

cout<<\请输入字符串中的每个数字:\for(int i=0;i

cin>>a[i]; }

x=MaxSum(n,a,besti,bestj);

cout<<\最大子段和为:\起始位置:\至\结果为:

\ return 0; }

四、运行结果

实验小结

第一个求公共子序列感觉和递归查询差不多,然后再查询第二列进行对比!最大子段和感觉就像求整列的和!

实验三 贪心算法(2学时)

一:多机调度问题 一、实验目的与要求

1、熟悉多机调度问题的算法;

8

计算机组织与体系结构——实验报告

2、初步掌握贪心算法;

二、实验题

要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定,每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。 三、实验程序 #include using namespace std;

typedef struct Job {

int ID;//作业号

int time;//作业所花费的时间 }Job; Job J[10];

typedef struct JobNode //作业链表的节点 {

int ID; int time;

JobNode *next;

}JobNode,*pJobNode;

typedef struct Header //链表的表头,不同的机器?? {

int s; //表示其最大的容量 pJobNode next;

}Header,*pHeader; // int l=1; int main() {

//Job J[10]; Header M[10];

int m,n; //机器的个数

cout<<\请输入数据作业的个数与机器的个数\ cin>>n>>m;

cout<<\请输入所有的任务的相关数据\ for(int i=1;i<=m;i++)

M[i].s=0; //表示其最大容量

for( l=1;l<=n;l++)//所有的任务作业

cin>>J[l].ID>>J[l].time;

int SelectMin(Header* M,int m);//SelectMin(M,m); for(l=1;l<=n;l++) cout<<\第\个任务在第\

<<\台机器上完成\ return 0;

}

9

计算机组织与体系结构——实验报告

int SelectMin(Header* M,int m) //有几台机器,就创建几个链表 {

int k=1;

for(int i=1;i<=m;i++) {

if(M[i].s<=M[1].s) //最小的加入,s标识时间的和值

k=i;

} M[k].s+=J[l].time;

return k; //k是标识第几台机器加入作业 }

五、实验结果

二: 用贪心算法求解最小生成树 一、实验要求与目的

1、 熟悉贪心算法的基本原理与适用范围。

2、 使用贪心算法编程,求解最小生成树问题。

二、实验内容

1、 任选一种贪心算法(Prim或Kruskal),求解最小生成树。对算法进行描述和复杂性分析。 编程实现,并给出测试实例 三、实验程序 #include using namespace std; int const inf=100; int main() {

int n=6;

cout<<\所给图的最小生成树一次选定的边是表示为:\int c[7][7]= {

{inf,inf,inf,inf,inf,inf,inf}, {inf,inf,6,1,5,inf,inf}, {inf,inf,inf,5,inf,3,inf}, {inf,1 , 5,inf,5,6,4}, {inf,5,inf,5,inf,inf,2}, {inf,inf,3,6,inf,inf,6},

10

计算机组织与体系结构——实验报告

{inf,inf,inf,4,2,6,inf}

};

//c[1][2]=6;c[1][4]=5;c[1][3]=1;c[2][3]=5;c[3][4]=5;c[2][5]=3;c[2][6]=2; //c[3][5]=6;c[3][6]=4;c[5][6]=6;

c[2][1]=6;c[4][1]=5;c[3][1]=1;c[3][2]=5;c[4][3]=5;c[5][2]=3;c[6][2]=2; //c[5][3]=6;c[6][3]=4;c[6][5]=6; void prim(int n,int c[7][7]); prim(n,c); return 0;

}

void prim(int n,int c[7][7]) { int lowcost[7]; int closet[7]; bool s[10];

s[1]=true;

for(int i=2;i<=n;i++) { lowcost[i]=c[1][i];

closet[i]=1;

s[i]=false; }

int j=1;

for(i=1;i

int j=1;

for(int k=2;k<=n;k++) if((lowcost[k]0)) { min=lowcost[k]; j=k;

}

cout<

for(k=2;k<=n;k++) if((c[j][k]

}

}

11

计算机组织与体系结构——实验报告

}

四、实验结果

五、实验小结

贪心算法上课老师讲的时候也能听懂,讲的例子也能明白,但是在实际调度时遇到了不小的麻烦!最后在老师和同学的帮助下完成了!尽管自己没有做出来,但是对贪心算法的实际操作有了更一步的把握!

实验四

回溯算法和分支限界法(2学时)

一:符号三角形问题 一、实验目的与要求

1、掌握符号三角形问题的算法; 2、初步掌握回溯算法;

二、实验题图 下面都是“-”。 下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。 在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相 三、实验程序 #include

using namespace std;

typedef unsigned char uchar;

int sum; uchar** p; //符号存储空间;//表示满足要求的三角形个数 char ch[2]={'+','-'}; int n; //第一行符号总数 int half; int count; //用来计算‘-’的个数 void BackTrace(int t) {

if (t>n) {

sum++;

cout<<\第\个三角形:\for (int i=1;i<=n;i++) {

for (int j=1;j

for (j=1;j<=n-i+1;j++) cout<

12

73r3y7esyp8mqar1rxa5
领取福利

微信扫码领取福利

微信扫码分享