装载问题

解算法:动态规划、贪心算法、回溯法都可以


目录:

1,问题描述

2,涉及变量、定量

3,证明


拓展:

1,附加变量、定量

2,证明

3,解法思路



1,问题描述:
有n个重量为w(i)的集装箱,要装入到两艘轮船A和B,轮船的载重量分别为W(1)和W(2),问:能否找到一组装载方案?

2,涉及变量、定量:
W(1):第一艘轮船的载重量(最大能装的重量)
W(2):第二艘轮船的载重量
A:第一艘轮船
B:第二艘轮船
w(i):第i个集装箱的重量
n:集装箱的数量
w:集装箱总重
cw(1):第一艘轮船的当前载重量(现在装了多少)
cw(2):第二艘轮船的当前载重量
mw(1):第一艘轮船的最优载重量(装载的最优情况)
mw(2):第二艘轮船的最优载重量


关键词:载重量、当前载重量、最优载重量


3,证明:
(1)若要往一艘轮船中装载集装箱,那么尽量使得载重量最大。(这里可用贪心,也可以用动态规划)
证明:若A轮船装了cw(1)。这时如果可以优化A轮船的装载方案,使得mw(1),这是合理的。
因为w-cw(1)>=w-mw(1),B轮船肯定能装下剩余的集装箱


(2)要先尽量往哪个轮船装集装箱呢?
证明:假设是有解的
①W(1)=W(2):属于划分问题,尽量将A轮船装满是合理的
②W(1)>W(2)且W(1)=mw(1):必然w-mw(1)<=W(2)
③W(1)>W(2)且W(1)>mw(1):mw(1)是A轮船的最优载重量,所以必然mw(1)>=cw(1),则这时w-mw(1)<=cw(2)<=W(2)。B轮船必然能装下剩余的集装箱
④W(1)<W(2)且W(1)=mw(1):同②
⑤W(1)<W(2)且W(1)<mw(1):同③
综上,尽量往哪个轮船装集装箱都是合理的。


-------------------------------------分割线---------------------------


拓展:
有n个重量为wi的集装箱,要装入到m艘轮船,轮船的载重量为Wj,问:能否找到一组装载方案?


好,现在来思考一下这个比较现实的问题,同样先假设是有解的,那么令m艘轮船的当前载重量分别为cw(1)、cw(2)、……、cw(m)


1,附加变量、定量:
cw(i,j):表示第i艘轮船与第j艘轮船的总的当前载重量
mw(i,j):表示第i艘轮船与第j艘轮船的总的最优载重量


2,证明:
(1)当只有3艘轮船A、B、C时,使得其中两艘轮船的当前载重量最优,是合理的
证明:这其实就相当于是将其中两艘轮船融合在一起(但是并不是完全融合,因为还是会有一些能空出来的地方能装东西)


假设轮船A与轮船B的总的当前载重量为cw(1,2),则若更改装载方案,使得mw(1,2)。
这时w-mw(1,2)<=w-cw(1,2)<=cw(3),显然这是合理的


(2)尽量装满载重量大的轮船
证明:而上述的(1)证明中,其实并没有硬性要求轮船A、B的载重量都大于C。那么,可以类似地求解当轮船数为m时的情况。


数学归纳法:
①假设当k=2时,命题成立。根据前面的k=2时的证明可知,k=2时,命题是成立的。
②假设当k=m且m>2时,命题成立。即当k=m时,尽量装满载重量大的轮船时合理的。
当k=m+1且m>2时,由上面的(1)可知,轮船的组合并没有硬性要求。
综上可知,尽量装满载重量大的轮船是合理的。


3,解法思路:
(1)将所有集装箱进行降序排序
(2)将所有轮船按其载重量进行降序排序
(3)用贪心法,逐个逐个将轮船装满
(4)若当所有轮船都遍历完毕时,没有剩余的集装箱则表示有解;否则无解


算法复杂度:
O(n,m) = O(n)+O(m)+O(nm)


算法优化:
在平均情况下进行优化
(1)记录仍未装载的、重量最大的集装箱的下标,一轮结束后直接从该下标开始,减少考虑范围。
(2)构造最优解:令整型数组x[n]中,0表示未装箱,i表示第i个轮船装载了该集装箱


-------------------------------------分割线---------------------------


升级:
有n个重量为wi的集装箱(长宽高分别为a、b、c),要装入到m艘轮船(装箱长宽高分别为A、B、C),轮船的载重量为Wj,问:能否找到一组装载方案?



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值