- 1

Grafos y Árboles: Estructuras de Datos Avanzadas
06:48 - 2

Estructuras de Datos: Introducción a Árboles y Sus Propiedades
07:12 - 3

Recursión: Concepto y Aplicaciones Prácticas con Ejemplos
09:11 - 4

Aplicaciones Prácticas de Grafos en Tecnología e Industria
05:16 - 5
Representación de Grafos: Matriz y Lista de Adyacencia
01:02
Búsqueda de Palabras en Matrices: Solución y Complejidad
Clase 44 de 52 • Curso de Algoritmos Avanzados: Grafos y Árboles
Contenido del curso
- 6

Búsqueda en Profundidad (DFS) en Árboles y Grafos
04:50 - 7

Implementación de DFS recursivo para búsqueda en árboles
12:10 - 8
Búsqueda en Profundidad (DFS) para Grafos: Enfoque Iterativo y Recursivo
01:27 - 9

Recorridos y Profundidad en Árboles Binarios y Enearios
07:09 - 10

Suma de Caminos en Árboles Binarios
02:05 - 11

Suma de Números de Raíz a Hoja en Árboles
07:32 - 12
Playground: Sum Root to Leaf Numbers
00:00 - 13

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

Resolución del Problema de Número de Islas con DFS
02:32 - 15

Conteo de Islas en Matrices con DFS
08:51 - 16
Playground: Number of Islands
00:00 - 17

Implementación de "Número de Islas" con Recursión en Python
10:18 - 18
Ejercicios Prácticos de Búsqueda en Profundidad (DFS)
02:22 - 19
Algoritmos de Búsqueda en Profundidad (DFS) en Problemas Comunes
06:19
- 20

Algoritmo BFS: Recorrido en Anchura de Grafos y Árboles
02:05 - 21

Implementación de BFS en Árboles usando Python
08:43 - 22

Movimiento mínimo de caballo en ajedrez infinito
02:55 - 23

Resolviendo el Problema Mínimo de Movimiento del Caballo en Ajedrez
08:11 - 24
Playground: Minimum Knights Moves
00:00 - 25

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

Propagación de Plagas en Cultivos: Cálculo de Días para Contagio Total
03:50 - 27

Resolución de Rotting Oranges usando BFS
08:44 - 28
Playground: Rotting Oranges
00:00 - 29

Propagación de Plagas en Matrices usando BFS en Java
23:44 - 30

Construcción de Puentes Cortos entre Islas en Matrices Binarias
03:39 - 31

Resolución del Problema Shortest Bridge con DFS y BFS
07:36 - 32
Playground: Shortest Bridge Between Islands
00:00 - 33

Búsqueda del camino más corto entre islas usando BFS en Python
14:58 - 34
Búsqueda en anchura: Ejercicios prácticos y aplicaciones
03:41 - 35
Ejercicios avanzados de búsqueda en anchura (BFS) en programación
08:47
- 36

Algoritmo Backtracking: Solución de Problemas Complejos
04:21 - 37

Combinaciones de Letras en Números Telefónicos
01:52 - 38

Combinaciones de Letras a partir de un Número de Teléfono
09:20 - 39

Generación de combinaciones de letras con teclados numéricos en C++
14:08 - 40
Playground: Letter Combinations of a Phone Number
00:00 - 41

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

Generación de IPs válidas con backtracking en C++
28:17 - 43
Playground: Restore IP Addresses
00:00 - 44

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

Búsqueda de Palabras en Matrices usando Backtracking y DFS
08:31 - 46
Playgrund: Word Search
00:00 - 47

Implementación de búsqueda de palabras en matrices con DFS en JavaScript
18:19 - 48
Resolución del problema de las n reinas en ajedrez
01:08 - 49
Ejercicios de Backtracking: Combinaciones y Permutaciones
01:05 - 50
Combinaciones y Permutaciones con Backtracking
02:14
¿Cómo resolver el problema de Word Search?
Resolver problemas algorítmicos puede ser tanto un desafío como una oportunidad de demostrar habilidades. En Word Search, se nos presenta un tablero, es decir, una matriz MxN, compuesta por caracteres y una palabra específica. Nuestro objetivo es verificar si la palabra puede formarse mediante caracteres secuencialmente adyacentes en el tablero. Profundicemos en cómo abordar este intrigante problema.
¿Cuál es la mecánica del problema?
En esencia, este problema nos pide comprobar si podemos "crear" una palabra específica basada en un conjunto de reglas:
- La palabra debe formarse con letras adyacentes en el tablero.
- Las letras deben ser consecutivas, es decir, la unidad después de otra.
- No se puede reutilizar la misma celda para usar nuevamente una letra.
Este desafío es más comúnmente encontrado durante entrevistas de trabajo en empresas tecnológicas grandes, dado que evalúa habilidades de razonamiento lógico y comprensión de algoritmos.
¿Cómo determinar la secuencialidad con un ejemplo?
Para entender mejor, pensemos en un ejemplo:
- Supongamos una matriz que tiene las siguientes letras y disposiciones:
A B C E
S F C S
A D E E
- Si se nos da la palabra "ABCCED", debemos verificar su existencia considerando las reglas de adyacencia y secuencialidad. Aquí, la solución es verdadera porque la palabra puede formarse de la siguiente manera:
- A se conecta con B (la letra está a la derecha de A).
- B se conecta con C (ahora, la letra está nuevamente a la derecha).
- C se conecta con otra C (pero esta vez bajamos en la columna).
- La segunda C se conecta a E (abajo de nuevo).
- Y finalmente, E se conecta a D (a la derecha).
¿Por qué la misma celda no puede usarse más de una vez?
Esta restricción agrega un desafío mayor, pues nos obliga a ser estratégicos en cómo exploramos el tablero. Puede que encuentre una letra necesaria en una celda, pero luego requiera encontrar esa misma letra en otra ubicación para cumplir con las reglas del juego.
¿Qué se podría considerar como casos raros?
Este aspecto del problema abre la puerta a una variedad de situaciones interesantes, algunas podrían ser:
- Tableros donde las letras se repiten muchas veces y pareciera haber múltiples caminos equivalentes.
- Palabras que empiezan bien pero no pueden completarse debido a un callejón sin salida.
- Matrices pequeñas donde la palabra requiera una navegación tediosa.
¿Cómo abordar la solución?
La clave está en evaluar la complejidad de tiempo y espacio óptimas para abordar el problema. Se recomienda:
- Backtracking: Un enfoque muy útil donde se explora de forma recursiva todas las posibilidades de construcción de palabra, retrocediendo solo cuando surge un obstáculo. Es eficiente en término de exploración de posibilidades y se ajusta bien a las restricciones de este problema.
- Profundidad y amplitud del algoritmo: Considerar qué tan lejos debemos expandir nuestras posibilidades antes de encontrar la solución correcta.
Podríamos reflexionar sobre estas metodologías para asegurar estrategias efectivas que solventen este problema de forma eficiente. No olvides poner a prueba tu creatividad y considera compartir en la sección de comentarios tus constructos únicos. ¡Buena suerte y sigue explorando y aprendiendo!