Ich weiß, dass die 2D- und 3D-Knapsack-Probleme NPC sind, aber gibt es eine Möglichkeit, sie in angemessener Zeit zu lösen, wenn die Instanzen nicht sehr kompliziert sind? Würde dynamische Programmierung funktionieren?
Mit 2D (3D) Rucksack meine ich, ich habe ein Quadrat (Würfel) und eine Liste von Objekten, alle Daten sind in Zentimetern und höchstens 20 m.
Antworten:
Knapsack kann durch dynamische Programmierung gelöst in pseudo-Polynom Zeit mit n der Anzahl der Objekte und W der Größe des Rucksacks. Solange Ihr Container klein ist (numerisch), können Sie das Problem effizient lösen. Beachten Sie, dass Sie W anpassen können, indem Sie die Auflösung ändern. Es ist nicht erforderlich, einen Versandbehälter auf µm zu messen, aber die Messgeräte sind wahrscheinlich zu grob (abhängig von Ihren Objekten).O(nW) n W W
Der Rucksack kann auch in der Polynomzeit beliebig gut approximiert werden (siehe Polynomzeit-Approximationsschemata ).
Knapsack berücksichtigt jedoch nur das Anpassen von Zahlen an eine andere Zahl. Geometrie ist ihm egal. Wenn Sie "rätseln" müssen, brauchen Sie ein anderes Problem; In Anbetracht von Tetris ist dies wahrscheinlich viel schwieriger als Knapsack .
quelle
GREEDY wird immer eine vernünftige Lösung finden, aber nicht unbedingt die optimale. Legen Sie einfach das größte Objekt, das jedes Mal in den Rucksack passt. Stoppen Sie, wenn keine Objekte mehr passen.
quelle