Ho bisogno di trovare un modo o un algoritmo per raggruppare i membri di un dato insieme di dati (di interi positivi) in modo che la differenza tra i mezzi di gruppo sia ridotta al minimo (non massimizzata, come al solito).
Ci sono due limitazioni:
- Il numero di gruppi non deve superare log (N) base 2. N è la dimensione dell'array di input. Supponiamo che N = 16, sempre.
- La dimensione del gruppo dovrebbe essere almeno log (N) base 2. Nell'esempio seguente, la dimensione del gruppo dovrebbe essere almeno 4.
Cercando sul WEB, ho trovato il seguente algoritmo avido. Si prega di vedere anche sotto l'esempio.
- ordina i numeri nell'ordine decrescente
- prendi i primi elementi K e inseriscili in gruppi diversi. Qui, K è il numero di gruppi.
- per i successivi elementi (N - K), inseriscili nel gruppo con la somma più bassa. ripetere questo fino al completamento di tutti i numeri.
Possiamo ottenere un algoritmo migliore in termini di complessità temporale? È gradita una guida per una soluzione migliore a questo problema.
Esempio:
for input array = (11, 11, 14, 16, 17, 18, 18, 19, 20, 21, 22, 25, 25, 26, 28, 31)
The solution: (where sd: standard deviation, cv: coefficient of variation)
group mean sd cv
(31, 20, 17, 11) 19.8 8.4 0.4
(28, 21, 18, 11) 19.5 7.1 0.4
(26, 21, 19, 14) 20.0 5.0 0.3
(25, 22, 18, 16) 20.3 4.0 0.2