最优装载问题_贪心
一、 问题描述 有一批集装箱要装上一艘载重为C的轮船。其中集装箱i的重量为Wi。最优装载问题要去确定在装载体积不受限制的情况下,将极可能多的集装箱装上轮船。 二、 解题思路及所选算法策略的可行性分析 使用贪心算法。 问题描述为 : max∑Xi,∑WiXi<=C,Xi∈{0,1} 1<=i<=n 其中,变量Xi=0表示不装入集装箱i,Xi=1表示装入集装箱i。 贪心选择性质 : 设集装箱已依其重量从小到大排序,(X1,X2,…,Xn)是最优装问题的一个最优解。又设k=min{i|Xi=1}。易知,如果给定的最优装载问题有解,则1<i<=n,i!=k,则 ∑WiYi = Wi - Wk + ∑WiXi <= ∑WiXi <= C 因此,(Yz,Y2,…,Yn)是所给最优装载问题的可行解。 另一方面,由∑Yi = ∑Xi知,(Y1,Y2,…,Yn)是满足贪心选择性质的最优解。 最优子结构性质 : 设(X1,X2,…,Xn)是最优装载问题的满足贪心选择性质的最优解,则容易知道,X1=1,且(X2,…,Xn)是轮船载重量为C-W1,待装载集装箱为{2,3,…,n}时相应最优集装箱问题的最优解。也及时说,最优集装箱装载问题具有最优子结构性质。 三、 代码描述及复杂度分析 Loading(float c, float[]w, int[] x) { 创建集装箱数组,存放每个集装箱重量及其序号;