Un grafo bipartito separa sus vértices en dos conjuntos y solo permite conexiones entre elementos de grupos diferentes. Esta estructura aparece en asignaciones, recomendaciones y problemas de emparejamiento.
Muchos problemas relacionan objetos de dos tipos distintos: estudiantes con cursos, trabajadores con tareas, usuarios con productos o actores con películas.
Los grafos bipartitos representan estas situaciones dividiendo los vértices en dos conjuntos. Las aristas siempre cruzan de un conjunto al otro y nunca conectan dos vértices del mismo grupo.
Un grafo G = (V, E) es bipartito si su conjunto de vértices puede dividirse en dos subconjuntos disjuntos, generalmente llamados U y V.
Los conjuntos U y V forman una bipartición del grafo.
Si A y B pertenecen a U, no puede existir una arista entre ellos. Lo mismo ocurre con dos vértices de V. Solo se permiten aristas que crucen la bipartición.
| Extremo 1 | Extremo 2 | ¿Permitida? |
|---|---|---|
| U | V | Sí |
| V | U | Sí |
| U | U | No |
| V | V | No |
| Problema | Conjunto U | Conjunto V | Arista |
|---|---|---|---|
| Educación | Estudiantes | Cursos | Inscripción |
| Empleo | Candidatos | Puestos | Postulación |
| Comercio | Clientes | Productos | Compra |
| Cine | Actores | Películas | Participación |
| Planificación | Máquinas | Tareas | Capacidad de ejecución |
Ajusta la cantidad de vértices de U y V. Selecciona dos nodos para crear una arista: la aplicación solo aceptará conexiones entre conjuntos diferentes.
Intenta seleccionar dos vértices rosados o dos celestes: la aplicación rechazará la arista. Pulsa Generar Kₘ,ₙ para conectar cada elemento de U con todos los de V.
Un grafo bipartito es completo cuando cada vértice de U está conectado con todos los vértices de V. Se representa como Km,n, donde m y n son los tamaños de ambos conjuntos.
K3,4 tiene 3 + 4 = 7 vértices y 3 × 4 = 12 aristas.
En un grafo bipartito completo, cada vértice de U se conecta con los n vértices de V. Cada vértice de V se conecta con los m vértices de U.
Por lo tanto, Km,n es regular únicamente cuando m = n.
Un grafo es bipartito si sus vértices pueden colorearse utilizando solo dos colores de forma que los extremos de cada arista tengan colores diferentes.
Esta propiedad ofrece una forma algorítmica de comprobar la bipartición: recorremos el grafo y asignamos a cada vecino el color opuesto.
Podemos guardar los dos conjuntos por separado y representar cada arista como un par formado por un elemento de U y otro de V.
const estudiantes = ["Ana", "Bruno", "Carla"];
const cursos = ["JavaScript", "Python"];
const inscripciones = [
["Ana", "JavaScript"],
["Bruno", "Python"],
["Carla", "JavaScript"]
];
console.log("Vértices:", estudiantes.length + cursos.length);
console.log("Aristas:", inscripciones.length);Antes de agregar una conexión podemos verificar que sus extremos pertenezcan a grupos diferentes.
const U = new Set(["u1", "u2", "u3"]);
const V = new Set(["v1", "v2"]);
function aristaValida(a, b) {
return (U.has(a) && V.has(b)) ||
(V.has(a) && U.has(b));
}
console.log(aristaValida("u1", "v2"));
console.log(aristaValida("u1", "u3"));Los grafos bipartitos son la base natural de los problemas de emparejamiento, donde buscamos seleccionar aristas sin compartir extremos.
| Aplicación | Objetivo | Restricción |
|---|---|---|
| Asignar tareas | Relacionar personas con trabajos | Cada persona recibe una tarea |
| Reservar horarios | Relacionar clases con aulas | Evitar superposiciones |
| Recomendar productos | Relacionar usuarios con artículos | Priorizar afinidades |
| Asignar donantes | Relacionar donantes con receptores | Respetar compatibilidades |
Los grafos bipartitos permiten representar con claridad relaciones entre dos tipos de objetos. Su estructura evita conexiones internas y facilita resolver problemas de asignación y emparejamiento.
En el próximo tema estudiaremos los grafos planares y analizaremos cuándo un grafo puede dibujarse sin que sus aristas se crucen.