Ein Ganzzahl-Array in zwei gleich große Sub-Arrays aufteilen?

9

Ich bin auf diese Frage gestoßen und konnte keine vernünftige Lösung finden. Wie würden Sie ein unsortiertes Integer-Array in 2 gleich große Sub-Arrays aufteilen, so dass die Differenz zwischen den Sub-Array-Summen minimal ist.

Beispiel: Bei einem Integer-Array a [N] (unsortiert) wollen wir das Array in a1 und a2 aufteilen, wobei a1.length == a2.length dh N / 2 und (Summe aller Zahlen in a1 - Summe aller Zahlen in a2) sollte minimal sein.

Nehmen wir der Einfachheit halber an, dass alle Zahlen positiv sind, aber es könnte Wiederholungen geben.

    
rplusg 29.01.2013, 17:21
quelle

1 Antwort

3

Während andere erwähnt haben, dass dies ein Fall des Partitionsproblems mit der Modifikation ist, möchte ich insbesondere darauf hinweisen, dass es sich tatsächlich um einen Spezialfall des minimales Makeup-Problem mit zwei Maschinen. Nämlich, wenn Sie das Zwei-Maschinen-Problem mit der Hauptspanne lösen und einen Wert m erhalten, erhalten Sie die minimale Differenz 2*m - sum(i : i in arr)

Wie der Wikipedia-Artikel sagt, ist das Problem für mehr als zwei Maschinen NP-vollständig. In Ihrem Fall jedoch der Listenplanungsalgorithmus , der im Allgemeinen einen ungefähre Antwort, ist optimal und polynomial-Zeit für den Zwei-Maschinen-und Drei-Maschinen-Fall gegeben eine sortierte Liste in nicht aufsteigender Reihenfolge.

Details und einige weitere theoretische Ergebnisse zu diesem Algorithmus finden Sie hier .

    
Andrew Mao 29.01.2013 19:45
quelle

Tags und Links