算法第五章回溯法作业

一、问题描述

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. 请用回溯法的方法分析“最小重量机器设计问题”

从第一个部件开始,如果第一个供应商提供的第1个部件的价格没有超过规定的总价d的话,那么选择第一个部件是由第1个供应商提供,如果超过的话就判断第二个供应商提供的价格是否满足要求,满足则选,不满足继续搜索,直到满足要求为止,此时更新记录当前价格和重量的两个变量值。接下来依次选择第2个、第3个……第n个部件的供应商,方法同上。

如果有多种方案都满足总价不超过d的要求的话,那么比较每种方案部件的总重量,选择总重量最小的那个方案。

 

1.1说明“最小重量机器设计问题"的解空间

一共有n个部件,m个供应商,理论上就有m的n次方个解。

 

1.2 说明“最小重量机器设计问题"的解空间树

 

 根节点的curPrice=0,curWeight=0,表示当前没有选择任何一个供应商。接下来的一层,是选择第一个部件由谁提供,选择其中的一个供应商后,更新对应的curPrice curWeight值;接着选择第二个部件由哪个供应商提供,直到选择完所有的部件。这时再与记录的找到的最优解比较,如果这一次遍历找到的总重量比最优解的总重量还小,比最优解更优,那么就更新最优解。

在遍历的过程中,有时候会遇到明显不满足要求、不必再往下继续遍历的情况,这时候要设计一个剪枝算法来减少计算。

剪枝的条件就是:如果本次搜索部件的总价格已经超过了要求的d价格,或者是目前的总重量已经超出了最优解的总重量时,那么明显不是最优解,不必再往下继续搜索遍历,剪去这一分支、继续寻找别的解决方法即可。

 

1.3 在遍历解空间树的过程中,每个结点的状态值是什么

每个结点有两个状态值,分别是当前的总价格、当前的总重量。

 

2. 你对回溯算法的理解

我觉得回溯法是一个很直观的算法,解空间树可以让我很直观地感受到问题是怎样一步步被求解的。但是回溯法也有一个很明显的缺点,它几乎把问题所有可能的解都遍历了一遍,时间复杂度很高,如果不采用剪枝和限界函数的话,运行时间可能会非常长。

 

posted @ 2021-12-12 10:30  惜曦华兮  阅读(105)  评论(0编辑  收藏  举报