Erstens, wenn die Anzahl der Gruppen 2 ist reduziert dies auf die Teilmenge Summe Problemvariante das Partitionsproblem. Dies beweist, dass das Problem NP-schwer ist, also sollten Sie nicht versuchen, einen effizienten Algorithmus zu finden.
Da es mindestens exponentiell ist, können Sie auch einfach alle Permutationen generieren und die besten auswählen. Ich weiß, dass einige Leute nicht mögen Rekursion, aber es ist hier wirklich nützlich für Aufzählen der Gruppe Möglichkeiten:
recfunc(array, groups):
if array is empty
return an array containing the element groups
else
groupsList = empty array
foreach aGroup in groups
element = array[0]
groupsList += recfun(array - element, groups where aGroup adds element)
return groupsList
Dieser Algorithmus eine Liste aller Möglichkeiten schaffen. Es ist ziemlich ineffizient, sollte aber nicht zu schwer für Sie sein. Von hier aus gehen Sie einfach durch die Liste und berechnen Sie, ob die Summe der Gruppen das Minimum der Liste ist.