Esta carpeta contiene implementaciones básicas de estructuras de grafos y algunos algoritmos fundamentales de recorrido. Los grafos son estructuras no lineales compuestas por nodos (vértices) y conexiones entre ellos (aristas), ampliamente utilizados en redes, mapas, inteligencia artificial, compiladores, etc.
| Archivo | Descripción |
|---|---|
adjacency_list.py |
Implementación de un grafo utilizando lista de adyacencia |
adjacency_matrix.py |
Implementación de un grafo utilizando matriz de adyacencia |
traversal.py |
Algoritmos de recorrido: BFS (Breadth-First Search) y DFS (Depth-First Search) |
Ejecuta cada script directamente para ver ejemplos de uso:
python adjacency_list.py
python adjacency_matrix.py
python traversal.pyUn grafo está formado por:
- Un conjunto de vértices (o nodos)
- Un conjunto de aristas (o conexiones) que unen pares de vértices
Puede ser:
- Dirigido (las conexiones tienen dirección) o no dirigido
- Ponderado (las aristas tienen peso) o no ponderado
Eficiente en espacio para grafos dispersos.
grafo = {
"A": ["B", "C"],
"B": ["A", "D"],
"C": ["A"],
"D": ["B"]
}Ventajas:
- Menor uso de memoria
- Fácil de recorrer
Ideal para grafos densos o cuando se requiere verificar rápidamente si existe una conexión entre dos nodos.
A B C
A [ 0, 1, 1 ]
B [ 1, 0, 0 ]
C [ 1, 0, 0 ]
Ventajas:
- Verificación rápida de conexiones
- Buena para algoritmos que requieren operaciones matriciales
🔹 BFS – Breadth-First Search
- Usa una cola (queue)
- Recorre el grafo nivel por nivel
🔹 DFS – Depth-First Search
- Usa una pila (implícitamente con recursión o explícitamente)
- Se sumerge en un camino antes de retroceder
Estos algoritmos sirven para:
- Encontrar caminos
- Detectar ciclos
- Clasificar dependencias
- Resolver rompecabezas y más
Los grafos son una herramienta esencial para representar y resolver problemas en los que hay elementos conectados entre sí. Desde redes sociales hasta navegación GPS, modelan relaciones, rutas, dependencias y estructuras en sistemas complejos.
Un grafo permite representar:
- Personas y sus relaciones
- Lugares y las rutas entre ellos
- Computadoras y sus conexiones
- Tareas y sus dependencias
- Páginas web y sus enlaces
- Elementos químicos y sus reacciones
| Área | Ejemplo de uso | Explicación |
|---|---|---|
| 🔗 Redes sociales | Facebook, Twitter, Instagram | Cada usuario es un nodo; las amistades, seguidores o menciones son aristas. Los algoritmos de sugerencia de amigos usan caminos y vecinos comunes. |
| 🛰️ Navegación y mapas | Google Maps, Waze | Las ciudades y calles son nodos; las rutas, aristas con peso (distancia o tráfico). Los algoritmos buscan el camino más corto o rápido. |
| 🌐 Web e internet | Google, motores de búsqueda | Cada página web es un nodo; los enlaces entre páginas son aristas. El algoritmo PageRank de Google se basa en grafos. |
| 🛒 Recomendaciones | Amazon, Netflix, Spotify | Los productos, usuarios o canciones se conectan en un grafo para detectar patrones, similitudes o gustos en común. |
| 💻 Redes de computadoras | Diseño de redes LAN/WAN | Los dispositivos (routers, switches, PCs) son nodos; los cables o conexiones inalámbricas, las aristas. Se usa para optimizar rutas y detectar fallas. |
| 🔄 Dependencias en software | NPM, Python, compiladores | Los módulos se conectan en un grafo dirigido que muestra qué depende de qué. Es vital para compilación, actualización o carga de paquetes. |
| 🧬 Biología y medicina | Genómica, redes neuronales | Las neuronas, genes o proteínas están conectadas y su interacción puede modelarse con grafos para estudiar el comportamiento de sistemas complejos. |
| 📊 Bases de datos | Bases de datos orientadas a grafos como Neo4j | Permiten consultar relaciones complejas de forma más eficiente que bases de datos relacionales tradicionales. Muy útiles en análisis de fraudes o genealogía. |
| 🤖 Inteligencia Artificial | Planificación, razonamiento | En IA, los grafos se usan para representar estados, transiciones y relaciones semánticas entre conceptos (grafos de conocimiento). |
- Porque muchos problemas del mundo real son relacionales: tráfico, relaciones humanas, circuitos, procesos, redes…
- Porque dominar sus algoritmos (BFS, DFS, Dijkstra, A*, Kruskal, etc.) es esencial para entrevistas técnicas y resolución de problemas complejos.
- Porque entrenar modelos, construir apps inteligentes o diseñar sistemas eficientes depende muchas veces de saber estructurar y recorrer un grafo.
Cuando abres Waze y te recomienda evitar una avenida por tráfico, está usando un grafo donde cada calle es un nodo conectado a otras calles, y cada conexión tiene un peso que representa el tiempo estimado. Luego, usa un algoritmo como Dijkstra para hallar la ruta más rápida.
- Empieza con adjacency_list.py para entender la estructura más intuitiva
- Usa
traversal.pypara practicar recorridos y entender cómo se explora un grafo - Modifica los grafos de prueba para ver cómo cambian los recorridos
Esta carpeta fue desarrollada como parte del proyecto de estructuras de datos en Python.
Autor: @luuiscc_
Entender grafos es entender cómo se conecta el mundo.