问题描述:
有一批集装箱要装上一艘载重量为C的轮船,要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
算法分析:
采用重量轻者先装的贪心选择策略,可产生最优装载问题的最优解。
算法实现:
OptinalLoading.java
/*
* 最优装载
* 有一批集装箱要装上一艘载重量为C的轮船。
* 要求在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
* 算法分析:
* 采用重量最轻者先装的贪心选择策略
*
* date: 2010/12/12
* auther:cm
*
*/
import java.util.Arrays;
public class OptinalLoading
{
private double c; //载重量
private LContainer[] loadC; //集装箱数组
private int count; //可装入总数
public OptinalLoading(double c, double[] w)
{
this.c = c;
this.loadC = new LContainer[w.length];
for (int i = 0; i < w.length; i++)
{
loadC[i] = new LContainer(w[i], i);
}
}
public void optinalLoading()
{
Arrays.sort(loadC);
double max = c;
double sum = 0.0;
for (int i = 0; i < loadC.length&&loadC[i].getW()<=max; i++)
{
loadC[i].setLoadFlag(true);
count++;
sum += loadC[i].getW();
max -= loadC[i].getW();
}
}
public LContainer[] getLoadC()
{
return loadC;
}
public int getCount()
{
return count;
}
public static void main(String[] args)
{
double c = 1000;
double[] w = {800, 1000, 1001, 200, 100, 400, 600, 50};
OptinalLoading opt = new OptinalLoading(c, w);
opt.optinalLoading();
int count = opt.getCount();
LContainer[] cc = opt.getLoadC();
System.out.println(count);
for (int i = 0; i < cc.length; i++)
{
if (cc[i].getLoadFlag())
{
System.out.print(cc[i].getId() + " ");
}
}
}
}
LContainer.java
//集装箱类
public class LContainer implements Comparable
{
private int id; //编号
private double w; //重量
private boolean loadFlag = false; //是否装船标识
public LContainer()
{
}
public LContainer(double w, int id)
{
this.id = id;
this.w = w;
}
public int compareTo(Object obj)
{
double ww = ((LContainer)obj).getW();
if (this.w > ww)
{
return 1;
}
else if (this.w < ww)
{
return -1;
}
else
{
return 0;
}
}
public void setId(int id)
{
this.id = id;
}
public int getId()
{
return id;
}
public void setW(double w)
{
this.w = w;
}
public double getW()
{
return w;
}
public void setLoadFlag(boolean loadFlag)
{
this.loadFlag = loadFlag;
}
public boolean getLoadFlag()
{
return loadFlag;
}
}
分享到:
相关推荐
最优装载问题——回溯法 最优装载问题——回溯法 最优装载问题——回溯法
### 最优装载问题(贪心算法)c++ #### 问题背景与定义 最优装载问题是在计算机科学和运筹学中的一个经典问题。该问题描述了一种情况:假设有一艘轮船,其最大载重量为\( c \)吨,现在有一批集装箱需要装载到这艘...
最优装载问题,也被称为集装箱装载或货车装载问题,是一个经典的组合优化问题,广泛应用于物流、运输和资源分配等领域。在该问题中,我们需要在有限的空间内最大化装载物品的数量,同时确保不超出容器的容量限制。这...
贪心法解决最优装载问题 输入 20 2000 125 89.5 142.8 65 298 100 150 86 88 42 55 16 129.6 238.6 45 110 217 168 180 80 输出 1888.9 18 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
算法设计与分析用分支限界法解决最优装载问题,,,
### 背包最优装载问题 #### 一、问题背景及定义 背包最优装载问题(Knapsack Problem)是组合优化中的一个经典问题,在实际应用中有广泛的用途,比如物流配送、资源分配等领域。该问题的基本形式是:给定一系列...
【标题】:“C++最优装载问题” 在计算机科学和编程领域,最优装载问题是一个经典的运筹学问题,它涉及到如何高效地安排有限空间内的物品装载,以达到最大的效益。在这个问题中,我们通常考虑一系列具有不同重量和...
### 最优装载问题 #### 贪心法解决最优装载问题 最优装载问题是一个经典的组合优化问题,在实际应用中有着广泛的应用场景,例如在物流、运输等行业中的资源分配问题。本报告通过一个具体的实例,利用贪心算法来...
最优装载问题 解决最优装载 算法分析与设计
计算机算法分析第四章,背包问题最优装载问题证明等的以及讲义
### 最优装载问题详解 #### 一、问题背景与定义 **最优装载问题**是一种经典的计算机科学中的优化问题。该问题通常涉及一个或多个约束条件下的最大化或最小化目标函数。在这个特定的情境中,我们需要考虑如何将一...
最优装载问题,也被称为集装箱装载或货车装载问题,是一个经典的组合优化问题,广泛存在于物流、运输和资源分配等领域。在计算机科学中,它通常被处理为一个求解最大化的二进制背包问题,目的是在有限的容量下,尽...
最优装载问题,也被称为集装箱装载或货物装载优化问题,是一个典型的组合优化问题,在物流、运输和计算机科学等领域有着广泛的应用。这个问题的目标是在有限的资源条件下,如何最大限度地装载货物,通常涉及将不同...
C++实现的分支限界的最优装载问题 可以运行
《贪心算法在最优装载问题中的应用》 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。在解决实际问题时,贪心算法通常用于求解具有...
最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 Input 输入的第一个为测试样例的个数T( T ),接下来有T个测试样例。每个测试样例的第一行是一个整数n( n )和一个非负数C( C )...
基于贪心算法的最优装在你问题
最优装载问题,也被称为集装箱装载问题或装载问题,是一个经典的组合优化问题,广泛存在于物流、运输和仓储等领域。它的目标是在有限的载重和体积条件下,最大化地装载货物,使得运输效率达到最优。回溯法是一种解决...
【最优装载问题与分支限界法】 最优装载问题是一个经典的组合优化问题,旨在寻找最佳的装载方案,使得一组集装箱能够合理地分配到两艘载重量有限的轮船上,以达到最大的装载重量。在这个问题中,每艘轮船的载重量...
贪心算法之最优装载问题 贪心算法是解决最优装载问题的有效方法。最优装载问题是指在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。该问题可以分解成多个子问题,每个子问题的最优解可以通过贪心选择来...