19. Producto cartesiano

El producto cartesiano combina elementos de dos conjuntos formando pares ordenados. Es la base para estudiar relaciones, funciones, coordenadas, tablas, combinaciones y estructuras de datos.

19.1 Introducción

El producto cartesiano permite combinar los elementos de dos conjuntos de manera ordenada. A diferencia de la unión o la intersección, no produce simplemente elementos individuales, sino pares ordenados.

Este concepto es fundamental para construir relaciones y funciones, y también aparece en programación cuando generamos combinaciones, coordenadas, asociaciones entre datos o pares clave-valor.

19.2 Qué es un par ordenado

Un par ordenado es una estructura formada por dos componentes, donde importa el orden.

(a, b)

El primer componente es a y el segundo componente es b. En general, (a, b) no es igual a (b, a).

19.3 Definición de producto cartesiano

El producto cartesiano de dos conjuntos A y B es el conjunto formado por todos los pares ordenados cuyo primer elemento pertenece a A y cuyo segundo elemento pertenece a B.

A × B = {(a, b) | a ∈ A y b ∈ B}

El símbolo × se lee "producto cartesiano".

19.4 Primer ejemplo

A = {1, 2} B = {x, y} A × B = {(1, x), (1, y), (2, x), (2, y)}

Cada elemento de A se combina con cada elemento de B.

19.5 El orden de los conjuntos importa

En general, A × B no es igual a B × A, porque los pares ordenados cambian de posición.

A = {1, 2} B = {x, y} A × B = {(1, x), (1, y), (2, x), (2, y)} B × A = {(x, 1), (x, 2), (y, 1), (y, 2)}

Ambos productos tienen la misma cantidad de pares, pero sus elementos no son los mismos.

19.6 Cardinalidad del producto cartesiano

Si A y B son conjuntos finitos, la cantidad de elementos de A × B es el producto de sus cardinalidades.

|A × B| = |A| · |B|

Si |A| = 2 y |B| = 3, entonces |A × B| = 6.

19.7 Ejemplos de cardinalidad

A B |A| |B| |A × B|
{1, 2} {a, b, c} 2 3 6
{HTML, CSS, JavaScript} {básico, avanzado} 3 2 6
{leer, editar} {permitido, denegado} 2 2 4
{1, 2, 3} 0 3 0

19.8 Producto cartesiano con el conjunto vacío

Si uno de los conjuntos es vacío, el producto cartesiano también es vacío.

A × ∅ = ∅ ∅ × A = ∅

No se pueden formar pares si falta un elemento para una de las posiciones.

19.9 Representación en tabla

El producto cartesiano puede representarse como una tabla donde las filas son elementos de A y las columnas son elementos de B.

A \ B x y z
1 (1, x) (1, y) (1, z)
2 (2, x) (2, y) (2, z)

19.10 Producto cartesiano y coordenadas

El plano cartesiano puede verse como un producto cartesiano entre conjuntos numéricos. Por ejemplo, R × R representa todos los pares ordenados de números reales.

R × R = {(x, y) | x ∈ R y y ∈ R}

Cada par (x, y) representa un punto del plano.

19.11 Producto cartesiano y relaciones

Una relación entre A y B puede definirse como un subconjunto de A × B.

A = {1, 2, 3} B = {a, b} A × B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b)}

Una relación podría seleccionar solo algunos de esos pares, por ejemplo {(1, a), (2, b)}.

19.12 Generar producto cartesiano en JavaScript

Podemos generar el producto cartesiano con dos ciclos anidados o con métodos de arreglos.

function productoCartesiano(a, b) {
  return a.flatMap(elementoA =>
    b.map(elementoB => [elementoA, elementoB])
  );
}

const numeros = [1, 2];
const letras = ["x", "y", "z"];

console.log(productoCartesiano(numeros, letras));

Cada par se representa como un arreglo de dos elementos.

19.13 Ejemplo aplicado: opciones de producto

El producto cartesiano permite combinar opciones. Por ejemplo, talles y colores de una prenda.

function productoCartesiano(a, b) {
  return a.flatMap(elementoA =>
    b.map(elementoB => [elementoA, elementoB])
  );
}

const talles = ["S", "M", "L"];
const colores = ["negro", "blanco"];

const variantes = productoCartesiano(talles, colores);

console.log(variantes);

El resultado contiene todas las combinaciones posibles de talle y color.

19.14 Producto cartesiano de más de dos conjuntos

El producto cartesiano puede extenderse a tres o más conjuntos. En ese caso se forman tuplas ordenadas.

A × B × C = {(a, b, c) | a ∈ A, b ∈ B y c ∈ C}

Si A, B y C son finitos, la cardinalidad es |A| · |B| · |C|.

19.15 Aplicaciones prácticas

Área Uso del producto cartesiano Ejemplo
Comercio electrónico Generar variantes Talles × colores
Bases de datos Combinar registros Clientes × productos
Grafos Definir posibles pares de nodos Origen × destino
Pruebas Generar combinaciones de casos Navegadores × sistemas operativos
Relaciones Definir pares posibles Usuario × permiso

19.16 Errores frecuentes

  • Confundir producto cartesiano con unión de conjuntos.
  • Olvidar que los pares son ordenados.
  • Creer que A × B siempre es igual a B × A.
  • Contar mal la cardinalidad cuando los conjuntos tienen tamaños distintos.
  • Olvidar que si uno de los conjuntos es vacío, el producto cartesiano es vacío.

19.17 Qué debes recordar de este tema

  • El producto cartesiano forma pares ordenados.
  • A × B = {(a, b) | a ∈ A y b ∈ B}.
  • En general, A × B no es igual a B × A.
  • Si A y B son finitos, |A × B| = |A| · |B|.
  • Una relación entre A y B puede verse como un subconjunto de A × B.
  • En JavaScript, el producto cartesiano puede generarse con flatMap y map.

19.18 Conclusión

El producto cartesiano permite construir combinaciones ordenadas entre elementos de conjuntos. Es un puente fundamental entre teoría de conjuntos, relaciones, funciones, coordenadas y estructuras usadas en programación.

En el próximo tema estudiaremos pares ordenados y tuplas.