算法第五章作业
一.问题描述
7-2 最小重量机器设计问题 (25 分)
设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij是从供应商j 处购得的部件i的重量,cij是相应的价格。 试设计一个算法,给出总价格不超过d的最小重量机器设计。
输入格式:
第一行有3 个正整数n ,m和d, 0<n<30, 0<m<30, 接下来的2n 行,每行n个数。前n行是c,后n行是w。
输出格式:
输出计算出的最小重量,以及每个部件的供应商
二.算法描述
三.问题求解
1.回溯法
初始化供应商数量及部件数量,然后初始化部件的一些属性作为测试数据。程序关键点是中间变量的总价值取较小的那个,总重量与最小重量c的比对是否达到最小,最优。
2.算法解释
每次回溯后会根据不同选择的供应商更新对应位置的节点,每个结点的状态值是该点的总重量w和当前价格,不断回溯来比较价格变化。问题是求所选购部件的总价格不超过c 的最小机器重量。
这里采用的是穷举法计算所有的组合情况下的总重量及总价值,同时判断总价格不超过c的情况下,比对最小总重量与当前总重量,取较小的一个。
四.回溯法心得体会、
回溯法模板
void Backtrack(int t) {//以深度优先的方式遍历第t层中的某棵子树 if(t>n) { Output(x); return; } if (……) { x[t]=1; Backtrack(t+1); } if (……) { x[t]=0; Backtrack(t+1); } }
回溯法是一种选优搜索法,即探索与回溯法,又称为试探法,安选优条件向前搜索,以达到目标。如果探索到某一步时,发现无法达到最优解或者无解,则退回到上一步,即回溯,直到选出最优解为止。
回溯过程中之前走到的位置,可以是上个选择,也可以是根据算法自定条件的位置,甚至可以是原点,但是一般不考虑原点,会出现死循环。
回溯算法解题的一个显著特征,是在搜索解的过程中动态的产生问题的解空间。在任何时候,算法只保存从根节点到当前扩展结点的路劲。如果解空间树中从根节点到叶节点的最长路径的长度为h(n),则回溯法所需要的计算空间通常为O(h(n))。