贪心,最优装载问题

问题描述:

有一批集装箱要装上一艘载重量为c的轮船,其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

分析:

可用贪心算法求解,采用重量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。具体算法描述如下:

public static float loading(float c,float[]w,int[]x)
{
int n=w.length;
Boxes[]d=new Boxes[n];
for(int i=0;i<n;i++)
d[i]=new Boxes(w[i],i);
MergeSort.mergeSort(d);         //使用排序时一定要注意待排序的元素要有可比性
float opt=0;
for(int i=0;i<n;i++)x[i]=0;
for(int i=0;i<n&&d[i].w<=c;i++)
{
x[d[i].i]=1;
opt+=d[i].w;
c-=d[i].w;
}
return opt;
}
public static class Boxes implements Comparable
{
float w;
int i;
public Boxes(float w,int i)
{
this.w=w;
this.i=i;
}
public int compareTo(Object x)             //覆写Comparable接口中的方法,方法名以及参数一定要一致
{
float xw=((Boxes)x).w;
if(w<xw)return -1;
if(w==xw)return 0;
return 1;


}
}

总结:

1.本例算法较为简单,注意排序时应具有可比较性。

2.本例中贪心的实质是指,每次选择时总是选择重量最小的。

3.如何应用贪心算法?(1)具有贪心选择性。(2)具有最优子结构性质

  碰到类似问题时,可以搜索一下该类问题是否能够用贪心算法去解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值