Apuntes DAM
Volver al inicio

Algoritmos de grafos

Algoritmos5 algoritmos · 10 ejercicios corregidos · código en Java, Python, JavaScript, C# y PHP

Un grafo es un conjunto de nodos unidos por aristas: ciudades y carreteras, usuarios que se siguen, tareas que dependen de otras, páginas enlazadas. Muchísimos problemas se resuelven en cuanto se ven como un grafo: el camino más corto en un mapa, a cuántos «saltos» está alguien en una red social, en qué orden compilar los módulos de un proyecto.

Casi todo se construye sobre dos recorridos: en anchura (BFS, por niveles, con una cola) y en profundidad (DFS, hasta el fondo, con una pila o recursividad). Sobre ellos, Dijkstra calcula caminos mínimos con pesos, la ordenación topológica ordena dependencias y Kruskal o Prim conectan todos los nodos con el mínimo coste.

Los algoritmos

Cuál elegir

AlgoritmoPara quéCosteUsa
Recorrido en anchura (BFS)Recorrer por niveles; camino más corto sin pesosO(V + E)Una cola
Recorrido en profundidad (DFS)Recorrer hasta el fondo; ciclos, componentesO(V + E)Una pila o recursividad
Algoritmo de DijkstraCamino más corto con pesos no negativosO((V + E) log V)Una cola de prioridad
Ordenación topológicaOrdenar tareas con dependenciasO(V + E)Grados de entrada y una cola
Kruskal (árbol de expansión mínima)Conectar todos los nodos con coste mínimoO(E log E)Ordenar aristas y conjuntos disjuntos

V es el número de nodos (vértices) y E el de aristas.