当前位置:文档之家› 算法设计与分析实验报告

算法设计与分析实验报告

算法设计与分析课程实验项目目录学生姓名:学号:*实验项目类型:演示性、验证性、综合性、设计性实验。

*此表由学生按顺序填写。

本科实验报告专用纸课程名称算法设计与分析成绩评定实验项目名称蛮力法指导教师实验项目编号 201 实验项目类型设计实验地点机房学生姓名学号学院信息科学技术学院数学系信息与计算科学专业级实验时间 2012年 3月 1 日~6月30日温度24℃1.实验目的和要求:熟悉蛮力法的设计思想。

2.实验原理和主要内容:实验原理:蛮力法常直接基于问题的描述和所涉及的概念解决问题。

实验内容:以下题目任选其一1).为蛮力字符串匹配写一段可视化程序。

2).写一个程序,实现凸包问题的蛮力算法。

3).最著名的算式谜题是由大名鼎鼎的英国谜人给出的: S END+MORE MONEY. 这里有两个前提假设:第一,字母和十进制数字之间一一对应,也就是每个字母只代表一个数字,而且不同的字母代表不同的数字;第二,数字0不出现在任何数的最左边。

求解一个字母算术意味着找到每个字母代表的是哪个数字。

请注意,解可能并不是唯一的,不同人的解可能并不相同。

3.实验结果及分析:(将程序和实验结果粘贴,程序能够注释清楚更好。

)本科实验报告专用纸(附页)该算法程序代码如下:#include "" #include ""int main(int argc, char* argv[]) {int x[100],y[100];int a,b,c,i,j,k,l,m,n=0,p,t1[100],num; int xsat[100],ysat[100];printf("请输入点的个数:\n"); scanf("%d",&num); getchar();clock_t start,end; start=clock();printf("请输入各点坐标:\n");for(l=0;l<num;l++){24℃一个程序,实现快速排序算法。

用该算法处理一批输入样本。

2).Tromino 谜题:Tromino 是一个由棋盘上的三个邻接方块组成的L 形瓦片。

我们的问题是,如何用Tromino 覆盖一个缺少了一个方块(可以在棋盘上的任何位置),的22n n 棋盘。

除了这个缺失的方块,Tromino 应该覆盖棋盘上的所有方块,而且不能有重叠。

为此问题设计一个分治算法。

1. 实验结果及分析:(将程序和实验结果粘贴,程序能够注释清楚更好。

)本科实验报告专用纸(附页)该算法程序代码如下:#include ""void swap(int *x,int *y) {int t;t=*x;*x=*y;*y=t; }int partition(int A[100],int l,int r){int p,i,j;p=A[l];i=l;j=r+1;do{do{i=i+1;if(i>j)break;}while(A[i]<p);do{j=j-1;if(j<i)break;}while(A[j]>p);swap(&A[i],&A[j]);}while(i<j);swap(&A[i],&A[j]);24℃用深度或广度优先查找,设计一个程序,对于一个给定的图,它能够输出每一个连通分量的顶点,并且能输出图的回路,或者返回一个消息表明图是无环的。

2).设计一个程序实现两种拓扑排序算法:DFS算法和减一算法并做一个实验来比较它们的运行时间。

3).编写程序实现选择问题,即求一个n个数列表的第k个最小元素。

1.实验结果及分析:(将程序和实验结果粘贴,程序能够注释清楚更好。

)本科实验报告专用纸(附页)算法程序代码如下:#include""int main(){int QSort(int [],int,int);int a[11];int k;printf("请输入一个11个数的数列:\n");for(k=0;k<11;k++)scanf("%d",&a[k]);QSort(a,0,10); }int QSort(int a[],int left,int right){ int i,j,temp,m=6;i=left;j=right;temp=a[left];if(left>right)return 0;while(i!=j){ while(a[j]>=temp && j>i)j--;if(j>i) a[i++]=a[j];while(a[i]<=temp && j>i)i++;本科实验报告专用纸(附页)if(j>i)a[j--]=a[i]; }a[i]=temp;if(i>m)QSort(a,left,i-1); 24℃24℃求总金额等于n的硬币的最少个数,并输出每种硬币的找零数量。

要求测试数据:硬币面额{d1,d2,…,dm} ={1,5,10,21,25},找零金额n=273。

1.实验结果及分析:(将程序和实验结果粘贴,程序能够注释清楚更好。

)该算法程序如下:#include <>int main(){int d[3],i,n;int ZL(int [],int);printf("输入4种硬币面额:\n");for(i=0;i<=3;i++)本科实验报告专用纸(附页){scanf("%d",&d[i]);}printf("输入要找零的金额:\n");scanf("%d",&n);ZL(d,n);}int ZL(int d[],int n){int a,b,c,k;a=n;for(k=3;k>=0;k--){c=a/d[k];b=a-c*d[k];a=b;printf("面值为%d的找零个数为%d个\n",d[k],c);}}程序运行结果如下:2.教师评语、评分:本科实验报告专用纸课程名称算法设计与分析成绩评定实验项目名称贪婪算法指导教师实验项目编号206实验项目类型验证或设计实验地点机房学生姓名学号学院信息科学技术学院数学系信息与计算科学专业级实验时间 2012年 3月 1 日~6月30日温度24℃1.实验目的和要求:熟悉贪婪算法的设计思想。

2.实验原理和主要内容:实验原理:贪婪法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,该选择都不会改变。

换言之,贪婪法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。

实验内容:以下题目任选其一1).编写程序实现Prim算法。

2).数列极差问题:在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的记作max,最小的记作min,求该数列的极差M=max-min。

利用贪婪算法编写程序实现数列极差问题。

3.实验结果及分析:(将程序和实验结果粘贴,程序能够注释清楚更好。

)本科实验报告专用纸(附页)该算法程序如下:#include <>#include <>#define N 6void sort(int a[])//用蛮力法将数列按从小到大的顺序排列{int i,j,k,t;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(a[j]<a[k])k=j;t=a[k];a[k]=a[i];a[i]=t;}}int Max(int a[])//计算数列中a*b+1的最大值{int i,j,t,m,n,b[N];for(i=0;i<N;i++)b[i]=a[i];for(j=1;j<N;j++){t=b[j-1]*b[j]+1;for(m=j+1;m<=N;m++){if(t<b[m]||m==N){for(n=j;n<m-1;n++)b[n]=b[n+1];b[m-1]=t;break;}}}return b[N-1];}int Min(int a[])//计算数列中a*b+1的最小值{int i,t;t=a[N-2];for(i=N-2;i>=0;i--){t=t*a[i]+1;}本科实验报告专用纸(附页)return t;}void main(){ oid sort(int a[]);int Max(int a[]);int Min(int a[]);int a[N],i,max,min,M;printf("请输入一个数组:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);sort(a);printf("排序后的数组为:\n");for(i=0;i<N;i++)printf("%d ",a[i]);printf("\n");max=Max(a);printf("最大值为: %d\n",max);min=Min(a);printf("最小值为: %d\n",min);M=max-min;printf("该数组的极差为:%d\n",M);}运行结果如下:4.教师评语、评分:。

相关主题