Teoria dos Conjuntos — Diagramas de Venn
Matemática Computacional
Aviso Importante
Conteúdo
O que são Conjuntos?
Um conjunto é uma coleção de elementos distintos — ou seja, cada elemento aparece apenas uma vez. Não importa a ordem: {1, 2, 3} e {3, 1, 2} representam exatamente o mesmo conjunto. Na programação, conjuntos funcionam como estruturas do tipo Set, onde duplicatas são automaticamente eliminadas.
Conjuntos são escritos com chaves. Podemos listar os elementos diretamente — A = {1, 2, 3} — ou descrever com uma regra: A = {x | x é par}, que se lê "A é o conjunto de todos os x tal que x é par". O Conjunto Universo (U) contém todos os elementos que estamos considerando em um dado contexto: tudo que "existe" no nosso problema.
Os Diagramas de Venn são a forma visual mais clássica de representar conjuntos: cada conjunto é um círculo, e o retângulo ao redor é o universo (U). Quando dois círculos se sobrepõem, a região de sobreposição representa os elementos que pertencem aos dois conjuntos ao mesmo tempo. As seções a seguir mostram cada operação com diagramas coloridos e exemplos práticos de software.
Exemplo 1 — Conjuntos Definidos por Lista
TODOS os elementos de A e B combinados (sem repetição).
Juntar duas listas de IDs de usuários de bancos de dados diferentes — você quer TODOS os usuários únicos.
SOMENTE os elementos que estão em A E em B ao mesmo tempo.
Encontrar amigos em comum entre dois perfis de redes sociais.
Exemplo 1 — Conjuntos Definidos por Lista
A \ B • B \ A
Elementos que estão em A mas NÃO estão em B.
Usuários que têm conta mas nunca fizeram uma compra.
Elementos que estão em B mas NÃO estão em A.
Funcionalidades pedidas por clientes que ainda não estão no backlog do produto.
Exemplo 1 — Conjuntos Definidos por Lista
A' • B'
Tudo no universo que NÃO está em A (= elementos que só estão em B, não compartilhados).
Todos os usuários inativos (complemento do conjunto de usuários ativos).
Tudo no universo que NÃO está em B (= elementos que só estão em A, não compartilhados).
Produtos que não estão na categoria de desconto.
Exemplo 1 — Conjuntos Definidos por Lista
(A ∪ B)'
Tudo que NÃO está em A e NÃO está em B (aqui: vazio — todos os elementos pertencem a pelo menos um conjunto).
Usuários que não correspondem a NENHUM filtro — registros completamente não classificados.
Exemplo 2 — Conjuntos Definidos por Regra
Todos os números pares OU números ≥ 10 (ou ambos).
Números que são pares E ≥ 10.
Exemplo 2 — Conjuntos Definidos por Regra
B' • (A ∪ B)'
Todos os inteiros de 1 a 20 que NÃO são ≥ 10 (ou seja, números < 10).
Números que NÃO são pares E NÃO são ≥ 10 (ímpares menores que 10).
Exemplo 2 — Conjuntos Definidos por Regra
(A \ B)'
Tudo EXCETO elementos que estão só em A (mantém interseção, só em B, e fora).
Java — HashSet: Conjuntos na Prática
Como conjuntos funcionam em código real
import java.util.HashSet; import java.util.Set; public class Sets { public static void main(String[] args) { // Cria um conjunto vazio de números inteiros Set<Integer> numSet = new HashSet<>(); System.out.println(numSet.size()); // → 0 (vazio) numSet.add(5); // Adiciona o 5 System.out.println(numSet.size()); // → 1 numSet.add(6); // Adiciona o 6 System.out.println(numSet.size()); // → 2 numSet.add(5); // Tenta adicionar 5 de novo System.out.println(numSet.size()); // → 2 (NÃO mudou! Set ignora duplicatas) System.out.println(numSet.add(4)); // → true (4 era novo, foi adicionado) System.out.println(numSet.size()); // → 3 System.out.println(numSet.add(4)); // → false (4 já existia, rejeitado) System.out.println(numSet.size()); // → 3 (continua 3) // Imprime todo o conjunto — a ordem pode variar! System.out.println(numSet); // → [4, 5, 6] } }
Java — Objetos Customizados em Sets
Por que equals() e hashCode() importam
// Classe simples com dois atributos public class CoolClass { int value; // um número String text; // um texto public CoolClass(int value, String text) { this.value = value; this.text = text; } }
// Criando objetos com os MESMOS valores CoolClass object1 = new CoolClass(1, "One"); CoolClass object2 = new CoolClass(2, "Two"); CoolClass objectOther1 = new CoolClass(1, "One"); // mesmo valor que object1! Set<CoolClass> coolSet = new HashSet<>(); System.out.println(coolSet.size()); // → 0 coolSet.add(object1); coolSet.add(objectOther1); // MESMO valor, mas objeto diferente System.out.println(coolSet.size()); // → 2 (!!) — Deveria ser 1? // ⚠ ATENÇÃO: Sem sobrescrever equals() e hashCode(), // Java compara REFERÊNCIA (endereço na memória), não o conteúdo. // object1 e objectOther1 têm valores iguais mas são objetos // diferentes → o Set aceita os dois como "diferentes".
Resumo Rápido
| Operação | Símbolo | Significado |
|---|---|---|
| União | A ∪ B | Tudo que está em A ou em B (ou ambos) |
| Interseção | A ∩ B | Somente o que está em A e em B |
| Diferença | A \ B | O que está em A mas não em B |
| Complemento | A' | Tudo no universo que não está em A |
| Comp. da União | (A ∪ B)' | Tudo que não está em nenhum dos dois |
Exercícios Práticos
Resolva usando as operações que você aprendeu
Set<Integer> numbers = new HashSet<>(); numbers.add(3); numbers.add(3); System.out.println(numbers.size());
Respostas
Referências
Fontes utilizadas na elaboração deste material
Bons estudos!
Teoria dos Conjuntos é a base da lógica computacional