Contenido del curso
Dos Apuntadores
- 3

Patrón de dos apuntadores en algoritmos
02:56 min - 4

Verificación de Orden en Diccionario Alienígena
02:56 min - 5

Ordenamiento de Palabras en Idiomas Alienígenas
12:04 min - 6

Playground: Verifying Alien Dictionary
- 7

Ordenación de Palabras en Diccionario Alienígena
15:07 min - 8

Cómo fusionar dos arrays ordenados sin memoria extra
02:10 min - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 min - 10

Playground: Merge Two Sorted Lists
- 11

Intercalación de Listas Ordenadas en Python
09:04 min - 12

Resolver el problema "Container with Most Water" en Python
01:18 min - 13

Cálculo Óptimo de Área en Listas de Alturas
09:02 min - 14

Playground: Container with Most Water
- 15

Implementación de solución de cálculo de área máxima en Java
15:42 min - 16

Implementación de Trapping Rainwater en Complejidad Lineal
01:02 min - 17

Retos de Algoritmos con Apuntadores en Python
02:44 min - 18

Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43 min
Ventana Deslizante
- 19

Patrón Ventana Deslizante para Análisis de Datos Secuenciales
02:32 min - 20

Subcadena más larga sin repetir caracteres
01:51 min - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 min - 22

Playground: Longest Substring Without Repeating Characters
- 23

Sliding Window para substring sin repeticiones
14:15 min - 24

Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 min - 25

Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22 min
Búsqueda Binaria
- 26

Algoritmo de búsqueda binaria en listas ordenadas
09:26 min - 27

Búsqueda en Arrays Rotados: Encontrar Entero en Lista Ordenada
02:19 min - 28

Búsqueda Binaria en Arreglos Rotados
04:59 min - 29

Playground: Search in Rotated Arrays
- 30

Búsqueda en Arrays Rotados con C++
10:53 min - 31

Búsqueda eficiente en matriz ordenada MxN
01:44 min - 32

Búsqueda binaria en matriz 2D ordenada
Viendo ahora - 33

Playground: Search 2D Array Matrix
- 34

Búsqueda Binaria en Matrices con Python
07:48 min
Próximos pasos
Búsqueda binaria en matriz 2D ordenada
Resumen
Cuando necesitas encontrar un valor dentro de una matriz 2D ordenada, la búsqueda binaria es el algoritmo más eficiente. En lugar de recorrer cada celda con complejidad cuadrática, puedes reducir el tiempo a logarítmico aplicando dos búsquedas binarias encadenadas: una para localizar la fila correcta y otra para encontrar el valor dentro de esa fila.
Esta técnica resulta clave cuando trabajas con grandes volúmenes de datos ordenados, como nombres de usuarios, productos en catálogos o registros cronológicos.
¿Por qué usar búsqueda binaria en una matriz ordenada?
Una matriz 2D ordenada cumple una propiedad muy útil: cada fila está ordenada de izquierda a derecha y cada columna de arriba hacia abajo. Eso significa que puedes aprovechar el orden en dos dimensiones, no solo en una.
Si recorrieras toda la matriz buscando un número, terminarías con una complejidad de O(N×M), o incluso O(N²) si la matriz fuera cuadrada. Y aquí viene lo importante: cuando los datos están ordenados, recorrer todo es desperdiciar tiempo.
¿Qué es la búsqueda binaria? Es un algoritmo que encuentra un valor dividiendo el espacio de búsqueda a la mitad en cada paso. Su complejidad es O(log N), mucho más rápida que recorrer elemento por elemento.
¿Cómo aplicar dos búsquedas binarias encadenadas?
La estrategia consiste en convertir el problema 2D en dos problemas 1D. Primero localizas la fila donde podría estar el número, luego buscas dentro de esa fila [00:32].
¿Cómo encontrar la fila correcta?
Imagina que buscas el número 16 en la matriz. Si empiezas por el primer elemento de cada fila, tendrías que comparar también con el último para saber si tu valor cabe en ese rango. Es más eficiente empezar por el último número de cada fila.
- Si buscas 16 y la primera fila termina en 7, sabes que 16 está más adelante.
- Si la siguiente fila termina en 60, sabes que 16 está en esa fila, porque 7 < 16 < 60.
- Aplicas búsqueda binaria sobre esa columna final para encontrar la fila adecuada [02:10].
Este primer paso te cuesta O(log N), porque vas dividiendo las filas a la mitad hasta encontrar la correcta.
¿Cómo encontrar el valor dentro de la fila?
Una vez identificada la fila, defines un nuevo espacio de búsqueda: solo esa fila. Ahí aplicas otra búsqueda binaria, recorriendo columna por columna hasta dar con el valor exacto.
Este segundo paso también es O(log N). Sumados, obtienes 2 × log N, que en notación asintótica sigue siendo O(log N) porque las constantes se descartan.
¿Cuál es la diferencia entre O(N²) y O(log N)? Para un millón de datos, O(N²) significa un billón de operaciones; O(log N) significa apenas 20. La diferencia es brutal en tiempo de ejecución y costo computacional.
¿Dónde aplica esto en problemas reales?
A simple vista parece un ejercicio sencillo de matrices con números pequeños, pero su aplicación va mucho más allá [03:45]. Piensa en escenarios donde la eficiencia importa:
- Buscar un usuario llamado María entre millones de registros ordenados alfabéticamente.
- Localizar un producto específico dentro de un catálogo masivo.
- Encontrar una fecha en un sistema con datos cronológicos a gran escala.
En estos casos, una solución cuadrática no solo es lenta: arruina la experiencia de usuario y dispara los costos de servidor. El logaritmo de un millón te ahorra plata, tiempo y frustración.
¿Cuándo conviene usar búsqueda binaria en 2D? Siempre que la matriz esté ordenada por filas y columnas, y necesites buscar un valor específico. Si los datos no están ordenados, primero ordénalos o usa otra estructura.
¿Qué patrón de pensamiento debes desarrollar?
La clave no es memorizar el algoritmo, sino reconocer el patrón: datos ordenados + búsqueda eficiente = búsqueda binaria. Cuando veas un problema con esa combinación, aunque tenga dos dimensiones, puedes adaptar la lógica clásica del algoritmo.
También es útil entrenar el ojo para identificar dónde empezar. En este caso, partir desde la última columna de cada fila te da información inmediata sobre el rango de valores. Esa decisión inicial cambia toda la eficiencia del recorrido.
Te invito a implementar tu propia versión de esta solución antes de ver el código en la siguiente clase. ¿Cómo organizarías las dos búsquedas binarias en tu lenguaje favorito? Comparte tu enfoque en los comentarios.