Frage

Anstatt optimize alles, ich will alle möglichen aufzulisten - einschließlich „unvollständig“ - Packungen des Sackes. Natürlich, ich könnte (indem eine obere verbessert werden gebunden an die Größe der Teilmengen können schauen durch) das Gewicht Einschränkung diejenigen auswählen erfüllen Schleife durch alle Teilmengen der Menge von Objekten und, aber ich würde wirklich gern etwas mehr effizienter zu gestalten.

Danke.

War es hilfreich?

Lösung

Zuerst sortieren Sie Ihre Objekte auf dem Gewicht. Dann rekursiv den Ranzen packen. Wenn das kleinste Gewicht Objekt noch nicht paßt nicht in Betracht gezogen, oder wir haben keine Gegenstände bleiben, dann fügen Sie den aktuellen Ranzen auf unsere Liste und zurück, sonst die aktuellen Ranzen zu unserer Liste hinzufügen für jedes Objekt in der Liste, die Passungen stecken es in und versuchen, den Rest der Tornister zu packen mit Objekten schwerer als das letzte Objekt, das wir verpackt.

Wenn wir mehr als ein Element eines bestimmten Typs packen kann dann ersetzen weniger als mit weniger als oder gleich.

Wenn wir mehrere Objekte mit demselben Gewicht haben müssen wir zuerst sortieren nach Gewicht, dann mit einer beliebigen Reihenfolge und Verwendung der.

 PackKnapsack(knapsack, objects)
   add knapsack to list
   if objects is empty return
   if smallest object does not fit return
   for each object in order from smallest to largest
      if currentobject does not fit
         break
      PackKnapsack(knapsack + currentObject, objects heavier than current object)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top