算法第五章作业
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(3个零部件,3家供应商,总价格不超过4,下列2个二维数组一维代表第几个零部件,二维代表第几家供应商)
(价格)
1 2 3
3 2 1
2 2 2
(重量)
1 2 3
3 2 1
2 2 2
输出样例:
4
1 3 1
1.1 说明“最小重量机器设计问题”的解空间
解空间是该问题所有可能解的集和,因此本题的解空间是{{1,3,1},{1,3,2},{1,3,3}}。
1.2 说明“最小重量机器设计问题”的解空间树
如图所示:
1.3 在遍历解空间树的过程中,每个结点的状态值是什么
每个结点状态值是从根结点到当前的总重量cw,以及当前的总价格cv。
2.对回溯算法的理解
回溯算法其实就是对问题的所有可能路径进行穷举,通过构造一棵虚拟的二叉树或 n叉树,通过深度优先搜索路径对整棵树进行遍历,在遍历过程中进行不同可能解的搜索,进而得到整个问题的最优解。由于穷举的时间复杂度很大,因此需要通过一定的剪枝条件来降低回溯算法的时间复杂度,以此来提高算法的效率。在回溯算法中,通常需要建立假想的树以及可能需要的记录路径的数组和交换算法来辅助完成编程,在不同的解的比较之下找到问题的最佳答案。