[Generación de combinaciones en .NET]
Introducción
El uso de combinaciones es un tema muy utilizado en la probabilidad y en los juegos de azar como la lotería, sin embargo la generación de estas combinaciones puede ser un tema difícil de entender y aplicar.
Combinaciones
Las combinaciones son un arreglo de objetos sin importar el orden, es decir, si un arreglo ya salio no puede volver a salir en cualquier otro orden. Las combinaciones se definen de un conjunto de N elementos tomados de r en r. Aquí la formula general.
C(N,r) = N! / (N-r)! r!
Este teorema también puede establecerse como sigue:
El número de subconjuntos diferentes de r elementos cada uno, que puede formarse a partir de un conjunto de N elementos.
Ejemplo:
Tenemos 9 envases decorados diferentes y solo 6 posiciones para acomodarlos, los envases deberán ser tomados de 6 en 6. Cuantos paquetes de 6 diferentes envases podremos formar.
El código:
Aquí una función recursiva que genera todas las posibles combinaciones.
Código en C#:
///
/// Funcion recursiva que genera combinaciones de números de N en r
///
/// Inicialmente se debe de pasar 1 y este automaticamente se va incrementando"
/// Es el numero de elementos del Universo"
/// Es el numero de elementos del grupo"
/// Se utiliza para ir calculando en que numero de elemento vamos"
/// Arreglo que contiene la colección de elementos de la combinación"
/// Variable de texto donde se van mostrando las posibles combinaciones"
void Ciclo(int t, int N, int r, int x, ref int[] Elem, ref string strTex)
{
// Se repite hasta que t sea mayor que el número de formas posibles
while (t <= (N - (r - x))) { // Se generaran r ciclos recursivos if (r > x)
{
Elem[x-1] = t;
Ciclo((t + 1), N, r, (x + 1), ref Elem, ref strTex);
}
else
{
Elem[x-1] = t;
// Concatenamos la combinación
for (int i = 0; i < x; i++)
{
strTex += Elem[i].ToString("[#,##0]");
}
strTex += "\r\n";
}
t++;
}
}
Forma en que se manda a llamar la función.
Código en C#:
// Declaramos variables
int N = 9; // Nueve envases
int r = 6; // Seis espacios
int[] Elem = new int[r]; // Vector de la Combinación
string strTex = "";
// Iniciamos llamada recursiva a la función.
Ciclo(1, N, r, 1, ref Elem, ref strTex);
// Mostrar resultado en una caja de texto
txtCombina.Text = strTex;
0 comentarios:
Publicar un comentario en la entrada
Gracias por tus comentarios