算法第五章作业
1. 请用回溯法的方法分析“最小重量机器设计问题”
1.1 说明“最小重量机器设计问题"的解空间
解空间是二叉树叶子节点的重量,通过比较叶子节点的重量得出最小重量。
1.2 说明 “最小重量机器设计问题"的解空间树
第几层代表第几件物品,每个节点有三个分支,每个分支分别代表一个供应商。
1.3 在遍历解空间树的过程中,每个结点的状态值是什么
每个节点的状态值如下:
x[t], nP, nW // x[t]代表选择第几个供应商,nP:当前价格,nW:当前质量
2. 你对回溯算法的理解
回溯算法是一种选优搜索法,按选优条件向前搜索,以达到目标。简单的说是在搜索过程中寻找问题的解,当发现已不满足求解条件时,就回溯返回,尝试别的路径。
当探索到某一步时,发现原先选择不是目前的最优解或不满足问题条件时,就退回一步重新选择,并减去当前步骤的节点对应的值。
以上一问中“最小重量机器设计问题”为例,回溯算法如下:
void Backtrack(int t) { if (t > n) { bW = nW; for (int i = 1; i <= n; i++) result[i] = x[i]; return; } for (int i = 1; i <= m; i++) { //遍历每个分支 if (nP + c[t][i] <= d && nW + w[t][i] < bW) { //判断是否目前的最优解或不满足问题条件 x[t] = i; nP += c[t][i]; nW += w[t][i]; Backtrack(t + 1); //进到下一层 nP -= c[t][i]; nW -= w[t][i]; //退回一步重新选择,并减去当前步骤的节点对应的值。 } } }