Hallo Leute ,
ich habe hier ein Problem mit meinem Multiple Choice Knapsack und sitze seit 3h fest.
Mein Problem ist, dass: weight = Integer.MAX_VALUE-1 gesetzt wird.
Ich habe rumprobiert, kam aber auf keine machbare Lösung.
Ich muss den Array kanpsack so erstellen, dass weight passt (also die +1 muss weg) und ich muss ebenfalls die for-Schleifen so anpassen,
dass die Berechnung weiter funktioniert.
Habt ihr Tipps/Vorschläge/ähnliche Erfahrungen, die helfen, dass der Array nicht java.outOfBounds ist?
Viele Grüße
ich habe hier ein Problem mit meinem Multiple Choice Knapsack und sitze seit 3h fest.
Mein Problem ist, dass: weight = Integer.MAX_VALUE-1 gesetzt wird.
Ich habe rumprobiert, kam aber auf keine machbare Lösung.
Ich muss den Array kanpsack so erstellen, dass weight passt (also die +1 muss weg) und ich muss ebenfalls die for-Schleifen so anpassen,
dass die Berechnung weiter funktioniert.
Habt ihr Tipps/Vorschläge/ähnliche Erfahrungen, die helfen, dass der Array nicht java.outOfBounds ist?
Java:
public static int MCKS(final ItemGroup[] itemGroups, final int weight) {
if (weight <= 0 || itemGroups == null || itemGroups.length == 0) {
throw new IllegalArgumentException("Failure.");
}
int i, w = 0;
int[][] knapsack = new int[itemGroups.length + 1][weight + 1];
for (int a = 0; a <= weight - 1; a++) {
knapsack[0][a] = 0;
}
for (i = 1; i <= itemGroups.length; i++) {
for (w = 0; w <= weight; w++) {
if (w >= 0) {
if (itemGroups[i - 1].getItems().get(0).getWeight() > w) {
knapsack[i][w] = knapsack[i - 1][w];
} else {
knapsack[i][w] = max(
itemGroups[i - 1].getItems().get(0).getProfit()
+ knapsack[i - 1][w - itemGroups[i - 1].getItems().get(0).getWeight()],
knapsack[i - 1][w]);
}
}
}
}
return knapsack[itemGroups.length][weight];
}
}
Viele Grüße