M03L06Semana 2~3 h
L06 — Operaciones conjuntistas en TypeScript
~3 h · Semana 2
Implementas las operaciones que Rosen define y las pruebas contra ejemplos finitos.
Objetivo
Implementar unión, intersección, diferencia, subconjunto y complemento relativo a un universo U; cubrir con tests.
Pasos
1. Especificación (20 min)
En apuntes/conjuntos.md, añade sección Operaciones con definiciones:
A ∪ B = {x | x ∈ A ∨ x ∈ B}A ∩ B = {x | x ∈ A ∧ x ∈ B}A − B = {x | x ∈ A ∧ x ∉ B}Ārespecto aU:U − A
2. Implementación (70–80 min)
projects/m03-discretas/src/sets.ts:
export function union<T>(a: Set<T>, b: Set<T>): Set<T> {
return new Set([...a, ...b]);
}
export function interseccion<T>(a: Set<T>, b: Set<T>): Set<T> {
return new Set([...a].filter((x) => b.has(x)));
}
export function diferencia<T>(a: Set<T>, b: Set<T>): Set<T> {
return new Set([...a].filter((x) => !b.has(x)));
}
export function esSubconjunto<T>(a: Set<T>, b: Set<T>): boolean {
for (const x of a) if (!b.has(x)) return false;
return true;
}
export function complemento<T>(a: Set<T>, universo: Set<T>): Set<T> {
return diferencia(universo, a);
}
Añade iguales(a,b) por cardinalidad y doble inclusión si quieres rigor extra.
3. Tests (40–50 min)
sets.test.ts: al menos 2 casos por función, incluyendo conjuntos vacíos y U finito pequeño.
npm test
4. Ejemplo aplicado (20 min)
Dado U = {1..10}, A = pares, B = múltiplos de 3, calcula a mano |A ∩ B| y verifica con tu código (construye los Set en un test o script tsx).
Lectura de esta lección
| Fuente | Qué leer |
|---|---|
| Rosen | Cap. 2.2 |
| Catálogo | Bibliografía · M03 |
Hecho cuando
sets.tsexporta las operaciones listadas ynpm testpasa.- Manejas
∅sin errores (unión con vacío, complemento de vacío). esSubconjuntocoincide con definición (∀x ∈ A → x ∈ B).
Errores comunes
- Complemento sin universo explícito.
- Mutar el
Setde entrada al calcular unión. filtersobreben intersección cuando deberías iterar el más pequeño (eficiencia: opcional, pero documenta).