Una relación de orden parcial permite comparar algunos elementos de un conjunto, aunque no necesariamente todos. Es útil para modelar jerarquías, dependencias, subconjuntos y prioridades.
En muchos problemas necesitamos ordenar elementos, pero no siempre todos pueden compararse entre sí. Por ejemplo, dos tareas pueden depender de una tercera, pero no tener una relación directa entre ellas.
Para esos casos usamos una relación de orden parcial. Esta relación establece una estructura de comparación sin exigir que cada par de elementos sea comparable.
Una relación R sobre un conjunto A es una relación de orden parcial si cumple tres propiedades:
La relación ≤ sobre números es un orden parcial. De hecho, también es un orden total, pero cumple todas las condiciones de orden parcial.
La relación “ser subconjunto de” también es un orden parcial. Si tenemos varios conjuntos, algunos pueden compararse por inclusión y otros no.
Los conjuntos {1} y {2} no son comparables por inclusión: ninguno contiene al otro.
En un orden parcial, dos elementos a y b son comparables si se cumple a R b o b R a. Si no se cumple ninguna de las dos, son incomparables.
| Elementos | Relación | Resultado |
|---|---|---|
| {1} y {1, 2} | {1} ⊆ {1, 2} | Comparables |
| {1} y {2} | Ninguno contiene al otro | Incomparables |
| {2} y {1, 2, 3} | {2} ⊆ {1, 2, 3} | Comparables |
Una relación de precedencia entre tareas puede ser un orden parcial. Si una tarea debe realizarse antes que otra, se establece una comparación.
Documentación puede ser independiente de Interfaz. En ese caso, no todas las tareas son comparables entre sí.
Podemos representar una relación de orden parcial con una lista de pares ordenados. El siguiente ejemplo usa tareas y precedencia.
const tareas = ["Diseño", "API", "Interfaz"];
const precedeOIgual = [
["Diseño", "Diseño"],
["API", "API"],
["Interfaz", "Interfaz"],
["Diseño", "API"],
["API", "Interfaz"],
["Diseño", "Interfaz"]
];
console.log(precedeOIgual);
Incluimos los pares reflexivos porque un orden parcial debe ser reflexivo.
Para verificar un orden parcial debemos comprobar reflexividad, antisimetría y transitividad.
function contienePar(relacion, a, b) {
return relacion.some(([x, y]) => x === a && y === b);
}
function esReflexiva(conjunto, relacion) {
return conjunto.every(a => contienePar(relacion, a, a));
}
function esAntisimetrica(relacion) {
return relacion.every(([a, b]) => {
return a === b || !contienePar(relacion, b, a);
});
}
function esTransitiva(relacion) {
for (const [a, b] of relacion) {
for (const [c, d] of relacion) {
if (b === c && !contienePar(relacion, a, d)) {
return false;
}
}
}
return true;
}
function esOrdenParcial(conjunto, relacion) {
return esReflexiva(conjunto, relacion)
&& esAntisimetrica(relacion)
&& esTransitiva(relacion);
}
Usamos las funciones anteriores para comprobar que la relación de precedencia cumple las propiedades de orden parcial.
const tareas = ["Diseño", "API", "Interfaz"];
const relacion = [
["Diseño", "Diseño"],
["API", "API"],
["Interfaz", "Interfaz"],
["Diseño", "API"],
["API", "Interfaz"],
["Diseño", "Interfaz"]
];
function contienePar(relacion, a, b) {
return relacion.some(([x, y]) => x === a && y === b);
}
function esOrdenParcial(conjunto, relacion) {
const reflexiva = conjunto.every(a => contienePar(relacion, a, a));
const antisimetrica = relacion.every(([a, b]) => a === b || !contienePar(relacion, b, a));
let transitiva = true;
for (const [a, b] of relacion) {
for (const [c, d] of relacion) {
if (b === c && !contienePar(relacion, a, d)) {
transitiva = false;
}
}
}
return reflexiva && antisimetrica && transitiva;
}
console.log(esOrdenParcial(tareas, relacion));
Una relación de equivalencia agrupa elementos. Una relación de orden parcial compara elementos. Por eso sus propiedades son distintas.
| Tipo de relación | Propiedades | Idea principal |
|---|---|---|
| Equivalencia | Reflexiva, simétrica y transitiva | Agrupar elementos similares. |
| Orden parcial | Reflexiva, antisimétrica y transitiva | Comparar elementos sin exigir comparación total. |
Las relaciones de orden parcial permiten representar comparaciones incompletas pero coherentes. Son esenciales cuando algunos elementos pueden ordenarse y otros no tienen relación directa.
En el próximo tema veremos relaciones de orden total, donde todos los pares de elementos sí deben ser comparables.