算法第五章上机实践作业

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。

输出格式:

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

输入样例:

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 


一、用回溯法的方法分析“最小重量机器设计问题”

题目背景是:有n个部件,每个部件可从m个不同的供应商处获取,每个供应商出的价格不一样,要求n个部件花费最多不超过d元 。然后Wij是从供应商j 处购得的部件i的重量,Cij是相应的价格,要求计算出n个部件的最小总重量以及每个部件的供应商。

 

二、 解空间说明

解空间为每个部件选择的供应商,每个部件都可从m个供应商中选,最后得解空间的大小为m^n。

 

三、解空间树说明

用回溯法解决问题时通常要用解空间树进行搜索遍历。其模式图如下:

 

四、 在遍历解空间树的过程中,每个结点的状态值如下:

curv:当前总价值

curw:当前总重量

 

五、代码实现:

 

六、 对回溯算法的理解

我认为回溯法有一个固定的格式就是:先把遍历到了叶子结点的情况写出来,对各结果进行更新最优解。然后找出可满足遍历的条件,如果选择了这个物品就要进行一层层地状态更新并回溯,如果没有选择物品,转态不变但是要回溯,最后就是利用约束函数和限界函数在遍历过程中进行剪枝,才能降低时间复杂度,使算法变得更快。

我觉得回溯法最难的就是理解t层和当前状态的区别,还有找出对应的约束函数或者限界函数。

posted @ 2021-12-16 17:40  Sandgirl  阅读(53)  评论(0编辑  收藏  举报