∫Atlas Matemáticas Aplicadas

Inicio › Temas › Matemáticas discretas y algoritmos

🕸️ Matemáticas discretas y algoritmos nivel medio

Combinatoria y triángulo de Pascal

Contar sin enumerar: permutaciones, variaciones, combinaciones y coeficientes binomiales.

🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)

La idea

La combinatoria responde a la pregunta «¿de cuántas maneras?» sin tener que enumerarlas. Todo se apoya en dos reglas: el principio del producto (si una elección tiene m opciones y la siguiente n, hay m·n resultados) y el principio de la suma (alternativas disjuntas se suman). De ahí salen las permutaciones de n objetos distintos, n!, las variaciones de n tomados de k en k cuando el orden importa, n!/(n − k)!, y las combinaciones cuando el orden no importa, C(n, k) = n!/(k!(n − k)!), que se lee «n sobre k».

Los números C(n, k) se llaman coeficientes binomiales porque son los coeficientes del desarrollo de (a + b)ⁿ. Cumplen dos propiedades fundamentales: la simetría C(n, k) = C(n, n − k), porque elegir k objetos equivale a descartar n − k, y la recurrencia de Pascal C(n, k) = C(n − 1, k − 1) + C(n − 1, k), que separa los casos «el último objeto entra» y «no entra». Colocando estos números en filas se obtiene el triángulo de Pascal, donde cada casilla es la suma de las dos que tiene encima; la suma de una fila completa es 2ⁿ, el número total de subconjuntos de un conjunto de n elementos.

Cuando hay repeticiones o restricciones aparecen variantes: combinaciones con repetición C(n + k − 1, k), permutaciones de objetos repetidos n!/(n₁! n₂! ⋯), y el principio de inclusión-exclusión para contar uniones de conjuntos que se solapan. El principio del palomar cierra el repertorio con un argumento sencillísimo y potente: si hay más objetos que cajas, alguna caja contiene al menos dos objetos. Estas cuentas son la base del cálculo de probabilidades en espacios equiprobables y del análisis de algoritmos que exploran configuraciones.

Fórmulas clave

  • PermutacionesP(n) = n! = n (n − 1) ⋯ 2 · 1
  • Variaciones (orden sí importa)V(n, k) = n! / (n − k)!
  • Combinaciones (orden no importa)C(n, k) = n! / [k! (n − k)!]
  • Recurrencia de PascalC(n, k) = C(n − 1, k − 1) + C(n − 1, k)
  • Binomio de Newton(a + b)ⁿ = Σ_{k=0..n} C(n, k) a^{n−k} b^k
  • Suma de una filaΣ_{k=0..n} C(n, k) = 2ⁿ

Dónde se aplica

Las loterías se diseñan con combinaciones: acertar 6 números entre 49 tiene una probabilidad de 1 entre C(49, 6) = 13 983 816. En informática, el número de subconjuntos 2ⁿ mide el tamaño del espacio de búsqueda de problemas como la mochila o la selección de variables en un modelo, y explica por qué hace falta heurística en cuanto n crece. En genética se cuentan genotipos posibles con permutaciones de alelos repetidos, y en diseño de experimentos las combinaciones determinan cuántos tratamientos hay que probar y cuántas comparaciones múltiples habrá que corregir después.

Con programación (Python)

import math

def variaciones(n, k):
    return math.factorial(n) // math.factorial(n - k)

def combinaciones(n, k):
    return math.comb(n, k)

n, k = 6, 3
print(f"{n}! =", math.factorial(n))
print(f"V({n},{k}) =", variaciones(n, k))
print(f"C({n},{k}) =", combinaciones(n, k))
print("simetria: C(7,2) =", combinaciones(7, 2), "y C(7,5) =", combinaciones(7, 5))

print("Triangulo de Pascal:")
fila = [1]
for i in range(7):
    print(" " * (3 * (6 - i)), "  ".join(f"{v:3}" for v in fila))
    fila = [1] + [fila[j] + fila[j + 1] for j in range(len(fila) - 1)] + [1]

# Enumeracion real de los subconjuntos de tamano k
import itertools
subs = list(itertools.combinations(range(1, n + 1), k))
print(f"hay {len(subs)} subconjuntos de {k} elementos; los 5 primeros:", subs[:5])
print("loteria 6/49:", combinaciones(49, 6), "boletos posibles")

La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.

Temas relacionados

Probabilidad clásica · Distribución binomial · Recursión y memoización · El problema de la mochila

← Todos los temas