Intento generar números aleatorios que correspondan a estados de un juego. Digamos que hay $|m|$ cuadrados, y $n$ piezas que pueden ocupar las casillas. Entonces puedo tener un total de $\binom{|m|}{n}$ estados, dado que las piezas son indistintas.
Sin embargo, me gustaría transformar el número generado aleatoriamente $\left[0, \binom{|m|}{n}\right)$ en un estado específico, y para ello necesito una biyección $\{0, 1, \ldots, \binom{|m|}{n}-1\}$ $\longleftrightarrow$ $\binom{m}{n}$ .
Un algoritmo que se me ocurre (que puede funcionar) sería en esencia ordenar las piezas, y colocar el $i^\text{th}$ sobre la $i^\text{th}$ cuadrado para empezar. A continuación, itera sobre las piezas, desplazando la pieza situada más a la derecha si la casilla no está ocupada. Cuando una pieza $p_0$ a la izquierda de cualquier otra pieza dada $p_1, \ldots, p_k$ se desplaza a la derecha, luego se desplaza $p_1, \ldots p_k$ a la izquierda en la medida de lo posible de forma que $p_i$ sigue estando en una plaza menor que $p_j$ .
Agradecería que se me orientara en otras direcciones o que se me facilitara cualquier simplificación, etc.
Gracias.