Las relaciones y funciones discretas permiten describir vínculos entre elementos separados, como usuarios, permisos, nodos, estados, claves, valores y decisiones lógicas dentro de un programa.
En matemáticas discretas trabajamos con objetos separados y contables: números enteros, elementos de un conjunto, registros de una base de datos, vértices de un grafo o estados de un algoritmo.
Una relación discreta indica qué elementos están vinculados entre sí. Una función discreta es un caso especial de relación en el que cada elemento de entrada tiene una única salida asociada.
Estas ideas son fundamentales en programación porque permiten modelar dependencias, clasificaciones, recorridos, equivalencias, asignaciones y reglas de decisión.
Una relación discreta conecta elementos de uno o más conjuntos. Por ejemplo, si tenemos un conjunto de estudiantes y un conjunto de materias, podemos relacionar cada estudiante con las materias que cursa.
Cada par ordenado indica un vínculo concreto. El par (Ana, Programación) significa que Ana cursa Programación.
Una función discreta también relaciona elementos, pero con una condición más estricta: cada entrada debe estar asociada con una sola salida.
Si cada ticket de soporte tiene un único técnico responsable, esa asignación puede modelarse como una función. En cambio, si un estudiante puede cursar varias materias, esa relación no necesariamente es una función desde estudiantes hacia materias.
| Concepto | Idea principal | Ejemplo |
|---|---|---|
| Relación | Un elemento puede vincularse con ninguno, uno o varios elementos. | Un usuario puede tener varios roles. |
| Función | Cada entrada tiene exactamente una salida. | Un DNI corresponde a una sola persona. |
Una de las formas más simples de representar una relación es usar pares ordenados. El primer elemento del par suele indicar el origen y el segundo elemento indica el destino o valor relacionado.
Esta relación puede leerse como: 1 está relacionado con 2, 1 está relacionado con 3, 2 está relacionado con 4 y 3 está relacionado con 4.
En programación podemos representar una relación como una lista de pares. Cada par puede almacenarse como un arreglo de dos posiciones.
const relacion = [
["Ana", "Programación"],
["Luis", "Matemática"],
["Marta", "Programación"]
];
console.log(relacion);
Esta estructura permite recorrer, filtrar y consultar vínculos entre elementos, igual que se haría con registros de una base de datos o aristas de un grafo.
Una función discreta puede representarse con un objeto o un mapa cuando cada clave tiene un único valor asociado.
const responsablePorTicket = {
T100: "Ana",
T101: "Luis",
T102: "Marta"
};
console.log(responsablePorTicket.T101);
La clave T101 tiene una sola salida: Luis. Por eso esta asignación se comporta como una función discreta.
| Área | Relación o función discreta | Uso habitual |
|---|---|---|
| Bases de datos | Relación entre tablas | Vincular clientes con pedidos. |
| Estructuras de datos | Relación entre nodos | Representar listas, árboles y grafos. |
| Seguridad | Usuarios y permisos | Determinar qué acciones puede realizar cada usuario. |
| Algoritmos | Estados y transiciones | Modelar autómatas, recorridos y decisiones. |
| Inteligencia artificial | Objetos y atributos | Representar conocimiento y reglas lógicas. |
Para saber si una relación es una función, debemos revisar las entradas. Si una misma entrada aparece relacionada con dos salidas distintas, entonces no es función.
function esFuncion(pares) {
const salidasPorEntrada = new Map();
for (const [entrada, salida] of pares) {
if (salidasPorEntrada.has(entrada) && salidasPorEntrada.get(entrada) !== salida) {
return false;
}
salidasPorEntrada.set(entrada, salida);
}
return true;
}
console.log(esFuncion([[1, "A"], [2, "B"], [3, "C"]]));
console.log(esFuncion([[1, "A"], [1, "B"], [2, "C"]]));
El primer caso es función porque cada entrada tiene una única salida. El segundo no lo es porque la entrada 1 aparece asociada con A y con B.
Decimos que estas relaciones y funciones son discretas porque trabajan con elementos separados, no con intervalos continuos. En lugar de analizar todos los valores reales entre 0 y 1, podemos trabajar con identificadores, nodos, índices, estados o valores lógicos.
Las relaciones y funciones discretas ofrecen un lenguaje matemático para describir conexiones y asignaciones dentro de sistemas computacionales. Gracias a ellas podemos modelar permisos, dependencias, estructuras, recorridos, reglas lógicas y transformaciones de datos.
En el próximo tema veremos la importancia de las relaciones discretas en informática y cómo estas ideas aparecen en problemas reales de programación.