贪心算法:最优装载问题(java版本)
来源:互联网 发布:js随机数1到10 编辑:程序博客网 时间:2024/06/07 04:52
最优装载问题
问题描述:
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重 量为wi
最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船
解决方案:
写三个类
Element类是个javaBean,属性是集装箱的重量和编号
MergeSort类用来排序(采用递归算法的快速排序)
LoadingMain类是解决最优装载问题的主类,并带有主方法和测试数据
Element 类:
public class Element implements Comparable{ int w;//集装箱的重量 int i;//集装箱编号 public Element(int w, int i) { super(); this.w = w; this.i = i; } @Override public int compareTo(Object obj) { float weight=((Element) obj).w; if(w<weight) return -1; if(w==weight) return 0; return 1; } public int getW() { return w; } public void setW(int w) { this.w = w; } public int getI() { return i; } public void setI(int i) { this.i = i; }}
MergeSort类:
public class MergeSort { public static void mergeSort(Element nums[],int low,int high){ if(low<high){//至少有两个元素 int mid=(low+high)/2;//取中点 //左边 mergeSort(nums,low,mid); //右边 mergeSort(nums,mid+1,high); //左右归并 merge(nums,low,mid,high); } } private static void merge(Element[] nums,int low,int mid,int high) { //合并c[1:m]和c[m+1:r]到d[l:r] int i=low,j=mid+1,k=0; Element temp[]=new Element[high-low+1]; //把数排好序放进temp数组中 while((i<=mid)&&(j<=high)){ //把小的的放进temp数组中 if(nums[i].getW()-nums[j].getW()<=0) temp[k++]=nums[i++]; else temp[k++]=nums[j++]; } //若左边的先遍历完,则把右边剩下的放进temp数组中 while(i<=mid) temp[k++]=nums[i++]; //若右边的先遍历完,则把左边剩下的放进temp数组中 while(j<=high) temp[k++]=nums[j++];// 把temp中的数放回nums数组中 for(int p = 0;p<temp.length;p++){ nums[low+p]=temp[p]; } }}
LoadingMain类:
/*最优装载 * 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为wi。 * 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船*/public class LoadingMain { /*float c:轮船的载重量,float[] w:第i个集装箱的重量, * int[] x:取0或1 0代表不装入集装箱i,1代表装入集装箱i*/ public static int loading(int c,int[] w,int[] x){ int n=w.length;//n代表集装箱的个数 Element[]d=new Element[n];//n个存着集装箱编号和重量的Element元素组成一个数组 for(int i=0;i<n;i++)//n次循环,给数组中的每一个元素装上值 d[i]=new Element(w[i], i); MergeSort.mergeSort(d,0,d.length-1);//数组中元素按照集装箱重量由小到大排序 int opt=0; for(int i=0;i<n;i++) x[i]=0;//所有集装箱一开始都没有装上船,所以把x置为0 for(int i=0;i<n&&d[i].w<c;i++){ x[d[i].i]=1;//相应编号的集装箱的装入标志设为1 opt++; c-=d[i].w; } return opt;//返回的是装入集装箱的个数 } public static void main(String[] args) { int c=50; int[] w={7,35,25,15,10,4,3,2}; int[] x={0,0,0,0,0,0,0,0}; System.out.println("最多装入"+loading(c, w, x)+"个集装箱"); }}
0 0
- 贪心算法:最优装载问题(java版本)
- 贪心算法 最优装载问题
- 最优装载问题--贪心算法
- 算法java实现--贪心算法--最优装载问题
- 最优装载(贪心算法)
- 最优装载问题(贪心)
- 贪心算法之最优装载问题
- 最优装载问题_贪心算法
- 贪心算法-4.3最优装载问题
- 贪心算法——最优装载问题
- 贪心算法-最优装载
- 贪心-最优装载问题
- 贪心,最优装载问题
- 算法设计例题:最优装载(贪心)
- 最优装载问题(贪心基础)
- 最优装载(贪心)
- 贪心算法之最优装载
- 贪心入门--最优装载问题
- 第十三周项目4-floyd算法的验证
- PHP发送邮件
- android判断是否后台运行
- 说明
- python 排序
- 贪心算法:最优装载问题(java版本)
- ibatis bindingexception invalid bound statement
- 最大子列和的四种算法比较
- day07
- Android代码连接Wifi时被系统切换到其他Wifi的问题
- Dojo1.11官方教程文档翻译(3.2)使用dojo/query
- Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤
- JSP AJAX之Form序列化登录体验
- homerHEVC代码阅读(30)——帧间预测的主函数