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
Viendo ahora - 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
Búsqueda de Palabras en Matrices: Solución y Complejidad
Resumen
Encontrar una palabra dentro de una matriz de caracteres es uno de los problemas clásicos que aparecen en entrevistas técnicas de grandes empresas de tecnología. Comprender cómo funciona la búsqueda secuencial sobre celdas adyacentes es fundamental para resolverlo con confianza y claridad.
¿En qué consiste el problema Word Search?
El planteamiento es directo: se recibe un tablero (una matriz M por N de caracteres) y una palabra (una cadena de caracteres). El objetivo es retornar true o false dependiendo de si la palabra puede encontrarse dentro del tablero [0:28].
Pero no basta con que las letras existan en cualquier lugar de la matriz. La palabra debe poder construirse a partir de celdas secuencialmente adyacentes [0:55]. Esto significa que cada letra siguiente debe estar justo al lado de la anterior: arriba, abajo, izquierda o derecha.
¿Qué significa "secuencialmente adyacente"?
Si necesitas formar la palabra y la primera letra es una A, la segunda letra (por ejemplo, una B) debe estar en una celda vecina de esa A [1:02]. Si la B está en otro punto lejano del tablero, no sirve. Cada letra de la palabra debe encontrarse pegada a la anterior, formando un camino continuo.
¿Por qué no se puede reutilizar una celda?
Otra restricción importante es que la misma celda no puede ser utilizada más de una vez durante la construcción de la palabra [1:22]. Por ejemplo, si necesitas la palabra "casa" y ya usaste una celda con la letra A, no puedes regresar a esa misma celda para la segunda A. Necesitas encontrar una A diferente en otra posición del tablero.
¿Cómo se ve un ejemplo resuelto?
En el ejemplo presentado, se recibe una matriz y la palabra ABCCED [1:42]. El resultado es true porque:
- Se empieza en la celda con la A.
- Al lado está la B.
- Al lado de la B está la primera C.
- Debajo de esa C está la segunda C.
- Debajo de esa segunda C está la E.
- Y al lado de la E está la D [1:50].
Todas las letras están una al lado de la otra, formando un camino válido dentro del tablero. No se repite ninguna celda y cada paso es hacia una celda adyacente.
¿Qué considerar antes de diseñar la solución?
Antes de escribir código, vale la pena reflexionar sobre varios puntos:
- Casos borde: ¿qué pasa si la palabra es más larga que el total de celdas? ¿Qué ocurre si el tablero es de 1x1? ¿Y si la palabra está vacía?
- Complejidad temporal: la búsqueda involucra recorrer el tablero y, desde cada celda, explorar caminos posibles. Esto sugiere un enfoque de backtracking, donde se prueban rutas y se retrocede cuando no funcionan.
- Complejidad espacial: se necesita algún mecanismo para marcar las celdas visitadas y evitar reutilizarlas dentro del mismo camino.
El concepto de backtracking es clave aquí. Se trata de una técnica de búsqueda exhaustiva donde se avanza paso a paso, y si un camino no lleva a la solución, se deshace el último paso y se prueba otra dirección. Es la herramienta natural para problemas donde hay que explorar múltiples combinaciones respetando restricciones.
Establecer una meta de complejidad antes de programar ayuda a evaluar si la solución diseñada es eficiente o si necesita optimización. Pensar en el peor caso —donde cada celda inicia una búsqueda que recorre todo el tablero— permite dimensionar el costo real del algoritmo.
¿Qué casos raros se te ocurren para este problema? ¿Cuál crees que sería la complejidad ideal? Comparte tu análisis en los comentarios.