Packungsproblem, gierige Algorithmen suchen ungefähre optimale Lösung
Die Codekopie lautet wie folgt:
Import Java.util.Arrays;
Java.util.comParator importieren;
// Packungsproblem, gieriger Algorithmus
öffentliche Klasse Enchase {
public void test1 () {
Integer [] Boxen = {34,6,40,2,23,12,12};
int boxcaptation = 40; // Box -Kapazität
// inverse Reihenfolge
Arrays.sort (Boxs, neuer Komparator <Integer> () {
@Override
public int compare (Ganzzahl O1, Ganzzahl O2) {
Return O2-O1;
}
});
int unenchase = boxs.length; // Anzahl der Unboxed
int minindex = boxs.length-1; // Die kleinsten Boxpunkte auf
while (unchase> 0) {
für (int i = 0; i <boxs.length; i ++) {
// Das Gewicht des Positionsboxs ist Nullsprung
if (Boxs [i] == 0) {
weitermachen;
}
Unchase--;
while ((boxcaptation-boxs [i])> = Boxs [minIndex]) {
int k = i+1;
für (; k> i; k ++) {
// Das Gewicht des Positionsboxs ist Nullsprung
if (Boxs [k] == 0) {
weitermachen;
}
// Fügen Sie die Box hinzu und löschen Sie die ursprüngliche Position
Boxen [i]+= Boxs [k];
int temp = Boxs [k];
Boxen [k] = 0;
Unchase--;
if (Boxs [i]> Boxcaptation) {
// Die maximale Kapazität kann überschritten werden, der Status wird wiederhergestellt
Unchase ++;
Boxen [k] = temp;
Boxen [i]-= Boxs [k];
weitermachen;
}
// Minimum -Box -Update
if (k == minIndex) {
für (int y = minIndex; y> 0; y-) {
if (Boxs [y]! = 0) {
Minindex = y;
}
}
}
brechen;
}
}
}
}
// Zählen Sie die Anzahl der Kästchen
int boxCount = 0;
System.out.println ("Boxing -Ergebnis:");
für (int i = 0; i <boxs.length; i ++) {
System.out.print (Boxs [i]+"/t");
if (Boxs [i] == 0) {
weitermachen;
}
BoxCount ++;
}
System.out.println ("/number der Boxen:"+boxCount);
}
public static void main (String [] args) {
New Enchase (). Test1 ();
}
}
Das obige dreht sich alles um diesen Artikel, ich hoffe es gefällt euch.