2012-08-29 13 views
7

Estoy tratando de armar un algoritmo (preferiblemente en ruby) que analizará una base de datos para encontrar oportunidades para comercios de 3+ maneras, como béisbol los equipos generalmente lo hacen.Cómo encontrar oportunidades para intercambios de 3 vías (como lo hacen los equipos deportivos)

Por ejemplo:

Imagínese que hay 100s de equipos, cada uno con 20 o más jugadores. Cada jugador tiene una combinación de atributos posibles. (Cosas como "Alta velocidad de funcionamiento", "buena defensa", etc)

Cada equipo tiene jugador necesidades (con atributos específicos del posible conjunto mencionado anteriormente), así como a los jugadores a oferta, (cada uno con atributos que coinciden con las posibles opciones mencionadas anteriormente).

Este algoritmo teórico podría buscar todas las necesidades y ofertas para encontrar combinaciones de equipos que podrían comerciar entre sí.

En un escenario teórico, imaginar tres equipos:

El equipo A tiene un jugador con velocidad y necesita un jugador con buena defensa Equipo F tiene un jugador con buena defensa y necesita un jugador con buen pitcheo Equipo Q tiene un jugador con buen pitcheo y necesita un jugador con buena velocidad

Así que los equipos A, F y Q podrían tener un intercambio tripartito donde todos ganan.

Mi pregunta es sobre el algoritmo que podría identificar esta oportunidad. ¿Es esto un problema que ha sido resuelto por un algoritmo antes? Si es así, apreciaría cualquier dirección en dónde mirar. Tengo algunas ideas diferentes sobre cómo estructurar esto dentro de la base de datos con el uso inteligente de almacenamiento en caché y crons. Construyéndolo en Rails. Solo un poco atrapado en la oportunidad de encontrar algo.

+0

Dado que usted pregunta acerca de un algoritmo en general, no estoy seguro de cuán útil es para etiquetar esto con Ruby –

+0

Buen punto. Soy nuevo aqui :) – SethS

Respuesta

4

puede modelar sus necesidades y ofertas como un gráfico: Cada equipo es un nodo y hay una ventaja del equipo A al equipo B de la capacidad x IIF A podrían beneficiarse de x jugadores que B tiene que ofrecer. Puede construir este gráfico en O(o + n), donde o es el número de ofertas y n es el número de necesidades al categorizar las ofertas por sus atributos.

Ahora necesita encontrar un ciclo en este gráfico que cumpla una propiedad determinada que no indicó en su pregunta (las posibilidades son: longitud> 3, longitud máxima, capacidad máxima, ...). Para cada uno de esos problemas, puede usar algoritmos existentes para resolverlos (flujo máximo, ruta más corta, BFS, ...)

Cuestiones relacionadas