实验报告
课程名称 《算法分析与设计》 实验日期 2021年5月10日 至 2021年 5 月 16 日
学生姓名 戴子博 所在班级 计算机194 学号 2019212212130
实验名称 LCS算法和背包算法
实验地点 勤园13-208 同组人员
1.问题
LCS:
背包算法:
2.解析
LCS:
背包算法:
3.设计
LCS:
void LCS(char a[N],char b[N]){
int m,n;
m=strlen(a);
n=strlen(b);
memset(c,0,sizeof(c));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(a[i-1]==b[j-1])
c[i][j]=c[i-1][j-1]+1;
else
c[i][j]=max(c[i][j-1],c[i-1][j]);
}
}
int i=m,j=n;
stack<char>s;
while(c[i][j]){
if(c[i][j]==c[i-1][j])
i--;
else if(c[i][j]==c[i][j-1])
j--;
else if(c[i][j]>c[i-1][j-1]){
i--;
j--;
s.push(a[i]);
}
}
while(!s.empty())
{
t=s.top();
cout<<t;
s.pop();
}
}
背包算法:
void knapsack(int n,float b,float w[],float v[]){
Node node[n];
float sum=0;
for(int i=0;i<n;i++){
node[i].v=v[i];
node[i].w=w[i];
node[i].vw=node[i].v/node[i].w;
}
sort(node,node+n,cmp);
float t=b;
for(int i=0;i<n;i++){
if(t<node[i].w)
continue;
sum+=node[i].v;
t-=node[i].w;
}
cout<<sum;
}
4.分析
Lcs:O(n^2)
背包算法:O(n*m)
5.源码
博客地址:https://blog.csdn.net/shaojinfu?spm=1000.2115.3001.5343
github源码地址:https://github.com/CNFierceman/Algorithm_homework.git