10. Conjunto potencia y cantidad de subconjuntos

El conjunto potencia reúne todos los subconjuntos posibles de un conjunto. Si un conjunto tiene n elementos, entonces tiene 2ⁿ subconjuntos.

10.1 Introducción

En el tema anterior vimos que un conjunto puede estar contenido dentro de otro. Ahora estudiaremos todos los subconjuntos que pueden formarse a partir de un conjunto dado.

El conjunto que contiene todos esos subconjuntos se llama conjunto potencia. Este concepto aparece en combinatoria, análisis de posibilidades, permisos, selección de opciones y generación de casos de prueba.

10.2 Qué es el conjunto potencia

El conjunto potencia de un conjunto A es el conjunto formado por todos los subconjuntos de A. Se representa como P(A) o como 𝒫(A).

A = {a, b} P(A) = {∅, {a}, {b}, {a, b}}

Observa que el conjunto potencia contiene conjuntos como elementos.

10.3 El conjunto vacío siempre aparece

El conjunto vacío es subconjunto de cualquier conjunto. Por eso, siempre forma parte del conjunto potencia.

∅ ⊆ A ∅ ∈ P(A)

Aunque A tenga muchos elementos, su conjunto potencia siempre incluye .

10.4 El conjunto original también aparece

Todo conjunto es subconjunto de sí mismo. Por lo tanto, el conjunto original también forma parte de su conjunto potencia.

A ⊆ A A ∈ P(A)

El conjunto potencia contiene desde el subconjunto vacío hasta el conjunto completo.

10.5 Ejemplo con un elemento

Si un conjunto tiene un solo elemento, su conjunto potencia tiene dos subconjuntos: el vacío y el conjunto completo.

A = {x} P(A) = {∅, {x}}

En este caso, |A| = 1 y |P(A)| = 2.

10.6 Ejemplo con dos elementos

Con dos elementos se obtienen cuatro subconjuntos.

A = {a, b} P(A) = {∅, {a}, {b}, {a, b}}

En este caso, |A| = 2 y |P(A)| = 4.

10.7 Ejemplo con tres elementos

Con tres elementos se obtienen ocho subconjuntos.

A = {a, b, c} P(A) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}

En este caso, |A| = 3 y |P(A)| = 8.

10.8 Cantidad de subconjuntos

Si un conjunto tiene n elementos, cada elemento tiene dos posibilidades: estar o no estar en un subconjunto. Por eso, la cantidad total de subconjuntos es 2ⁿ.

Si |A| = n, entonces |P(A)| = 2ⁿ

Esta fórmula permite calcular la cantidad de subconjuntos sin tener que listarlos uno por uno.

10.9 Tabla de cantidades

Cardinalidad de A Cantidad de subconjuntos Cálculo
|A| = 0 1 2⁰ = 1
|A| = 1 2 2¹ = 2
|A| = 2 4 2² = 4
|A| = 3 8 2³ = 8
|A| = 4 16 2⁴ = 16
|A| = 5 32 2⁵ = 32

10.10 Conjunto potencia del conjunto vacío

El conjunto vacío tiene un solo subconjunto: él mismo. Por eso, su conjunto potencia contiene un elemento.

A = ∅ P(A) = {∅} |P(A)| = 1

Esto coincide con la fórmula 2⁰ = 1.

10.11 Subconjuntos propios y conjunto potencia

El conjunto potencia contiene todos los subconjuntos, incluyendo el conjunto original. Si queremos contar solo los subconjuntos propios, debemos excluir el conjunto completo.

Cantidad de subconjuntos propios = 2ⁿ - 1

Por ejemplo, si A = {a, b, c}, entonces tiene 8 subconjuntos y 7 subconjuntos propios.

10.12 Generar el conjunto potencia en JavaScript

Podemos generar todos los subconjuntos de un arreglo agregando cada elemento a los subconjuntos ya construidos.

function conjuntoPotencia(elementos) {
  return elementos.reduce(
    (subconjuntos, elemento) => [
      ...subconjuntos,
      ...subconjuntos.map(subconjunto => [...subconjunto, elemento])
    ],
    [[]]
  );
}

const resultado = conjuntoPotencia(["a", "b", "c"]);

console.log(resultado);
console.log(resultado.length);

El arreglo vacío [] representa al conjunto vacío. Para tres elementos, el resultado tiene ocho subconjuntos.

10.13 Aplicación: combinaciones de opciones

El conjunto potencia sirve para representar todas las formas posibles de elegir opciones. Por ejemplo, si una interfaz permite activar tres filtros, cada subconjunto representa una combinación de filtros activos.

function conjuntoPotencia(elementos) {
  return elementos.reduce(
    (subconjuntos, elemento) => [
      ...subconjuntos,
      ...subconjuntos.map(subconjunto => [...subconjunto, elemento])
    ],
    [[]]
  );
}

const filtros = ["precio", "categoria", "stock"];
const combinaciones = conjuntoPotencia(filtros);

console.log(combinaciones);

La salida contiene desde la combinación sin filtros hasta la combinación con todos los filtros activos.

10.14 Crecimiento exponencial

La cantidad de subconjuntos crece muy rápido. Cada nuevo elemento duplica la cantidad de subconjuntos posibles.

Elementos Subconjuntos Observación
10 1.024 Aún manejable en muchos casos
20 1.048.576 Ya puede ser costoso
30 1.073.741.824 Puede ser impracticable generar todo

En programación, esta explosión combinatoria obliga a pensar con cuidado antes de generar todos los subconjuntos de una colección grande.

10.15 Aplicaciones prácticas

Área Uso del conjunto potencia Ejemplo
Pruebas de software Generar combinaciones de opciones Probar filtros activos e inactivos
Permisos Enumerar combinaciones de accesos Leer, editar, publicar
Optimización Explorar subconjuntos candidatos Seleccionar características o recursos
Interfaces Combinar estados posibles Opciones seleccionadas por el usuario

10.16 Errores frecuentes

  • Olvidar incluir el conjunto vacío dentro del conjunto potencia.
  • Olvidar incluir el conjunto original como subconjunto.
  • Confundir elementos del conjunto original con elementos del conjunto potencia.
  • Calcular en lugar de 2ⁿ.
  • Generar todos los subconjuntos en código sin considerar el crecimiento exponencial.

10.17 Qué debes recordar de este tema

  • El conjunto potencia de A contiene todos los subconjuntos de A.
  • Se representa como P(A) o 𝒫(A).
  • Siempre incluye el conjunto vacío.
  • Siempre incluye el conjunto original.
  • Si |A| = n, entonces |P(A)| = 2ⁿ.
  • La cantidad de subconjuntos crece de forma exponencial.

10.18 Conclusión

El conjunto potencia permite estudiar todas las combinaciones posibles de elementos dentro de un conjunto. Es una idea simple, pero muy poderosa, especialmente cuando se trabaja con opciones, permisos, filtros o casos de prueba.

En el próximo tema estudiaremos la unión de conjuntos.