Esta carpeta incluye implementaciones fundamentales de algoritmos sobre estructuras de grafos, utilizados para resolver problemas como caminos más cortos, árboles generadores mínimos y ordenamientos topológicos.
| Archivo | Descripción |
|---|---|
dijkstra.py |
Algoritmo de Dijkstra para caminos más cortos desde un origen |
kruskal.py |
Algoritmo de Kruskal para obtener el árbol generador mínimo |
prim.py |
Algoritmo de Prim para árbol generador mínimo |
topological_sort.py |
Ordenamiento topológico en grafos dirigidos acíclicos (DAGs) |
Un grafo es una estructura de datos que representa relaciones entre objetos mediante nodos (vértices) y conexiones (aristas).
Los grafos pueden clasificarse en:
- Dirigidos y no dirigidos
- Ponderados y no ponderados
- Cíclicos y acíclicos
Matemáticamente, un grafo se define como G = (V, E) donde:
Ves el conjunto de vértices.Ees el conjunto de aristas (pares de vértices).
- Dijkstra – Encuentra la ruta más corta desde un nodo origen a todos los demás en un grafo con pesos positivos.
- Kruskal – Encuentra el Árbol Generador Mínimo (MST) uniendo aristas de menor peso sin formar ciclos.
- Prim – Construye el MST expandiendo desde un nodo inicial, eligiendo siempre la arista más barata hacia un nuevo vértice.
- Topological Sort – Ordena los vértices de un grafo dirigido acíclico en un orden lineal tal que para cada arista (u, v), u aparece antes que v.
| Algoritmo | Complejidad temporal | Complejidad espacial | Notas |
|---|---|---|---|
| Dijkstra (con heap) | O((V + E) log V) | O(V) | Solo con pesos positivos |
| Kruskal | O(E log E) | O(V) | Usa Union-Find para optimizar |
| Prim (con heap) | O((V + E) log V) | O(V) | Más eficiente con estructuras de prioridad |
| Topological Sort | O(V + E) | O(V) | Solo válido en DAGs |
from dijkstra import dijkstra
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 6},
'C': {'A': 4, 'B': 2, 'D': 3},
'D': {'B': 6, 'C': 3}
}
print(dijkstra(graph, 'A'))
# {'A': 0, 'B': 1, 'C': 3, 'D': 6}| Algoritmo | Aplicaciones |
|---|---|
| Dijkstra | Navegación GPS, redes de computadoras, IA en videojuegos |
| Kruskal & Prim | Diseño de redes eléctricas, cableado, rutas de transporte |
| Topological Sort | Compiladores, planificación de proyectos, resolución de dependencias |
- Graph Algorithms - GeeksforGeeks – Explicaciones detalladas y ejemplos en código.
- Princeton Algorithms: Graphs – Recurso académico con teoría sólida.
- Introduction to Graph Theory - MIT OpenCourseWare – Curso completo gratuito.
- Libro: "Introduction to Algorithms" (CLRS) – Capítulos 22-24 sobre grafos y algoritmos clásicos.
- NetworkX Documentation – Librería de Python para trabajar con grafos.
Desarrollado con fines educativos ❤️ por @luuiscc_