算法第五章作业报告

算法第五章作业报告

1. 回溯法的方法分析“最小重量机器设计问题”

题目详情

最小重量机器设计问题
 

设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。

输入格式:

第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行n个数。前n行是c,后n行是w。

输出格式:

输出计算出的最小重量,以及每个部件的供应商

输入样例:

3 3 4
1 2 3
3 2 1
2 2 2
1 2 3
3 2 1
2 2 2
 
结尾无空行

输出样例:

在这里给出相应的输出。例如:

4
1 3 1 

1.1 “最小重量机器设计问题"的解空间

对于n个部件,每一个部件可以从m个不同的供应商处获得,该问题的解空间由长度为n的 0 - 1向量组成。

1.2  “最小重量机器设计问题"的解空间树

运用回溯法求解,其解空间树每一层代表一个部件对于供应商的选择,故每一个非子节点都有对应的m个节点(代表了对不同的供应商的选择)

1.3 在遍历解空间树的过程中,每个结点的状态值是什么

t:代表对第t个部件的供应商的选择

cw:代表当前走到的节点已选的物件的总重量

cv:代表当前走到的节点已选的物件的总价值

代码如下:

void backtrack(int t){
if(t>n){
if(nw<minw){
minw=nw;
for(int j=1;j<=n;j++)
bestx[j]=x[j];
}
}
else{
for(int i=1;i<=m;i++){
nc+=c[t][i];
nw+=w[t][i];
x[t]=i;
if(nc<=d && nw<=minw)
backtrack(t+1);
nc-=c[t][i];
nw-=w[t][i];
}
}
}

2. 对回溯算法的理解

回溯法也是深度优先搜索法,实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径,满足回溯条件的某个状态的点称为“回溯点”。

在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。

回溯法一般包含以下几步:

1,定义解空间:针对所给问题,确定问题的解空间:首先应明确定义问题的解空间,问题的
解空间应至少包含问题的一个(最优)解。

2,确定结点的扩展搜索规则。

3,以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

 

posted @ 2021-12-16 18:58  柒柒子  阅读(31)  评论(0编辑  收藏  举报