Ho un elenco di elementi che è un po 'come questo:Come dividere un elenco di elementi in partizioni uguali in base al peso dell'articolo?
[
["orange", 9],
["watermelon", 3],
["grapefruit", 6],
["peach", 8],
["durian", 2],
["apricot", 6]
]
Vorrei dividere questo elenco in ... dire due gruppi in modo che la somma dei pesi delle voci in ogni gruppo sono i uguale possibile, vale a dire:
List 1:
orange: 9
durian: 2
apricot: 6
TOTAL: 17
List 2:
watermelon: 3
grapefruit: 6
peach: 8
TOTAL: 17
Attualmente mi sto risolvere questo attraversando l'elenco ordinato in modo zigzag'esque. Assegnare gli oggetti con più peso nel primo passaggio a ciascun gruppo, assecondando gli oggetti con meno peso sul secondo passaggio e così via.
Questo funziona bene, ma ha difetti. Sto pensando che un secondo passaggio sui gruppi in cui scambio articoli tra di loro porterebbe a gruppi più equamente distribuiti, ma il codice in questione potrebbe diventare troppo complicato.
Qualcuno sa di un modo più efficiente o intelligente per farlo?
Grazie!
Hey Chris, prima di tutto, grazie per avermi dato il nome di questo problema, il "problema della partizione". E, naturalmente, grazie per la risposta! L'approccio goloso sembra utile e potrebbe produrre risultati migliori del mio attuale metodo.Ma credo che andrò per il metodo della forza bruta, il mio set di dati genera solo 1680 combinazioni, quindi suppongo che questo rientrerà solo nella categoria "light light crunching" ... E sarò in grado di fornire alcuni variazione della soluzione scegliendo casualmente tra le prime soluzioni N. Grazie ancora! –