2011-04-13 19 views
5

Buscando un algoritmo o código si alguien se siente generoso para hacer lo siguiente. Necesito tomar una entrada para un número de jugadores. La cantidad de jugadores siempre será un factor de 4. Quiero agrupar los jugadores individuales en grupos de 4, con el menor número de repeticiones. La colocación inicial es trivial:Algoritmo de agrupamiento - Torneo

1 2 3 4 Table 1 
5 6 7 8 Table 2 
9 10 11 12 Table 3 
13 14 15 16 Table 4 
17 18 19 20 Table 5 
21 22 23 24 Table 6 

Así que los jugadores 1-4 han "visto" entre sí una vez. Todos juegan su juego y luego los jugadores se barajan. En el siguiente pase (y pases posteriores) quiero reorganizar los jugadores para que tengan la menor cantidad de superposición. Básicamente, quiero evitar que un jugador vea una cara repetida durante el mayor tiempo posible, y una vez que eso ya no sea posible, quiero minimizarlo tanto como sea posible.

Siento que este debería ser un algoritmo relativamente simple, pero cada enfoque que termino se siente como que se está cargando a favor de las personas que se procesan primero ... y mi instinto me dice que hay un absoluto respuesta correcta.

Para mayor claridad, nadie es eliminado, solo se mezclan cada vez.

+1

Es típico que al menos publique lo que ha intentado, por lo que no sugerimos algo que ya se haya descartado. Tampoco indicó el idioma que está utilizando, así que no puedo sugerir una idea. –

+0

Estoy usando C++, pero no me importa particularmente en qué idioma está. Estoy más interesado en el proceso de pensamiento/pseudocódigo. El enfoque general que tomé inicialmente fue recorrer cada "jugador" y ubicarlos con las personas que tenían la menor ocurrencia de sentarse con ellos previamente. Pero sentí que pesaba mucho hacia los jugadores indexados más bajos. Puedo usar cualquier sugerencia de Java/C/C++ /. NET/PHP. – JamesB41

+0

¿Cuántas rondas necesitas? – Svante

Respuesta

3

Esto es básicamente el problema del golfista social. Hay muchos algoritmos en la literatura de optimización combinatoria.

+0

Gracias. Eso fue suficiente para continuar. – JamesB41

Cuestiones relacionadas