13. Diferencia y diferencia simétrica

La diferencia permite obtener los elementos que están en un conjunto pero no en otro. La diferencia simétrica reúne los elementos que pertenecen a uno de los conjuntos, pero no a ambos.

13.1 Introducción

Después de estudiar unión e intersección, podemos analizar operaciones que sirven para separar elementos. La diferencia y la diferencia simétrica permiten comparar conjuntos y detectar qué elementos no coinciden.

En programación, estas operaciones aparecen al calcular permisos faltantes, elementos eliminados, cambios entre versiones, resultados exclusivos o diferencias entre listas.

13.2 Diferencia de conjuntos

La diferencia de A y B es el conjunto formado por los elementos que pertenecen a A pero no pertenecen a B.

A - B = {x | x ∈ A y x ∉ B}

También puede escribirse como A \ B. En este curso usaremos principalmente A - B.

13.3 Primer ejemplo de diferencia

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A - B = {1, 2}

Los elementos 1 y 2 pertenecen a A y no pertenecen a B. Los elementos 3 y 4 se excluyen porque también están en B.

13.4 La diferencia no es conmutativa

En general, A - B no es igual a B - A. El orden importa.

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A - B = {1, 2} B - A = {5, 6}

La primera diferencia toma elementos exclusivos de A. La segunda toma elementos exclusivos de B.

13.5 Diferencia en diagramas de Venn

En un diagrama de Venn, A - B es la parte de A que no se superpone con B.

A: usuarios con permisos asignados B: permisos requeridos B - A: permisos requeridos que faltan

Esta interpretación es muy útil para detectar faltantes o exclusiones.

13.6 Ejemplos de diferencia

A B A - B B - A
{1, 2, 3} {3, 4, 5} {1, 2} {4, 5}
{HTML, CSS, JavaScript} {CSS, SQL} {HTML, JavaScript} {SQL}
{leer, editar} {leer, editar, publicar} {publicar}
{a, b} {c, d} {a, b} {c, d}

13.7 Diferencia con el conjunto vacío

Si restamos el conjunto vacío a un conjunto, no eliminamos ningún elemento.

A - ∅ = A

En cambio, si restamos cualquier conjunto al conjunto vacío, el resultado sigue siendo vacío.

∅ - A = ∅

13.8 Diferencia de un conjunto consigo mismo

Si restamos un conjunto de sí mismo, no queda ningún elemento.

A - A = ∅

Todos los elementos de A se eliminan porque también pertenecen al conjunto que se resta.

13.9 Diferencia simétrica

La diferencia simétrica de A y B es el conjunto formado por los elementos que pertenecen a A o a B, pero no a ambos al mismo tiempo.

A △ B = (A - B) ∪ (B - A)

También se puede pensar como la unión sin la intersección.

13.10 Primer ejemplo de diferencia simétrica

A = {1, 2, 3, 4} B = {3, 4, 5, 6} A △ B = {1, 2, 5, 6}

Los elementos 3 y 4 quedan fuera porque pertenecen a ambos conjuntos.

13.11 Diferencia simétrica en diagramas de Venn

En un diagrama de Venn, la diferencia simétrica corresponde a las dos regiones exclusivas: solo A y solo B. La región central de intersección queda excluida.

A △ B: elementos que están en A o en B, pero no en ambos

Esta operación sirve para detectar cambios o discrepancias entre dos colecciones.

13.12 Propiedades básicas

Operación Propiedad Comentario
Diferencia A - B no siempre es igual a B - A El orden importa
Diferencia A - A = ∅ Quitar todo A deja vacío
Diferencia A - ∅ = A El vacío no quita elementos
Diferencia simétrica A △ B = B △ A El orden no cambia el resultado
Diferencia simétrica A △ A = ∅ No hay elementos exclusivos si ambos conjuntos son iguales

13.13 Diferencia en JavaScript

Podemos calcular A - B filtrando los elementos de A que no están en B.

function diferencia(a, b) {
  return new Set([...a].filter(elemento => !b.has(elemento)));
}

const a = new Set([1, 2, 3, 4]);
const b = new Set([3, 4, 5, 6]);

console.log([...diferencia(a, b)]);
console.log([...diferencia(b, a)]);

La salida muestra que el orden de los conjuntos cambia el resultado.

13.14 Diferencia simétrica en JavaScript

Para calcular la diferencia simétrica, podemos unir las dos diferencias.

function union(a, b) {
  return new Set([...a, ...b]);
}

function diferencia(a, b) {
  return new Set([...a].filter(elemento => !b.has(elemento)));
}

function diferenciaSimetrica(a, b) {
  return union(diferencia(a, b), diferencia(b, a));
}

const permisosAntes = new Set(["leer", "editar", "publicar"]);
const permisosDespues = new Set(["leer", "publicar", "eliminar"]);

console.log([...diferenciaSimetrica(permisosAntes, permisosDespues)]);

El resultado contiene permisos que cambiaron: los que estaban solo antes o solo después.

13.15 Aplicaciones prácticas

Situación Operación Resultado
Permisos faltantes requeridos - asignados Accesos que deben agregarse
Elementos eliminados anteriores - actuales Datos que ya no están
Cambios entre versiones versiónA △ versiónB Elementos diferentes entre ambas versiones
Filtros excluyentes seleccionados - bloqueados Elementos permitidos luego de quitar restricciones

13.16 Errores frecuentes

  • Creer que A - B siempre es igual a B - A.
  • Incluir elementos de la intersección en la diferencia simétrica.
  • Confundir diferencia con complemento sin definir el universo.
  • Olvidar que A - A = ∅.
  • Duplicar elementos al unir las dos diferencias.

13.17 Qué debes recordar de este tema

  • A - B contiene los elementos que están en A y no están en B.
  • La diferencia no es conmutativa: el orden importa.
  • La diferencia simétrica contiene elementos que están en uno de los conjuntos, pero no en ambos.
  • A △ B = (A - B) ∪ (B - A).
  • La diferencia simétrica excluye la intersección.
  • En JavaScript, filter y has permiten calcular estas operaciones.

13.18 Conclusión

La diferencia permite quitar de un conjunto los elementos que aparecen en otro. La diferencia simétrica permite detectar elementos exclusivos de cada conjunto. Ambas operaciones son muy útiles para comparar colecciones y analizar cambios.

En el próximo tema estudiaremos el complemento de un conjunto.