Was ist ein guter Sortieralgorithmus, um Elemente in Container zu setzen und die Behälter sogar sogar wie möglich zu halten?

StackOverflow https://stackoverflow.com//questions/12700866

Frage

Ich werde also tatsächlich nutzen, um in Extjs4 einige dynamische Form-Layout-Generation zu erstellen, aber ich glaube, ich kann das Problem nach unten vereinfachen, um die Diskussion zu erleichtern, ohne etwas zu verlieren:

Nehmen wir an, ich habe eine Liste von Ganzzahlen, die ich in zwei Container legen möchte. Wenn ich fertig bin, möchte ich, dass beide Container "so gleichwohl wie möglich" sein, was in diesem Fall die Summen der Ganzzahlen innerhalb jedes Behälters bedeutet, so nahe beieinander, wie wir sie bekommen können. In diesem Szenario spielt es keine Rolle, wie viele Ganzzahlen in jedem Behälter enden, einfach dass ihre Summen nahe liegen.

Hier ist ein Beispiel für einen möglichen Eingang und einen wünschenswerten Ausgang:

generasacodicetagpre.

Ein naiver Ansatz ist möglicherweise einmal, um die Integerliste einmal zu iterieren, und legen Sie jede Ganzzahl in den Container, der derzeit die kleinere Summe hat:

generasacodicetagpre.

Welchen Algorithmus / Annäherungen würden Sie vorschlagen, dass Sie dieses Problem bewältigen? Ich stelle mir vor, es gibt einige potenzielle Punkte. Wenn Sie es leichter finden, in Codeproben zu denken, werde ich das Endprodukt in JavaScript implementieren.

danke!


edit

Ich mag die beiden bisher dargestellten Ansätze (dank Wearen und Sumudu Fernando), beide geben gute Methoden, um schnell etwas in der Nähe von (oder genau) der idealen Antwort zu erreichen. Für ein kleines genügendes Satz von Ganzzahlen stellen Sie mir vor, Sie könnten nur robust, um eine Berechnung zu erzielen, und sagen Sie definitiv, dass die bestimmte Antwort das beste ist (oder für das Beste). Irgendwelche Anregungen, um so etwas zu tun? Mit anderen Worten, ein Ansatz, der eine ideale Antwort auf die Kosten für die Kosten für langsamer garantiert (oder für große Problemsätze vollständig inpositiv ist).

War es hilfreich?

Lösung

    .
  1. Berechnen Sie die Summe aller Elemente.
  2. Berechnen Sie die Hälfte der Summe, GROSSACDICETAGCODE.
  3. Wenden Sie die Rucksackproblem an die Zahl, die den Zielsumme generakodicetagcode macht.
  4. Legen Sie die Lösung in einen Behälter und die restlichen Elemente in den anderen Behälter.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top