Contenido del curso
DFS
- 6

Cómo recorre nodos el algoritmo DFS
04:49 min - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 min - 8

Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 min - 9

Inorder, Preorder y Postorder en árboles
07:09 min - 10

Suma de caminos raíz a hoja en árboles
02:04 min - 11

Suma de caminos raíz a hoja con DFS
07:31 min - 12

Playground: Sum Root to Leaf Numbers
- 13

Implementación de Algoritmo DFS en Árboles Binarios con Golang
15:03 min - 14

Número de islas con DFS en matrices
02:32 min - 15

Problema de islas resuelto con DFS
08:50 min - 16

Playground: Number of Islands
- 17

Número de islas con DFS recursivo en Python
10:18 min - 18

Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 min - 19

Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19 min
BFS
- 20

Cómo BFS recorre grafos por niveles
02:05 min - 21

Implementación de BFS con colas en Python
08:42 min - 22

Mínimos movimientos del caballo en ajedrez
02:55 min - 23

Minimum Knight's Move con BFS
08:11 min - 24

Playground: Minimum Knights Moves
- 25

Resolución de Problemas de Caballos de Ajedrez con BFS en Python
17:49 min - 26

Propagación BFS en Rotting Oranges
03:50 min - 27

Resolución de Rotting Oranges usando BFS
08:43 min - 28

Playground: Rotting Oranges
- 29

Implementación de BFS para naranjas podridas
23:44 min - 30

Puente más corto entre islas con BFS
03:38 min - 31

Shortest Bridge: combina DFS y BFS
07:35 min - 32

Playground: Shortest Bridge Between Islands
- 33

Shortest Bridge con DFS y BFS en Python
14:57 min - 34

Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 min - 35

Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47 min
Backtrack
- 36

Backtracking para encontrar soluciones válidas
04:20 min - 37

Combinaciones de letras en teclado telefónico
01:51 min - 38

Combinaciones de teclado con backtracking
09:19 min - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 min - 40

Playground: Letter Combinations of a Phone Number
- 41

Generación de Direcciones IP Válidas a partir de Cadenas Numéricas
03:51 min - 42

Backtracking para generar IPs válidas
28:16 min - 43

Playground: Restore IP Addresses
- 44

Búsqueda de Palabras en Matrices: Solución y Complejidad
02:54 min - 45

Word Search con DFS y backtracking
08:30 min - 46

Playgrund: Word Search
- 47

Búsqueda de palabras en matrices con DFS
18:18 min - 48

Resolución del problema de las n reinas en ajedrez
01:08 min - 49

Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 min - 50

Combinaciones y Permutaciones con Backtracking
02:14 min
Próximos pasos
Dijkstra y topological sort en grafos
Resumen
Cuando trabajas con algoritmos de grafos más allá de DFS, BFS y backtracking, te encuentras con estructuras especializadas como heap y trie, y con técnicas como topological sort y Dijkstra que resuelven problemas reales: desde organizar dependencias hasta encontrar el camino más rápido de una ambulancia al hospital. Aquí te explico cómo funcionan y para qué sirven.
¿Qué es un min-heap o max-heap y cuándo usarlo?
Un heap es un árbol especializado que mantiene siempre un orden por prioridad. Es una de las formas más comunes de implementar colas de prioridad por debajo.
Si hablas de un min-heap, el valor más pequeño siempre está arriba, en la raíz. Si hablas de un max-heap, arriba siempre está el más grande. Cuando necesitas sacar un elemento, tomas la cabeza del árbol, y ahí está su utilidad: traer rápido los N elementos más prioritarios, ya sean los más grandes, los más cortos o lo que estés midiendo [02:10].
¿Cuál es la complejidad de insertar en un heap? Insertar un nuevo valor cuesta log N en el peor caso, porque el nuevo elemento debe ubicarse de forma estratégica para mantener el orden de prioridad del árbol.
Por ejemplo, si insertas un 3 en un min-heap donde el 2 sigue siendo la raíz, el 3 se reorganiza para que los hijos del 2 pasen a ser 3 y 4, no 4 y 8. El orden se conserva sin recorrer todo el árbol.
¿Para qué sirve un trie en estructuras de datos?
El trie es otro árbol especializado, pensado para almacenar muchas palabras ocupando menos espacio y permitir búsquedas por prefijo muy rápidas [03:15].
Lo usas cuando necesitas:
- Guardar diccionarios completos de forma compacta.
- Verificar si una palabra es prefijo de otra.
- Buscar palabras dentro de un documento.
- Asignar URLs a servidores web según el prefijo del path.
¿Cómo se organizan las palabras dentro de un trie?
Partes de una raíz, normalmente representada con un asterisco, y desde ahí se ramifican las letras. Cada camino desde la raíz hasta un símbolo de numeral (#) representa una palabra completa.
Imagina que guardas las palabras luz, sol, solté y ser. Luz se forma siguiendo L → U → Z → #. Para sol y solté, el prefijo S → O → L se comparte: si después aparece un #, terminaste en sol; si sigues con T → É → #, formaste solté. Lo mismo ocurre con ser: S → E → R → #.
¿Cómo obtienes todas las palabras que empiezan con cierto prefijo? Recorres el trie hasta el último nodo del prefijo y luego imprimes todos los caminos que salen de ahí hasta cada símbolo de numeral.
Esa propiedad es la que vuelve al trie tan poderoso para autocompletado y búsquedas por prefijo.
¿Qué algoritmos de grafos debo conocer además de DFS y BFS?
Más allá del recorrido básico, hay dos algoritmos que aparecen una y otra vez en problemas reales: topological sort y Dijkstra.
¿Cómo funciona topological sort y para qué se usa?
El topological sort organiza un grafo según sus dependencias, dejando primero lo que debe ocurrir antes [05:30].
Piensa en armar un Lego siguiendo el manual: para colocar una ficha encima, primero debes haber puesto la de abajo. Esa relación de "primero esto, luego aquello" es justo lo que ordena este algoritmo.
Algunas aplicaciones donde encaja perfecto:
- Diseñar el pénsum de una carrera o tu ruta de cursos en Platzi, sabiendo qué temas son requisito de otros.
- Seguir manuales de pasos donde un estado depende del anterior.
- Ordenar palabras según un alfabeto, donde las que empiezan con A van antes que las de B.
- Detectar ciclos en un grafo: si una dependencia nunca se resuelve, hay un ciclo.
¿Qué es Dijkstra y cómo encuentra el camino más corto?
Dijkstra es el algoritmo clásico para encontrar caminos mínimos en un grafo con pesos, es decir, donde cada relación tiene un valor asociado [07:45].
La diferencia con un recorrido simple es que aquí no cuentas cuántos nodos saltas, sino cuánto "cuesta" cada salto. Y ese costo puede representar cosas muy reales: tiempo, distancia, dinero o tráfico.
¿Cuándo conviene usar Dijkstra? Cuando necesitas la ruta más eficiente entre dos puntos en un grafo con pesos, como una ambulancia que debe llegar de una casa al hospital por el camino que tome menos minutos.
Imagina ese escenario: los pesos del grafo son minutos de viaje según el tráfico. Puedes tener rutas de 6 y 2, otra de 6, 1 y 3, otra de 9 y 3, pero la mejor combinación suma 1, 1, 1 y 2, lo que da 5 minutos en total. Esa es la ruta que salva la vida.
Dijkstra evalúa esos pesos sistemáticamente y te entrega el camino óptimo sin que tengas que probar todas las combinaciones a mano.
¿Qué otros algoritmos de grafos vale la pena explorar?
La lista no termina ahí. Existen muchos algoritmos más, cada uno pensado para un tipo de problema específico, y la elección depende de la industria y del reto que estés resolviendo. Algunos los reconocerás solo por el nombre, otros se vuelven herramientas diarias cuando trabajas en optimización, redes, rutas o sistemas de recomendación.
¿Qué algoritmo de grafos te llama más la atención o cuál te gustaría dominar a fondo? Cuéntamelo en los comentarios.