计算机算法设计与分析.docx
- 文档编号:2394343
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:8
- 大小:17.54KB
计算机算法设计与分析.docx
《计算机算法设计与分析.docx》由会员分享,可在线阅读,更多相关《计算机算法设计与分析.docx(8页珍藏版)》请在冰豆网上搜索。
计算机算法设计与分析
西安郵電大学
计算计算法设计与分析
课内实验报告书
院系名称
:
计算机学院
学生姓名
:
专业名称
:
软件工程
班级
:
软件1003班
学号
:
时间
:
2012年11月18日
指导教师
:
郭建峰
递归与分治策略实验
一、实验目的
掌握递归与分治策略的基本算法思想,可以应用解决相应的问题
2、实验环境
软件:
WindowsXP系统,vc++环境
三、实验内容
1、2-3二分搜索的改进
2、2-8不动点问题
3、快速排序
4、程序
1…改进的二分搜索
Intbinary(inta[],constint&x,intleft,intright,int&i,int&j)
{
Intmid;
while(left<=right){
mid=(left+right)/2;
If(x==a[mid])left=mid+1;
Elseright=mid-1;}
I=right;
j=left;
Return0;
}
2…不动点问题
intBinary(intT[],inti,intn)
{
intleft,right,mid;
left=0;right=n-1;
while(left<=right)
{
mid=(left+right)>>1;
if(i==T[mid])
{
printf("key%disfound,subscriptis%d\n",i,mid)
returnmid;
}
elseif(i>T[mid])
left=mid+1;
else
right=mid+1;
}
}
3…快速排序
#include
usingstd:
:
cout;
usingstd:
:
endl;
intPartition(int*R,intlow,inthigh){
R[0]=R[low];
intpivotkey=R[low];
cout< "< while(low while(low --high; } if(low R[low++]=R[high]; } while(low ++low; if(low R[high--]=R[low]; } } R[low]=R[0]; for(inti=1;i<=10;i++){ cout< } returnlow; } voidQSort(int*R,ints,intt){ if(s intpivotloc=Partition(R,s,t); QSort(R,s,pivotloc-1); QSort(R,pivotloc+1,t); } } intmain(){ intli[10]={24,34,43,67,76,6,37,92,60,13}; cout<<"注意: R[0]为数组的闲置分量"< for(inti=1;i<=10;i++){ cout< } cout< QSort(li,1,9); cout< for(inti=1;i<=10;i++){ cout< } cout< return0; } 五、体会及总结 通过本次试验,基本的理解了递归和分治的思想,大概掌握了二分查找和快速排序。 西安郵電大学 计算机算法设计与分析 课内实验报告书 院系名称 : 计算机学院 学生姓名 : 郭晓健 专业名称 : 软件工程 班级 : 软件1003班 学号 : 04103077 时间 : 2012年11月18日 指导教师 : 郭建峰 动态规划实验 一、实验目的 理解动态规划算法的思想 掌握典型动态规划问题的解法 二、实验环境 WindowsXP系统,vc++环境 三、实验内容 1、0-1背包问题 1、最长公共子序列问题 2、3-5背包问题的扩展 四、程序 1…0-1背包问题 intKnapsack(intm,intn) { intc[10][100]; inti,j,w[10],p[10]; for(i=1;i scanf("\n%d,%d",&w[i],&p[i]); for(i=0;i<10;i++) for(j=0;j<100;j++) c[i][j]=0; for(i=1;i for(j=1;j { if(w[i]<=j){ if(p[i]+c[i-1][j-w[i]]>c[i-1][j]) c[i][j]=p[i]+c[i-1][j-w[i]]; else c[i][j]=c[i-1][j]; }else c[i][j]=c[i-1][j]; } return(c[n][m]); } intmain() { intm,n;inti,j; printf("inputthemaxcapacityandthenumberofthegoods: \n"); scanf("%d,%d",&m,&n); printf("Inputeachone(weightandvalue): \n"); printf("%d",Knapsack(m,n)); printf("\n"); for(i=0;i<10;i++) for(j=0;j<15;j++) { printf("%d",c[i][j]); if(j==14)printf("\n"); } system("pause"); } 2…最长公共子序列问题 #defineMAXLEN100 voidLCSLength(char*x,char*y,intm,intn,intc[][MAXLEN],intb[][MAXLEN]) { inti,j; for(i=0;i<=m;i++) c[i][0]=0; for(j=1;j<=n;j++) c[0][j]=0; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(x[i-1]==y[j-1]) { c[i][j]=c[i-1][j-1]+1; b[i][j]=0; } elseif(c[i-1][j]>=c[i][j-1]) { c[i][j]=c[i-1][j]; b[i][j]=1; } else { c[i][j]=c[i][j-1]; b[i][j]=-1; } } } } voidPrintLCS(intb[][MAXLEN],char*x,inti,intj) { if(i==0||j==0) return; if(b[i][j]==0) { PrintLCS(b,x,i-1,j-1); printf("%c",x[i-1]); } elseif(b[i][j]==1) PrintLCS(b,x,i-1,j); else PrintLCS(b,x,i,j-1); } intmain(intargc,char**argv) { charx[MAXLEN]={"ABCBDAB"}; chary[MAXLEN]={"BDCABA"}; intb[MAXLEN][MAXLEN]; intc[MAXLEN][MAXLEN]; intm,n; m=strlen(x); n=strlen(y); LCSLength(x,y,m,n,c,b); PrintLCS(b,x,m,n); return0; } 3…3-5背包问题的扩展 #defineN600 intmax(inta,intb) { returna>b? a: b; } intmain() { inti,j,k,n; intV,W,p; intc[10],w[10],pr[10],v[10]; intf[N][N]; while(scanf("%d",&n)! =EOF) { scanf("%d%d",&V,&W); for(i=1;i<=n;i++) scanf("%d%d%d%d",&v[i],&w[i],&c[i],&pr[i]); memset(f,0,sizeof(f)); for(i=1;i<=n;i++) { for(j=1;j<=c[i];j*=2) { for(k=W;k>=j*w[i];k--) { for(p=V;p>=j*v[i];p--) { f[k][p]=max(f[k][p],f[k-j*w[i]][p-j*v[i]]+j*pr[i]); } } c[i]-=j; } j=c[i]; for(k=W;k>=j*w[i];k--) { for(p=V;p>=j*v[i];p--) { f[k][p]=max(f[k][p],f[k-j*w[i]][p-j*v[i]]+j*pr[i]); } } } printf("%d\n",f[W][V]); } } 五、体会及总结 通过本次实验,基本掌握了动态规划问题,熟悉了0-1背包问题的求解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 设计 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)