Prim’s algorithm construye un Minimum Spanning Tree (MST) expandiendo desde un nodo fuente, siempre añadiendo la arista más barata que conecta el árbol actual con un nodo nuevo. Es el algoritmo greedy de referencia para MST.
Funciona como crecer un árbol desde una semilla: mantienes un min-heap de aristas candidatas (cortes) y extraes la más barata que conecta con un nodo no visitado.
Cómo Funciona
- Inicializa: nodo fuente en el MST,
dist[v] = ∞para los demás. - Procesa el nodo con
distmínimo no visitado. - Relaja todas sus aristas: actualiza
dist[vecino]si la arista es más barata. - Repite hasta visitar todos los nodos.
Idea Clave
La cut property es la garantía: en cualquier corte del grafo (división en dos conjuntos), la arista más barata que cruza el corte pertenece a algún MST. Prim siempre elige esa arista más barata para expandir el árbol.
El min-heap garantiza que extraes la arista más barata en O(log V), haciendo el total O(E log V).
Ejemplo Trabajado
Grafo:
A--B(2) B--C(3)
| \ | \
4 1 1 4
| \ | \
D--C(5) D--E(2)
Fuente = A:
- A (dist=0) → vecinos: B=1, D=4. Heap:
[(1,B), (4,D)] - Extrae B (1) → MST:
{A-B}. Vecinos: C=3, D=1+1=2 (mejora de 4 a 2). Heap:[(2,D), (3,C)] - Extrae D (2) → MST:
{A-B, B-D}. Vecinos: C=2+5=7 (no mejora), E=2+2=4. Heap:[(3,C), (4,E)] - Extrae C (3) → MST:
{A-B, B-D, B-C}. Vecinos: E=3+4=7 (no mejora). Heap:[(4,E)] - Extrae E (4) → MST completo.
Resultado: MST edges = {A-B, B-D, B-C, D-E} con peso total 1+1+3+2 = 7.
Casos Extremos y Trampas
- Grafo disperso —
O(E log V)es cercano a lineal. - Grafo denso —
O(V²)con array simple puede ser mejor queO(E log V)con heap. - Múltiples MST — si hay empates, Prim puede retornar cualquiera; todos tienen el mismo peso total.
- Grafo no conexo — Prim solo cubre el componente de la fuente. Para MST completo, itera sobre todos los componentes.
Comparación con Kruskal
| Aspecto | Prim | Kruskal |
|---|---|---|
| Estrategia | Crece árbol desde semilla | Ordena aristas, añade seguras |
| Denso O(V²) | Array simple | O(E log E) dominado |
| Disperso | O(E log V) | O(E log E) ≈ O(E log V) |
| Natural para | Grafos representados como adjacency list | Grafos dispersos, edge list |
Aplicaciones
- Redes de computadoras — diseño de backbone con costo mínimo
- Circuitos eléctricos — cableado mínimo que conecta todos los puntos
- Clusterización — single-linkage clustering
- Enseñanza — introduce cut property y greedy en grafos
Trayectoria de Práctica
- Ejecuta Prim desde nodo A en el visualizador; registra el heap después de cada extracción.
- Demuestra la cut property en un grafo pequeño: muestra que la arista más barata del corte siempre está en algún MST.
- Compara complejidad con array vs heap para V=100, E=500.
- ¿Por qué Prim es más natural para grafos densos que Kruskal?
- Investiga Borůvka’s algorithm: ¿cómo combina Prim paralelo?