Soy programador informático, y estoy luchando con este problema matemático sin encontrar una solución consistente y eficiente.
Dejemos que $A_{k, M}$ sea el conjunto de todas las posibles asignaciones para $n_1, n_2, ...,n_k$ enteros no negativos tales que $\sum_{i=1}^{k}{n_i} = M$ . Necesito calcular $C_{k,M}=|A_{k, M}|$ para la arbitrariedad $k, M$ y necesito una biyección entre $A_{k, M}$ y $[0, C_{k,M}-1]$ . La biyección debe ser sencilla de calcular "en ambas direcciones" y no debe requerir una enumeración exhaustiva.
Ejemplo. $k = 3$ , $M = 3$ . Las posibles asignaciones son $\{3, 0, 0\}, \{0, 3, 0\}, \{0, 0, 3\}, \{0, 1, 2\}, \{0, 2, 1\}, \{1, 0, 2\}, \{2, 0, 1\}, \{1, 2, 0\}, \{2, 1, 0\}, \{1, 1, 1\}$ Por lo tanto $C_{k,M}=|A_{k, M}| = 10$ .
He investigado poco hasta ahora, he mirado los sistemas numéricos combinatorios/factoriales (podéis suponer que sé de qué van) pero el problema parece ser bastante diferente. ¿Pueden darme algunas indicaciones?
EDITAR : Aclaro algunos puntos como se pide. 1) En realidad no sé que exista una biyección "sencilla de calcular", pero sí sé que mi incapacidad para encontrarla no es prueba de su inexistencia, por lo que pido aquí tu consejo. 2) Los dos conjuntos son: $A_{k, M} = \{ (n_1, n_2, ...,n_k) : \sum_{i=1}^{k}{n_i} = M \}$ y $[0, |A_{k, M}|-1] \subset \{ \mathbb{N} \cup \{0\} \}$ .