Algorithmus split ein array in P subarrays der Summe ausgeglichen

Ich habe ein großes array der Länge N, sagen wir so etwas wie:

2 4 6 7 6 3 3 3 4 3 4 4 4 3 3 1

Muss ich split das array in P subarrays (in diesem Beispiel P=4 sinnvoll wäre), so dass die Summe der Elemente in jedem subarray ist so nah wie möglich an sigma, Wesen:

sigma=(sum of all elements in original array)/P

In diesem Beispiel sigma=15.

Gründen der übersichtlichkeit, ein mögliches Ergebnis wäre:

2 4 6    7 6 3 3   3 4 3 4    4 4 3 3 1
(sums: 12,19,14,15)

Ich geschrieben habe, eine sehr naive Algorithmus basiert, wie würde ich die Divisionen von hand, aber ich weiß nicht, wie die Verhängung der Bedingung, dass eine division, deren Summen (14,14,14,14,19) ist schlechter als eine, die (15,14,16,14,16).

Vielen Dank im Voraus.

  • Warum ist das eine Folge schlechter als die andere? Wenn Sie klären können, dass in Ihrem Kopf, Sie können schreiben Sie es in code. Es ist einfach, dass Sie wollen, zu minimieren, die Summe der Unterschiede (von der idealen Ergebnis, 15)? Es gibt viele Ansätze zu diesem. Zum Beispiel ist die Summe der Unterschiede (wie oben erwähnt), die Summe der Quadrate der Differenzen (die stärker benachteiligt Antworten weiter vom ideal), oder sogar so etwas wie die Standardabweichung.
  • Möchten Sie vielleicht haben die sum-of-squared-error als eine gute Maßnahme: Sie Quadrat der Differenz der jede Summe mit sigma und zusammenfassen. (14,14,14,14,19) wäre eine Schlechtigkeit von 20, während (15,14,16,14,16) wäre eine Schlechtigkeit der 4. Natürlich, Sie können spielen, mit den Exponenten.
  • Ja, du hast Recht, sorry für die nicht mehr klar und vielen Dank für Ihre prompte Antwort. Ich denke, minimieren entweder die Summe der Unterschiede der Quadrate der Unterschiede funktionieren würde. Gibt es irgendeine bekannte Art und Weise, es zu tun "on the fly"? Die eigentliche array-ich habe enthält etwa eine halbe million zahlen, so dass ich glaube nicht, dass unter Berücksichtigung aller möglichen Kombinationen der ersten und dann die Auswahl der am besten balanced ist eine option.
  • Passieren, fürchte ich. Das ist eine ganz andere Frage! (Und, als solche, vielleicht besser gefragt als eine separate Frage.) Ich bin mir nicht bewusst, eine einfache Möglichkeit dies zu tun, ohne eine Art "brute-force" - die Sie wahrscheinlich wollen parallelised.
  • Das klingt verdächtig ähnlich der 0-1 knapsack problem, würde ich anfangen zu suchen, um es. Aber, dass man keine effiziente Lösung bekannt, so dass ich befürchte, das man nicht entweder. Vielleicht verschieben cs.stackexchange.com?
  • Was meinst du mit subarray. Ein konsekutiver subarray oder ist es mehr wie eine Teilfolge?

InformationsquelleAutor Renoa | 2013-01-02
Schreibe einen Kommentar