1.请用回溯法分析“最小重量机器设计问题”
一共有n个部件,每个部件可选m个厂家,给出最大价格,求出最小重量,通过这道题给出的信息,可构造的深度为n的m叉解空间树,
最大价格作为本题的限界条件,除去一些不符合条件的解,而目前求出的最小重量可作为剪枝策略来提高算法效率,遇到不符合条件的解就向上回溯到条件范围内的上一结点继续向下。
构造v,w两个二维数组来存放价格,重量,max_c代表最大价格min_w代表当前求得符合条件的最小重量,cv,cw代表当前选择商品的总价格和总重量,如果cv>max_c则放弃遍历当前结点以及其所有子节点(此为限界条件),如果未到达叶子节点cw>min_w表明虽在价格范围内但未选完已经超过目前最小重量,同样放弃遍历当前结点及其叶子节点(此为剪枝策略)。
{{1,3,1},{1,3,2},{1,3,3}}
如图所示红色划线部分为解空间树
如图示
回溯算法个人认为就是穷举,把会出现的情况都列举出来然后挑去符合条件的解(可以用来求问题最优解或者是符合条件的解),既然是穷举那么它的时间效率或者是空间效率就不是很高甚至非常糟糕,所以回溯算法最核心的点就是如何给解空间树剪枝来提高算法的效率,首先这种方法当然需要根据实际情况来做出限界(不符合规则的解不要),但是还远远不够,我们还需要根据目前得到的解来推断接下来的选择是否合理,能够在深度在不算太深的情况下剪除大量的数据。
以上是我对回溯算法的理解。