Wie splitte ich ein Array in 3 gleichwertige Arrays, wobei die Summe der Zahlen im Array so "nah" wie möglich ist (Java)?
Guten Tag liebe Gutefrage-Community,
ich habe bereits eine Frage zu dieser Aufgabe gestellt, diesmal formuliere ich sie ein etwas eindeutiger:
Wie kann ich ein Array in 3 "fast" gleichwertige Arrays aufteilen, wobei aber die chronologische Reihenfolge der Zahlen im Array beibehalten werden.
Hier ein Beispiel:
Array(2,8,4,12,7,9)
Wird in 3 Arrays aufgeteilt, wobei die Summe des "größten" Arrays die kleinste maximale Summe der Zahlen haben soll.
Also praktisch:
Array1(2,8,4) = 14
Array2(12) = 12
Array3(7,9) = 16 (kleinste Maximale sozusagen)
Du kannst dir das praktisch so vorstellen:
Wir berechnen die Summe der Werte aus dem Main-Array (Array(2,8,4,12,7,)) also 2 + 8 + 4 + 12 + 7 + 9 = 42.
Diese Zahl teilen wir durch 3 (weil ich 3 Arrays will), also 42 / 3 = 14.
Dann möchte ich 3 Arrays erstellen, wobei die Summe der Zahlen im Array so nah wie möglich bei der Zahl 14 (in diesem Beispiel) ist.
Praktisch sind dann im Array1(2,8,4) = 14, Array2(12) = 12 und Array3(7,9) = 16. Somit hätte ich dann das Array in drei 3 Arrays aufgeteilt wobei die chronologische Reihenfolge der Zahlen aus dem 1. Array beibehalten wird und jedes Array so nah wie möglich an der Zahl 14 ist.
2 Antworten
Das sollte sich recht einfach realisieren lassen:
Du gehst den Array schrittweise durch uns summierst solange auf, bis du nah am Durchschnitt bist.
Das machst du einmal von vorne und einmal von hinten.
Und dann stehst du vor jeweils einer Entscheidung, ob du das nächste Element zum linken oder zum rechten Array hinzufügen möchtest oder ob du es in der Mitte lassen möchtest.
Gibt aber natürlich auch echt doofe Szenarien, so wie z.B.:
1, 1, 9999, 1, 1, 1
Aber da musst du halt dann abwägen, ob du lieber
1, 1, | 9999, | 1, 1, 1
oder
1, 1, 9999, | 1, | 1, 1
oder dergleichen hättest. Oder auch:
1, 1, 1, 1, 1
Du musst dir halt dann eine Metrik ausdenken, wie du das am liebsten hättest, aber an sich lässt sich das auf jeweils wenige Entscheidungen runterbrechen.
Diese Aufgabe erinnert mich fatalerweise an das "Rucksackproblem", das sich nur durch Probieren lösen lässt.