2010-07-27 15 views
5

Estoy intentando escribir un algoritmo que crea grupos de personas en función de su "puntaje". Una persona tiene dos parámetros, un nombre y una puntuación. (El rango del puntaje está entre -10 y 10 pero eso realmente no es relevante). Estoy buscando crear grupos con igual número de personas (si es posible basado en el número de personas presentadas) donde el puntaje promedio de los miembros del grupo es lo mismo (o muy cerca de lo mismo).C# Algoritmo para determinar la agrupación de personas según un valor

Por ejemplo:

Grupo 1 (Puntuación Media = 2) - John Doe, Score 2 - Jane Doe, Puntuación 7 - Jack Negro, Score -3

Grupo 2 (Puntuación media = 2) - Bobby Flay, Score 4 - Cary página, el nivel -3 - Linus Tarval, Puntuación 5

+0

¿Cuántos grupos hay? Además, ¿cuántas personas tendrá? – IVlad

+0

El número de grupos es infinito, pero el número de personas siempre será seleccionado por el usuario. El usuario también proporcionará la cantidad de personas por grupo. –

Respuesta

2

Esto huele a una variación de la clásica Partition Problem, que es NP-Hard aunque algunas heurísticas e xists. Puedes tener un botín en la página de wikipedia ... probablemente un enfoque codicioso funcionaría en tu caso.

Debe intentar completar sus grupos eligiendo el grupo adecuado para colocar a una persona específica, probablemente comenzando con ordenarlos por puntaje.

+0

Gracias Jack, el "enfoque codicioso" funcionó lo suficientemente bien para esta aplicación. –

Cuestiones relacionadas