Distribuir objetos consiste en asignarlos a recipientes, grupos o categorías, analizando si los objetos y los recipientes son distinguibles y qué restricciones existen.
Muchos problemas combinatorios pueden describirse como una distribución: colocar tareas en servidores, repartir recursos entre grupos, asignar archivos a carpetas o ubicar objetos en recipientes.
Antes de contar hay que identificar el modelo. No es lo mismo distribuir objetos diferentes que distribuir objetos idénticos, ni usar recipientes etiquetados que recipientes indistinguibles.
Las respuestas determinan si aplicaremos producto, combinaciones, particiones o técnicas de distribución.
Si hay n objetos diferentes y m recipientes identificados, cada objeto tiene m opciones independientes.
Por ejemplo, 4 archivos diferentes distribuidos entre 3 carpetas etiquetadas producen:
Indica la cantidad de objetos y recipientes etiquetados. La simulación muestra las asignaciones posibles en casos pequeños.
La fórmula mn permite que algunos recipientes queden vacíos. Cada objeto elige un recipiente, sin exigir que todos reciban al menos uno.
Si todos los recipientes deben recibir al menos un objeto, no podemos aplicar directamente mn. Debemos eliminar las asignaciones que dejan recipientes vacíos o utilizar números de Stirling y combinaciones.
S(n,m) forma grupos no etiquetados y m! asigna etiquetas a esos grupos.
Si los recipientes están etiquetados y pueden quedar vacíos, la cantidad se calcula con una potencia.
function contarDistribuciones(objetos, recipientes) {
return recipientes ** objetos;
}
console.log(contarDistribuciones(4, 3));
console.log('Cada objeto elige uno de los recipientes.');
Si cada recipiente puede recibir como máximo un objeto y hay n objetos para m posiciones, el problema se convierte en una asignación parcial:
Aquí un objeto no puede compartir recipiente con otro, por lo que el número de opciones disminuye.
Las capacidades agregan restricciones. Si un recipiente solo puede recibir cierta cantidad, debemos descartar asignaciones que superen ese límite.
Para pocos objetos podemos enumerar y filtrar. Para problemas grandes se utilizan combinaciones, recurrencias o métodos de distribución.
| Modelo | ¿Se distinguen objetos? | ¿Se distinguen recipientes? | Ejemplo |
|---|---|---|---|
| Asignación básica | Sí | Sí | Archivos diferentes a carpetas con nombre. |
| Distribución de idénticos | No | Sí | Unidades iguales entre cajas numeradas. |
| Partición | Sí | No | Personas separadas en grupos sin nombre. |
Los problemas de distribución se resuelven identificando qué se distribuye, dónde se coloca y qué restricciones existen. El caso básico de objetos diferentes y recipientes etiquetados se obtiene mediante el principio del producto.
En el próximo tema estudiaremos por separado la distribución de objetos idénticos y diferentes.