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.
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.
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.
La lista contiene 3 × 3 = 9 pares. La tabla permite comprobar visualmente que cada primera opción se combinó con todas las segundas opciones.
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írculo | Círculo rojo | Círculo azul | Círculo verde |
| Cuadrado | Cuadrado rojo | Cuadrado azul | Cuadrado verde |
Hay 2 filas y 3 columnas, por lo que existen 2 × 3 = 6 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.
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.
El procedimiento es equivalente a recorrer las filas y columnas de una tabla de doble entrada.
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.
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.
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.
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.
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.
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 A | Entrada B | A y B | A o B |
|---|---|---|---|
| Falso | Falso | Falso | Falso |
| Falso | Verdadero | Falso | Verdadero |
| Verdadero | Falso | Falso | Verdadero |
| Verdadero | Verdadero | Verdadero | Verdadero |
Con 2 entradas binarias hay 2 × 2 = 4 combinaciones. Enumerarlas permite verificar el resultado de una expresión para cada caso.
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:
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.
Una buena enumeración funciona como un experimento controlado: define qué casos se generan, en qué orden y bajo qué condiciones se conservan.
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.