8. Tablas y técnicas de enumeración

Las tablas y las técnicas de enumeración permiten organizar casos, comprobar cálculos y detectar repeticiones o configuraciones que no cumplen las restricciones.

8.1 Introducción

Una fórmula combinatoria permite contar rápidamente, pero a veces necesitamos observar los casos concretos. Las tablas organizan las posibilidades en filas y columnas, mientras que la enumeración construye cada caso siguiendo una regla.

Estas herramientas son útiles para comprobar una respuesta, explicar un procedimiento, encontrar patrones y validar que no se omitieron configuraciones.

8.2 Qué significa enumerar

Enumerar significa listar los elementos de un conjunto o las configuraciones de un problema siguiendo un orden definido. El orden puede ser alfabético, numérico, por etapas o lexicográfico.

Conjunto de símbolos: {A, B, C}

Enumeración de pares:
(A, A), (A, B), (A, C),
(B, A), (B, B), (B, C),
(C, A), (C, B), (C, C)

La lista contiene 3 × 3 = 9 pares. La tabla permite comprobar visualmente que cada primera opción se combinó con todas las segundas opciones.

8.3 Tablas de doble entrada

Una tabla de doble entrada coloca las opciones de un grupo en las filas y las opciones de otro grupo en las columnas. Cada celda representa una combinación.

Forma / Color Rojo Azul Verde
CírculoCírculo rojoCírculo azulCírculo verde
CuadradoCuadrado rojoCuadrado azulCuadrado verde

Hay 2 filas y 3 columnas, por lo que existen 2 × 3 = 6 configuraciones.

8.4 Simulación: generar una tabla de configuraciones

Selecciona la cantidad de filas y columnas. La tabla muestra cada combinación y permite filtrar las configuraciones que cumplen una condición sencilla.

Enumerador de doble entrada

Las filas y columnas comienzan en 1. Una fila verde indica que la configuración se muestra según el filtro elegido.

8.5 Enumeración sistemática

Una enumeración es sistemática cuando sigue un procedimiento que garantiza que cada caso se visita una sola vez. Una técnica habitual es fijar la primera posición y recorrer todas las opciones de la segunda; luego se cambia la primera y se repite.

Fijar la primera opción → recorrer todas las segundas opciones
Cambiar la primera opción → recorrer todas las segundas opciones
Continuar hasta completar la tabla

El procedimiento es equivalente a recorrer las filas y columnas de una tabla de doble entrada.

8.6 Un ejemplo en JavaScript

El siguiente código enumera todas las combinaciones entre dos listas.

const tipos = ["texto", "imagen", "audio"];
const tamaños = ["pequeño", "grande"];
const configuraciones = [];

for (const tipo of tipos) {
  for (const tamaño of tamaños) {
    configuraciones.push({ tipo, tamaño });
  }
}

console.log(configuraciones);
console.log(`Casos enumerados: ${configuraciones.length}`);

Se generan 3 × 2 = 6 objetos. La estructura de cada caso conserva la información de las dos decisiones.

8.7 Enumerar con una condición

Podemos generar todos los casos y conservar solamente los que cumplen una condición. Esto permite estudiar configuraciones válidas y descartadas.

const valores = [1, 2, 3, 4];
const pares = [];

for (const primero of valores) {
  for (const segundo of valores) {
    if ((primero + segundo) % 2 === 0) {
      pares.push([primero, segundo]);
    }
  }
}

console.log(pares);
console.log(`Pares válidos: ${pares.length}`);

La enumeración construye pares y la condición elimina los que tienen suma impar. En problemas grandes, conviene buscar una fórmula o estrategia que evite generar todos los casos.

8.8 Orden lexicográfico

El orden lexicográfico es parecido al orden de las palabras en un diccionario. Se compara primero la posición inicial; si coincide, se compara la siguiente posición.

AA, AB, AC,
BA, BB, BC,
CA, CB, CC

Este orden es útil para enumerar cadenas, combinaciones y configuraciones de manera predecible. También facilita comparar resultados entre una enumeración manual y una generada por un algoritmo.

8.9 Evitar duplicados

Una técnica de enumeración debe definir si el orden produce resultados distintos. Si estamos formando pares ordenados, (A, B) y (B, A) son diferentes. Si estamos formando grupos sin orden, podrían representar la misma selección.

const elementos = ["A", "B", "C"];
const paresSinRepetir = [];

for (let i = 0; i < elementos.length; i += 1) {
  for (let j = i + 1; j < elementos.length; j += 1) {
    paresSinRepetir.push([elementos[i], elementos[j]]);
  }
}

console.log(paresSinRepetir);

Al comenzar el segundo índice después del primero, evitamos generar (B, A) después de haber generado (A, B). Esta idea se desarrollará al estudiar combinaciones.

8.10 Tablas de verdad y tablas de casos

Una tabla de verdad enumera combinaciones de valores lógicos y muestra el resultado de una expresión. La misma idea general aparece en tablas de casos: cada fila representa una configuración y cada columna describe una propiedad.

Entrada AEntrada BA y BA o B
FalsoFalsoFalsoFalso
FalsoVerdaderoFalsoVerdadero
VerdaderoFalsoFalsoVerdadero
VerdaderoVerdaderoVerdaderoVerdadero

Con 2 entradas binarias hay 2 × 2 = 4 combinaciones. Enumerarlas permite verificar el resultado de una expresión para cada caso.

8.11 Enumeración y complejidad

Enumerar es claro y fácil de verificar, pero puede ser costoso cuando el número de casos crece. Si hay 10 opciones en cada una de 5 posiciones, existen:

10 × 10 × 10 × 10 × 10 = 100.000 configuraciones

En ese caso, construir una tabla completa puede consumir tiempo y memoria. La combinatoria ayuda a conocer el tamaño del problema antes de elegir una técnica de enumeración.

8.12 Aplicaciones en informática

  • Generar casos de prueba.
  • Construir tablas de decisión.
  • Explorar configuraciones de parámetros.
  • Verificar todas las entradas de un problema pequeño.
  • Encontrar patrones en secuencias y combinaciones.
  • Validar fórmulas combinatorias con ejemplos concretos.

Una buena enumeración funciona como un experimento controlado: define qué casos se generan, en qué orden y bajo qué condiciones se conservan.

8.13 Errores frecuentes

  • Omitir una fila o columna de la tabla.
  • Generar dos veces la misma configuración.
  • Aplicar una condición antes de completar correctamente el caso.
  • Confundir pares ordenados con selecciones sin orden.
  • Intentar enumerar un espacio de búsqueda demasiado grande.

8.14 Qué debes recordar de este tema

  • Enumerar significa listar casos siguiendo un procedimiento.
  • Las tablas de doble entrada organizan combinaciones de dos grupos.
  • Una enumeración sistemática evita omisiones y duplicados.
  • Las condiciones permiten filtrar configuraciones válidas.
  • El orden lexicográfico produce listas predecibles.
  • Enumerar casos pequeños sirve para verificar fórmulas.
  • En problemas grandes, el crecimiento combinatorio puede hacer inviable la enumeración completa.

8.15 Conclusión

Las tablas y técnicas de enumeración permiten observar y organizar posibilidades de forma ordenada. Aunque no siempre conviene generar todos los casos, construir ejemplos pequeños ayuda a comprender la estructura del problema y a comprobar los resultados obtenidos mediante fórmulas.

En el próximo tema estudiaremos el factorial de un número, una operación fundamental para contar ordenamientos.