算法设计第五章作业

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

题目内容:设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得。设wij​是从供应商j 处购得的部件i的重量,cij​是相应的价格。
试设计一个算法,给出总价格不超过d的最小重量机器设计。

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

在样例n=3,m=3时,解空间为

(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3)
(2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3)
(3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)

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

广度优先遍历:

 

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

是当前已选部件的总价值和当前已选部件占有的总重量

二、 对回溯算法的理解

回溯算法有一个大体不变的框架,类似遍历,但又记录下了变化状态,可以通过剪枝和约束条件减少回溯的数量,提高效率。本质是将问题的解空间以树或图的结构表示,然后使用深度优先搜索策略进行遍历,在遍历的过程中给出所有可行解或者最优解。

其中数据回溯的特点将数据记录量大大减少,仅取最优解。

void back(int t){

if ( t == n){

        bestc = 当前最优解(可以是最大,也可以是最小,根据题目决定);

}

for(int i = 1;i <= n;i++){

//当只有两个选择,如0-1背包问题,则只需要判断选择左子树还是右子树即可,相当于n = 2

        记录数据变化;

        向下遍历;//可以添加一些约束条件

        回溯数据;

}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值