问题描述:
设U = {u1,u2,u3,......ui}(一共有amount数量的物品)是一组准备放入背包中的物品.设背包的容量为size.
定义每个物品都具有两个属性weight和value.
我们要解决的问题就是计算在所选取的物品总重量不超过背包容量size的前提下使所选的物品总价值最大.
一句话,让你的有限背包,装上最终总价值最高的物品。
注意,代码里面我加上了打印语句,可以用来查看算法的过程
- import java.util.Arrays;
- public class T {
-
- public static void knapsack(int[] value, int[] weight, int capicity, int[][] m) {
-
- int n = value.length - 1;
-
- int jMax = Math.min(weight[n] - 1, capicity);
-
- for (int j = 0; j <= jMax; j++)
- m[n][j] = 0;
- showArray(m);
-
-
- for (int j = weight[n]; j <= capicity; j++)
- m[n][j] = value[n];
- showArray(m);
-
- for (int i = n - 1; i >= 1; i--) {
- jMax = Math.min(weight[i] - 1, capicity);
- System.out.println(jMax);
- for (int k = 0; k <= jMax; k++)
- m[i][k] = m[i + 1][k];
- showArray(m);
- for (int h = weight[i]; h <= capicity; h++) {
- System.out.println(m[i+1][h]+" / "+ m[i + 1][h - weight[i]]+" + " +value[i]+"("+h+","+weight[i]+","+value[i]+")");
- m[i][h] = Math.max(m[i + 1][h], m[i + 1][h - weight[i]] + value[i]);
- }
- showArray(m);
- }
- m[0][capicity] = m[1][capicity];
- if (capicity >= weight[0])
- m[0][capicity] = Math.max(m[0][capicity], m[1][capicity - weight[0]] + value[0]);
- System.out.println("bestw =" + m[0][capicity]);
- }
- public static void showArray(int[][] m) {
- for (int[] a : m) {
- System.out.println(Arrays.toString(a));
- }
- System.out.println("-------------------------------------------");
- }
- public static void traceback(int[][] m, int[] w, int c, int[] x) {
- int n = w.length - 1;
- for (int i = 0; i < n; i++)
- if (m[i][c] == m[i + 1][c])
- x[i] = 0;
- else {
- x[i] = 1;
- c -= w[i];
- }
- x[n] = (m[n][c] > 0) ? 1 : 0;
- }
- public static void main(String[] args) {
-
- int[] ww = { 8,5,4,3 };
- int[] vv = { 10,7,5,4 };
- int[][] mm = new int[4][13];
- knapsack(vv, ww, 12, mm);
- int[] xx = new int[ww.length];
- traceback(mm, ww, 12, xx);
- for (int i = 0; i < xx.length; i++)
- System.out.println(xx[i]);
- }
- }
分享到:
相关推荐
标题中的“背包问题算法Java实现”指的是在计算机科学中,运用动态规划解决0-1背包问题的算法,并用Java编程语言进行实现。背包问题是一种优化问题,通常涉及到在一个容量有限的背包中选择物品,目标是使得背包中...
背包算法 背包算法JAVA实现 背包算法JAVA实现
在这个场景中,我们将探讨如何使用Java编程语言,结合贪心算法,来解决背包问题。 首先,我们要理解贪心算法的基本思想。贪心算法在每一步都做出看起来最好的选择,而不是提前考虑所有可能的组合。在背包问题中,这...
用贪心算法解决背包问题,用netbeans做的。百分百下载就可以直接运行。JAVA 源文件。
为了用Java实现贪心算法解决背包问题,我们可以按照以下步骤进行: 1. 定义物品类(Item),包含物品的重量(weight)和价值(value)。 ```java public class Item { int weight; int value; public Item(int ...
在Java编程语言中实现遗传算法,需要注意以下几点: 1. 数据结构:设计合适的类来表示物品、背包和个体。物品类包含各维度属性,个体类则存储二进制编码以及计算适应度的方法。 2. 编码方式:可以使用一维数组或二...
在Java中实现背包加密,首先需要理解背包算法的数学基础,然后可以使用Java的BigInteger类来处理大整数,因为背包问题涉及的数值通常很大。博主joe_storm的示例可能包括创建公钥和私钥的生成器、使用公钥加密数据、...
在这个"蚁群算法解决01背包问题-java实现"的项目中,主要涉及以下知识点: 1. **蚁群算法**:ACO的核心在于信息素更新和选择规则。信息素是蚂蚁在路径上的化学标记,表示路径的好坏;选择规则决定了蚂蚁在下一节点...
对于背包问题,用贪心算法用java将该问题进行了实现
装载问题-分支限界算法-java实现 装载问题 装载问题是一种经典的组合优化问题,目的是在有限的容量内装载尽可能多的物品,以达到最大化总重量或总价值。装载问题有多种变种,包括0/1背包问题、分支限界问题、动态...
零一背包问题解决方案 零一背包问题是指在给定的约束条件下,如何从多个物品中选择一些物品,使得总价值最大化的问题。零一背包问题是一个典型的NP完全问题,在实际应用中有广泛的应用,如仓库管理、资源分配、物流...
北京工业大学--算法作业2--动态规划算法实现0-1背包问题---Java代码 利用动态规划算法实现0-1背包问题或装配线调度问题。(二选一) 要求测试数据以文本文件的形式存储, 即所有的数据由文本文件读入。 利用动态...
这个是背包算法。。解决背包问题的java代码。。。。。。。。。。。。。。。。。。。。。。
以上就是0-1背包问题的基本概念、解决方法以及Java实现的概述。实际编程中,还需要考虑输入数据的合法性检查、异常处理等细节。通过理解和掌握这个问题,不仅可以提升算法思维,也有助于解决实际生活和工作中遇到的...
综上所述,PSO算法因其原理简洁和易于实现的特点,在解决0-1背包问题等组合优化问题上展现出其独特的魅力。通过上述的分析与讨论,我们可以了解到PSO算法解决0-1背包问题的基本思想、关键步骤和需要关注的问题。对于...
为了实现上述算法,我们需要定义一个`Knapsack`类来表示背包问题,以及相关的函数和数据成员: ```cpp template class Knapsack { public: Knapsack(int mSize, T cap, T wei[], T prof[]); T BKnapsack(int x[])...
在提供的资源中,"KnapSack2.java"是Java源代码文件,它实现了回溯算法解决0-1背包问题。源代码可能包含了以下关键部分: 1. 定义物品类:每个物品都有其重量和价值,这些信息用于计算解的可行性。 2. 回溯函数:这...
背包问题九讲中的完全背包问题的三种算法的具体java实现代码。
0/1背包问题是一种在计算机科学中常见的优化问题,特别是在算法设计和组合优化领域。它模拟了一个场景,其中有一个容量有限的背包,我们要从一系列物品中选择,每种物品都有自己的重量和价值,目标是使得装入背包的...