Supongamos que esos $n$ son todos distintos, entonces la función que se necesita para generar todas las combinaciones de $C(n,r)$ se llama siguienteCombinación $^{\dagger}$ .
En primer lugar, etiquete cada uno de sus $n$ objetos con un número en $\{1,2,3\dots,n\}$ para que haya una correspondencia uno a uno entre los números y sus objetos. Con algunas reglas, puedes generar todos los $C(n,r)$ combinaciones:
(1) Ya que quiere elegir $r$ de $n$ la secuencia inicial es $123\textrm{...r}$ y también se necesita la secuencia $123\textrm{...n}$ .
(2) Compare su último dígito: el último dígito de su $123\textrm{...r}$ y el último dígito de una la secuencia $123\textrm{...n}$ .
(3) Si son iguales, pasa a comparar el dígito anterior al último y así sucesivamente. Si no lo son, aumenta este dígito en tu $123\textrm{...r}$ por uno, truncar esos dígitos siguientes, y añadir el mismo número de dígitos truncados al dígito que acabas de aumentar, cada uno de esos dígitos es uno más que el dígito de su lado izquierdo. (Mira el ejemplo porque me resulta difícil describirlo bien).
Como puede comprobar, la secuencia $143$ no aparecerá la lista. Así que no volverá a contar la combinación representada por $134$ .
Ejemplo:
Considere el caso $C(5,3)$ :
$ n:12345\\ r:123$
Que $5\not=3$ , por lo que la siguiente es $12(3+1)=124$ .
Cuando $r$ es $145$ entonces $5=5,4=4,3\not=1$ Así que $145\to 1\_\ \_\to 2\_\ \_\to 2\ 3\ \_\to 2\ 3\ 4\to 234$ .
Y en realidad se puede empezar desde cualquier secuencia $a_1a_2a_3$ s.t. $a_1<a_2<a_3$ . Así que $245\to345$ y este es el final de $C(5,3)$ ¡!
$^{\dagger}$ si quiere sumergirse en los detalles del código, consulte mi pequeño programa en C++ La función tiene sólo quince líneas. Pero en general no importa el lenguaje que haya utilizado, la lógica es la misma, se llama algoritmo .