- 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
Resolución del Problema de Número de Islas con DFS
Clase 14 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
¿Qué es el problema "Número de Islas"?
El problema del "Número de Islas" es un desafío comúnmente presentado en entrevistas de trabajo en grandes empresas de tecnología, como Google, Microsoft y Facebook. El objetivo es analizar una matriz binaria de dimensiones m por n, donde los valores son únicamente 1 y 0. Un '1' representa tierra y un '0' representa agua. La tarea es determinar cuántas islas existen en este mapa, donde una isla está definida por tierra conectada adyacente y rodeada de agua.
¿Cómo se definen las islas en la matriz?
- Isla: Un conjunto de tierras conectadas adyacentes rodeado por agua.
- Adjacencia: La conexión puede ser horizontal o vertical entre casillas.
- Suposición adicional: Los bordes de la cuadrícula están rodeados de agua, por ejemplo, si una isla toca la esquina, podemos asumir que hay agua alrededor.
Este problema plantea un desafío de cálculo eficiente, especialmente cuando la matriz crece en tamaño, como sería el caso de un mapa del mundo.
¿Cómo abordar este problema?
Análisis de la matriz como humano
A simple vista, podemos identificar visualmente islas en una matriz pequeña. Sin embargo, cuando los datos son extensos, la identificación manual se complica y es necesario el uso de algoritmos para resolverlo eficazmente.
Una solución propuesta: DFS
Un enfoque algorítmico para resolver este problema es mediante el algoritmo DFS (Depth First Search). DFS es una técnica bien conocida para explorar y contar componentes conectados en un grafo, que en este contexto son las islas formadas por las tierras conectadas.
Pasos generales de DFS para el problema:
- Recorrer la matriz: Utilizar un doble bucle para recorrer cada celda de la matriz.
- Iniciar búsqueda DFS: Al encontrar un '1', iniciar la búsqueda DFS para marcar todas las partes de la isla conectada.
- Marcar la visita: Cambiar los '1' visitados a un nuevo valor para indicar que esa porción ya fue procesada.
- Contar islas: Incrementar un contador cada vez que se inicia una nueva búsqueda DFS desde un '1'.
Este enfoque garantiza que cada porción de la isla se procesará una única vez, logrando eficiencia en el algoritmo.
¿Cómo puedes encontrar tu propia solución?
Aunque DFS es una opción eficiente, este problema permite varias aproximaciones. Se invita a los participantes a desarrollar ideas propias, documentar su proceso y compartir en una comunidad de aprendizaje. La diversidad de soluciones puede enriquecer el entendimiento colectivo y abre la puerta a metodologías alternativas.
Consejos prácticos
- Participación activa: Documenta y comparte posibles soluciones, aunque no las hayas implementado, en espacios comunitarios de aprendizaje.
- Aprende de otros: Revisa y comenta las soluciones de tus compañeros, esto fomenta la discusión y el entendimiento compartido.
- Experimentación: Explora y experimenta con distintos enfoques algorítmicos que podrían optimizar la solución dependiendo del caso de uso.
El dominio de este tipo de problema puede ser un excelente diferenciador en procesos de selección para roles técnicos. Además, la práctica constante de algoritmos refuerza las habilidades necesarias para desafíos avanzados en ciencias de la computación. ¡Sigue aprendiendo y explorando nuevas soluciones!