25. Principio del palomar

Si se distribuyen más objetos que casillas, al menos una casilla debe contener dos o más objetos.

25.1 Introducción

El principio del palomar, también llamado principio de Dirichlet, permite demostrar que una coincidencia es inevitable sin identificar exactamente dónde ocurre.

La idea es simple: si hay pocas categorías para muchos elementos, no es posible colocar cada elemento en una categoría diferente.

25.2 Enunciado básico

Si se colocan n+1 objetos en n casillas, al menos una casilla contiene dos o más objetos.

Objetos > casillas
⇒ alguna casilla tiene al menos 2 objetos

No importa cómo se realice la distribución. La coincidencia está garantizada por la diferencia entre la cantidad de objetos y de casillas.

25.3 Ejemplo de fechas de nacimiento

Si hay 13 personas y solo 12 meses posibles de nacimiento, al menos dos personas nacieron en el mismo mes.

13 personas > 12 meses
⇒ dos personas comparten mes de nacimiento

No necesitamos saber los meses concretos para garantizar la coincidencia.

25.4 Simulación de objetos y casillas

Indica la cantidad de objetos y casillas. La simulación distribuye los objetos de forma ordenada y muestra la casilla que contiene la mayor cantidad.

Distribuidor de objetos

25.5 Forma de demostrarlo

Supongamos que ninguna casilla tuviera dos objetos. Entonces cada casilla tendría como máximo un objeto.

n casillas × 1 objeto máximo por casilla = n objetos máximo

Pero se colocaron n+1 objetos. Esto contradice la suposición, por lo que alguna casilla debe tener al menos dos.

25.6 Versión generalizada

Si se distribuyen N objetos en k casillas, alguna casilla contiene al menos:

⌈N / k⌉ objetos

El símbolo ⌈x⌉ representa el menor entero mayor o igual que x. Esta versión indica una cantidad mínima garantizada en alguna casilla.

25.7 Ejemplo generalizado

Si se distribuyen 25 registros entre 6 categorías:

⌈25 / 6⌉ = ⌈4,166...⌉ = 5

Al menos una categoría contiene 5 registros. Puede contener más, pero no es posible que todas tengan como máximo 4.

25.8 Un ejemplo en JavaScript

Podemos calcular la cantidad mínima garantizada en una casilla con la función techo.

function minimoGarantizado(objetos, casillas) {
  return Math.ceil(objetos / casillas);
}

console.log(minimoGarantizado(25, 6));
console.log(minimoGarantizado(13, 12));

El resultado es 5 para 25 objetos en 6 casillas y 2 para 13 objetos en 12 casillas.

25.9 Encontrar una coincidencia

El principio garantiza que existe una coincidencia, pero no necesariamente identifica cuál. Para encontrarla, podemos recorrer una lista y registrar la categoría de cada elemento.

function encontrarRepetido(elementos) {
  const vistos = new Set();
  for (const elemento of elementos) {
    if (vistos.has(elemento)) return elemento;
    vistos.add(elemento);
  }
  return null;
}

console.log(encontrarRepetido(["A", "B", "C", "B"]));

El algoritmo encuentra un caso concreto, mientras que el principio del palomar solo necesita comparar cantidades para garantizar que existe alguno.

25.10 Aplicación a restos de división

Al dividir enteros por un número k, solo existen k restos posibles: 0, 1, ..., k-1. Si tomamos k+1 enteros, dos deben tener el mismo resto.

k+1 números → k restos posibles
⇒ dos números comparten resto al dividir por k

Esta observación aparece en demostraciones sobre divisibilidad y en algoritmos que agrupan valores por clases de resto.

25.11 Aplicaciones en informática

  • Detectar colisiones en tablas de categorías.
  • Analizar valores hash que comparten una posición.
  • Garantizar coincidencias en grupos de datos.
  • Distribuir elementos entre servidores o particiones.
  • Estudiar restos, índices y clases de equivalencia.
  • Demostrar límites mínimos de carga en estructuras.

25.12 Errores frecuentes

  • Confundir objetos con casillas.
  • Usar una desigualdad incorrecta: debe haber más objetos que casillas.
  • Interpretar la conclusión como “todas las casillas tienen dos objetos”.
  • Confundir una cantidad mínima garantizada con el promedio exacto.
  • Olvidar que el principio prueba existencia, pero no siempre localiza el caso.

25.13 Qué debes recordar de este tema

  • Más objetos que casillas obliga a una coincidencia.
  • El principio básico garantiza al menos dos objetos en una casilla.
  • La versión generalizada garantiza al menos ⌈N/k⌉ objetos en alguna casilla.
  • Puede demostrarse suponiendo que ninguna casilla supera cierto límite.
  • Es útil para demostrar existencia de repeticiones y colisiones.
  • En informática aparece en hashes, particiones y distribución de datos.

25.14 Conclusión

El principio del palomar permite demostrar que ciertas coincidencias son inevitables cuando la cantidad de objetos supera la cantidad de categorías disponibles. Su fuerza está en garantizar una conclusión sin conocer la distribución exacta.

En el próximo tema estudiaremos el conteo mediante complemento, una estrategia que cuenta los casos válidos restando los casos que no cumplen una condición.