Teoría de Conjuntos — Diagramas de Venn
Matemáticas Computacionales
Aviso Importante
Contenido
¿Qué son los Conjuntos?
Un conjunto es una colección de elementos distintos — cada elemento aparece solo una vez. El orden no importa: {1, 2, 3} y {3, 1, 2} representan exactamente el mismo conjunto. En programación, los conjuntos funcionan como estructuras de tipo Set, donde los duplicados se eliminan automáticamente.
Los conjuntos se escriben con llaves. Podemos listar los elementos directamente — A = {1, 2, 3} — o describir con una regla: A = {x | x es par}, que se lee "A es el conjunto de todos los x tal que x es par". El Conjunto Universo (U) contiene todos los elementos que estamos considerando en un contexto dado: todo lo que "existe" en nuestro problema.
Los Diagramas de Venn son la forma visual más clásica de representar conjuntos: cada conjunto es un círculo, y el rectángulo que lo rodea es el universo (U). Cuando dos círculos se superponen, la región de superposición representa los elementos que pertenecen a ambos conjuntos al mismo tiempo. Las secciones siguientes muestran cada operación con diagramas coloridos y ejemplos prácticos de software.
Ejemplo 1 — Conjuntos Definidos por Lista
TODOS los elementos de A y B combinados (sin repetición).
Unir dos listas de IDs de usuarios de bases de datos diferentes — quieres TODOS los usuarios únicos.
SOLO los elementos que están en A Y en B al mismo tiempo.
Encontrar amigos en común entre dos perfiles de redes sociales.
Ejemplo 1 — Conjuntos Definidos por Lista
A \ B • B \ A
Elementos que están en A pero NO están en B.
Usuarios que tienen cuenta pero nunca hicieron una compra.
Elementos que están en B pero NO están en A.
Funcionalidades pedidas por clientes que aún no están en el backlog del producto.
Ejemplo 1 — Conjuntos Definidos por Lista
A' • B'
Todo en el universo que NO está en A (= elementos que solo están en B, no compartidos).
Todos los usuarios inactivos (complemento del conjunto de usuarios activos).
Todo en el universo que NO está en B (= elementos que solo están en A, no compartidos).
Productos que no están en la categoría de descuento.
Ejemplo 1 — Conjuntos Definidos por Lista
(A ∪ B)'
Todo lo que NO está en A y NO está en B (aquí: vacío — todos los elementos pertenecen a al menos un conjunto).
Usuarios que no corresponden a NINGÚN filtro — registros completamente sin clasificar.
Ejemplo 2 — Conjuntos Definidos por Regla
Todos los números pares O números ≥ 10 (o ambos).
Números que son pares Y ≥ 10.
Ejemplo 2 — Conjuntos Definidos por Regla
B' • (A ∪ B)'
Todos los enteros de 1 a 20 que NO son ≥ 10 (es decir, números < 10).
Números que NO son pares Y NO son ≥ 10 (impares menores que 10).
Ejemplo 2 — Conjuntos Definidos por Regla
(A \ B)'
Todo EXCEPTO elementos que están solo en A (mantiene intersección, solo en B, y fuera).
Java — HashSet: Conjuntos en la Práctica
Cómo funcionan los conjuntos en código real
import java.util.HashSet; import java.util.Set; public class Sets { public static void main(String[] args) { // Crea un conjunto vacío de números enteros Set<Integer> numSet = new HashSet<>(); System.out.println(numSet.size()); // → 0 (vacío) numSet.add(5); // Agrega el 5 System.out.println(numSet.size()); // → 1 numSet.add(6); // Agrega el 6 System.out.println(numSet.size()); // → 2 numSet.add(5); // Intenta agregar 5 de nuevo System.out.println(numSet.size()); // → 2 (¡NO cambió! Set ignora duplicados) System.out.println(numSet.add(4)); // → true (4 era nuevo, se agregó) System.out.println(numSet.size()); // → 3 System.out.println(numSet.add(4)); // → false (4 ya existía, rechazado) System.out.println(numSet.size()); // → 3 (sigue siendo 3) // Imprime todo el conjunto — ¡el orden puede variar! System.out.println(numSet); // → [4, 5, 6] } }
Java — Objetos Personalizados en Sets
Por qué importan equals() y hashCode()
// Clase simple con dos atributos public class CoolClass { int value; // un número String text; // un texto public CoolClass(int value, String text) { this.value = value; this.text = text; } }
// Creando objetos con los MISMOS valores CoolClass object1 = new CoolClass(1, "One"); CoolClass object2 = new CoolClass(2, "Two"); CoolClass objectOther1 = new CoolClass(1, "One"); // ¡mismo valor que object1! Set<CoolClass> coolSet = new HashSet<>(); System.out.println(coolSet.size()); // → 0 coolSet.add(object1); coolSet.add(objectOther1); // MISMO valor, pero objeto diferente System.out.println(coolSet.size()); // → 2 (!!) — ¿No debería ser 1? // ⚠ ATENCIÓN: Sin sobrescribir equals() y hashCode(), // Java compara REFERENCIAS (dirección de memoria), no el contenido. // object1 y objectOther1 tienen valores iguales pero son objetos // diferentes → el Set los acepta como "diferentes".
Referencia Rápida
| Operación | Símbolo | Significado |
|---|---|---|
| Unión | A ∪ B | Todo lo que está en A o en B (o ambos) |
| Intersección | A ∩ B | Solo lo que está en A y en B |
| Diferencia | A \ B | Lo que está en A pero no en B |
| Complemento | A' | Todo en el universo que no está en A |
| Comp. de la Unión | (A ∪ B)' | Todo lo que no está en ninguno de los dos |
Ejercicios Prácticos
Resuelve usando las operaciones que aprendiste
Set<Integer> numbers = new HashSet<>(); numbers.add(3); numbers.add(3); System.out.println(numbers.size());
Respuestas
Referencias
Fuentes utilizadas en la elaboración de este material
¡Buenos estudios!
La Teoría de Conjuntos es la base de la lógica computacional