Estoy tratando de desarrollar una aplicación C# que genere una lista de todas las permutaciones posibles, dentro de un límite y costo. Por ejemplo, tengo una lista de 80 trabajos. Cada trabajo tiene un valor (1-5) (típicamente 3) y cada ingeniero tiene un límite de cuánto pueden hacer, generalmente un valor de 20.Algoritmo de combinaciones ordenadas de C#
En este momento he comenzado produciendo una lista de todos combinaciones posibles (n!/(k! * (nk)! donde n es el número total de trabajos yk es 2). El vínculo entre cada trabajo debe ponderarse con la distancia entre cada trabajo.
Desde aquí I Quisiera elegir un trabajo de inicio inicial y generar una lista de todas las combinaciones posibles de trabajos (desde el trabajo de inicio) hasta el límite de 20 y luego ordenar por la suma del peso. La ruta de menor peso ganaría y se asignaría a el ingeniero. Mi problema es que no sé cómo abordar esto, ¿qué estructura de datos sería la mejor?
Normalmente hay aproximadamente 6-8 ingenieros (dependiendo de la carga de trabajo). Tenía planeado enrutar a cada ingeniero de uno en uno: una vez que se asignó una ruta a otro ingeniero, esos trabajos se eliminarían de la lista y un nuevo iniciar el trabajo seleccionado con un nuevo conjunto de combinaciones generadas. ¿Esto suena como un enfoque aceptable?
Cualquier asistencia sería bienvenida.
esto suena básicamente como un problema de matemáticas, en lugar de un problema de C#. (aunque ambos están muy cerca): –
¿Problema repetido de la mochila? – dtb
Hay una biblioteca de C# para realizar permutaciones, combinaciones, productos cartesianos y otras prácticas funciones combinatorias aquí: http://www.codeproject.com/KB/recipes/Combinatorics.aspx –