一、 请用回溯法的方法分析“最小重量机器设计问题”
题目内容:设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。
试设计一个算法,给出总价格不超过d的最小重量机器设计。
1.1 说明“最小重量机器设计问题"的解空间
在样例n=3,m=3时,解空间为
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3)
(2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3)
(3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)
1.2 说明 “最小重量机器设计问题"的解空间树
1.3 在遍历解空间树的过程中,每个结点的状态值是什么
1.4 如何利用限界函数进行剪枝
void Backtrack(int t)
{
if (t > n) //搜索到叶子结点,一个搜索结束,所有零件已经找完
{
bestw = cw; //当前最小重量
for (int j = 1; j <= n; j++)
bestx[j] = x[j];
}
else
{
for (int j = 1; j <= m; j++)
{
x[t] = j;
cp=cp+c[t][j];
cw=cw+w[t][j];
if (cp <= d && cw < bestw) //剪枝
Backtrack(t + 1);
cp=cp-c[t][j]; //回溯
cw=cw-w[t][j];
}
}
}
2. 你对回溯算法的理解
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。