[pyar] Un problema interesante

Daniel Moisset dmoisset en machinalis.com
Jue Sep 20 01:35:47 -03 2018


Y pensando un ratito más, alcanza con solo fuerzabrutear la selección de
opciones ganadoras que son 12!/(8!4!) = 495.

Para cada combinación candidato de opciones ganadoras, podes correr un
algoritmo de matching (ej: Karp, o lo que te provea algún paquete tipo
networkx), dónde generas un clon del vértice correspondiente a  cada una de
las 4 ganadoras para que te refleje el aspecto de "cada opción asignada a 2
personas"

On Wed, 19 Sep 2018, 23:19 Daniel Moisset, <dmoisset en machinalis.com> wrote:

> Los números esos (8, 12) son reales? Si es así y tenés el input acotado,
> el problema es O(1) y es trivial =P
>
> Un poco más en serio, con esos y de input, un approach de fuerza bruta
> debería poder cubrir todas las selecciones de opciones × asignaciones a
> grupos bastante rápido (una cuenta rápida me dice que son ~2.5 millones) Y
> si exploras con alguna heurística astuta (por ej asignar las opciones más
> populares primero) seguramente podes obtener un early exit si hay solución
> (si no hay, vas a explorar todo)
>
> Si las cantidades reales de opciones/personas son más grandes, o sí tenés
> que hacer esto muchísimas veces. probablemente se puede explorar cosas más
> "fancy"
>
>
> On Wed, 19 Sep 2018, 17:08 Carlos Matías, <cmdelatorre en gmail.com> wrote:
>
>> A ver si me ayudan a resolver esto (no es "ejercicio de la facu", es un
>> problema de la vida real que tengo que resolver):
>>
>>  * Tengo 12 opciones: x0;...;x11
>>  * Tengo 8 personas: p0;...;p7
>>  * Cada persona emite sus preferencias de opciones (entre 1 y 12):
>>       - pref_p0 = [x_0_0,...,x_0_n0]
>>       - pref_p1 = [x_1_0,...,x_1_n1]
>>       - pref_p2 = [x_2_0,...,x_2_n2]
>>       - etc
>> Como resultado, tengo que hacer dos cosas:
>>  * elegir 4 opciones ganadoras: xA, xB, xC, xD
>>  * Asignar equipos (disjuntos) de 2 personas, a cada opción ganadora,
>> idealmente logrando que ambas personas del equipo tengan a la opción
>> ganadora entre sus preferencias.
>>
>> O sea, por ejemplo, si la opción ganadora xA fue asignada al equipo (pI,
>> pJ) entonces tanto pI como pJ tenían a xA entre sus preferencias.
>>
>> Cualquier corner case o cosas rara (por ejemplo si hay casos que no
>> tienen solución), no importa. Que explote.
>>
>> Python-code, pseudo-código y texto se aceptan ;-)
>>
>> También me sirve saber si existe un algoritmo "con nombre y apellido" que
>> resuelve el problema (respuestas del tipo: "clásico problema de matching",
>> "eso es coloreo de grafos", "búsqueda binaria en árboles balanceados",
>> "Aplicá Kruscal en un grafo acíclico dirigido multinivel sin ciclos" pero
>> sin trollear porfa) Pero en ese caso también voy a necesitar que me lo
>> expliquen ;-)
>>
>>
>> Carlos Matías
>> @py_litox <https://twitter.com/py_litox>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180919/a49975f3/attachment-0001.html>


Más información sobre la lista de distribución pyar