Un poco de números

Alguien me pregunto en alguna ocasión que tan probable era ganarse el melate, para intentar explicárselo tuve que recurrir a mi empolvado cerebro y recordar un par de clases combinatoria (aún recuerdo al tierno intentando explicarnos el tema XD).

Calcular la cantidad de combinaciones de n elementos ordenados de k en k, puede llegar a ser un dolor de muelas, sin embargo con un poco de ingenio es posible reducir el proceso a la mitad de las operaciones y simplificar el proceso de multiplicar y luego dividir, analicemos la fórmula:


pondré de ejemplo el melate ya que es un sortteo muy famoso y todos quieren ganar en él, las reglas de éste sorteo dicen que tenemos que elegir un total de seis números diferentes entre 56 números posibles, es decir n=56 y k=6, de acuerdo a la función tendríamos que calcular n! o sea (56*55*54*53*52*51*un chingo de números*5*4*3*2*1), luego obtener k! o sea (6*5*4*3*2*1) y luego (n-k)! o lo que es lo mismo (50*49*48*47*un chingo de números más*5*4*3*2*1), en algún momento esto debe llevarse a una computadora para no volverse locos con tantos chingados números, desgraciadamente algunos no se detienen a pensar en el problema y simplemente obtienen todos los factoriales y hacen la división (perfectamente valido, pero hay que demostrar que pensamos y no solo limitarnos a imitar funciones sin ton ni son), bueno de acuerdo a lo que se nos enseño en la primaria respecto a las propiedades de las divisiones bastaría con calcular: (56*55*54*53*52*51)*50!/(6*5*4*3*2)*50!, como ya tenemos un 50! en ambos términos pos los mandamos al carajo puesto que 50!/50! = 1, ahora ya solo bastaría con simplificar los números y listo, pero definitivamente esto es mucho más fácil que calcular todos los factoriales por separado, ahora lo codificamos para poderlo usar hasta en una hoja de excel (bueno las nuevas versiones de excel ya la incluyen pero esto les dará una idea de como programar sus propias funciones usando algo de código de visual basic)

Public Function Combinaciones(n As Integer, k As Integer) As Long
Dim n1 As Long, nk As Integer, r1 As Long , I3 as Integer
nl = 1
rl = 1
nr = n - r + 1
For I3 = n To nr Step -1
  nl = nl * I3
Next
For I3 = 1 To r
  rl = rl * I3
Next
Combinaciones = nl / rl
End Function

esto lo metemos en un módulo (F12 o Alt + F11 dependiendo de la versión de office, ahí agregamos el modulo y aquí metemos el código de la función), luego llamamos a la función desde cualquier celda usando funciones "definidas por el usuario" y buscamos la nuestra, en los parámetros, n y k seleccionamos las celdas que contengan los valores que quieran calcular o en su defecto los insertamos de manera manual, bueno espero que quede un poco claro como usar funciones de vb en excel, tal vez un día de estos saque un tutorial sobre el tema, saluDoS!

Y para que dejen de soñar con ganarse el melate la cantidad de combinaciones es 32,468,436, es decir que si el asar decidiera no jugarnos una mala broma y hacer que alguna de esas combinaciones volviera a salir después de x tiempo y considerando un promedio de 2 sorteos cada semana, tardarían 312,196 años y seis meses que salieran todas las combinaciones, lo que vuelve poco probable que la nuestra este dentro de las primeas 8320 (los sorteos de los próximos 80 años), a despertar jajajaja XD

Comentarios

Entradas populares de este blog

Detener la sincronización de tiempo/fechas entre Host y Guest en Virtual Box

Extraer datos de un archivo.mdb (Access) con python

Solución al problema con odbc pgsql (postgresql) en Windows 7 de 64 bits