计算机算法设计与分析Word下载.docx
- 文档编号:15311393
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:8
- 大小:17.54KB
计算机算法设计与分析Word下载.docx
《计算机算法设计与分析Word下载.docx》由会员分享,可在线阅读,更多相关《计算机算法设计与分析Word下载.docx(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;
=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<
iostream>
usingstd:
:
cout;
endl;
intPartition(int*R,intlow,inthigh){
R[0]=R[low];
intpivotkey=R[low];
cout<
<
endl<
"
pivotkey:
<
pivotkey<
endl;
while(low<
high){
while(low<
high&
&
R[high]>
=pivotkey){
--high;
}
if(low<
high){
R[low++]=R[high];
}
while(low<
R[low]<
=pivotkey)
++low;
if(low<
R[high--]=R[low];
R[low]=R[0];
for(inti=1;
i<
=10;
i++){
cout<
R[i-1]<
;
returnlow;
}
voidQSort(int*R,ints,intt){
if(s<
t){
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]为数组的闲置分量"
li[i-1]<
QSort(li,1,9);
return0;
五、体会及总结
通过本次试验,基本的理解了递归和分治的思想,大概掌握了二分查找和快速排序。
计算机算法设计与分析
郭晓健
04103077
动态规划实验
理解动态规划算法的思想
掌握典型动态规划问题的解法
二、实验环境
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<
n+1;
i++)
scanf("
\n%d,%d"
&
w[i],&
p[i]);
for(i=0;
10;
for(j=0;
j<
100;
j++)
c[i][j]=0;
for(j=1;
m+1;
{
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
return(c[n][m]);
intmain()
intm,n;
inti,j;
inputthemaxcapacityandthenumberofthegoods:
\n"
);
%d,%d"
m,&
n);
printf("
Inputeachone(weightandvalue):
%d"
Knapsack(m,n));
15;
%d"
c[i][j]);
if(j==14)printf("
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;
{
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);
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;
inti,j,k,n;
intV,W,p;
intc[10],w[10],pr[10],v[10];
intf[N][N];
while(scanf("
&
n)!
=EOF)
%d%d"
V,&
W);
%d%d%d%d"
v[i],&
w[i],&
c[i],&
pr[i]);
memset(f,0,sizeof(f));
i++)
{
for(j=1;
=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];
k--)
for(p=V;
%d\n"
f[W][V]);
通过本次实验,基本掌握了动态规划问题,熟悉了0-1背包问题的求解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 设计 分析