实验十 装载问题

一.问题

n个集装箱装上两艘载重分别为C和C2的轮船,w为集装箱i的重量,且之,W≤q+c2
问是否存在一种合理的装载方案将n个集装箱装上轮船?如果有,给出一种方案。

二.解析

定理:如果装载问题有解,则存在一一个使得第一条船装载量与c1的差达到最小的解。
证明:如果有解,假设一个解为船1 (c1)上装载: w1和w2
船2 (c2)上装载: w3,并且c1-(w1+w2)不为最小解。
由于现有解c1 -(w1+w2)不为最小解,则通过交换c1和c2上的物品,使得存在更小解,例如交换w2和w3,使得c1-(w,+W)<c1-(w1+w2);
通过以上方法,直到找到一个使得第一条船装载量与c1的差达到最小的解。
在这里插入图片描述

三.设计

(1)将w1, w2… wn按照递降排序(降序的目的是加快回溯,大的数据容易超出船1的载重).
(2)解向量<x1,x2…xk>. 其中x∈{0,1},1≤i≤n搜索空间是子集树
(3)在结点<x1,x2...xk >的约束条件:ΣWiXi≤c1(k,i=1)(4)满足多米诺条件: P.x.....++,(:.x2.....+)的某 个性质P(x,2....Xk+1)→P(x2.....xk) (0<k<n)要使回溯算法得到正确应用,必须满足多米诺性质.
在这里插入图片描述
在这里插入图片描述

四.分析

最坏情况要遍历图中所有结点,算法的时间复杂度为O(2")。因为,叶子结点有2”,每个结点要计算机装载量以判断是否回溯。

五.源码

https://github.com/syj-ll/algorithm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值