Búsqueda Binaria en Matrices 2D Ordenadas
Clase 32 de 35 • Curso de Algoritmos Avanzados: Patrones de Arrays y Strings
Contenido del curso
- 3

Patrón de Dos Apuntadores en Algoritmos de Lista
02:56 - 4

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

Ordenamiento de Palabras en Idiomas Alienígenas
12:05 - 6
Playground: Verifying Alien Dictionary
00:00 - 7

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

Combinar Listas Ordenadas en un Array Ascendente
02:11 - 9

Ordenamiento de Listas con Complejidad Óptima y Espacio Constante
11:44 - 10
Playground: Merge Two Sorted Lists
00:00 - 11

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

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

Cálculo Óptimo de Área en Listas de Alturas
09:02 - 14
Playground: Container with Most Water
00:00 - 15

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

Implementación de Trapping Rainwater en Complejidad Lineal
01:02 - 17
Retos de Algoritmos con Apuntadores en Python
02:44 - 18
Patrones de Dos Apuntadores: Soluciones a Problemas Comunes en Python
06:43
- 19

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

Subcadena más larga sin caracteres repetidos: patrón ventana deslizante
01:51 - 21

Algoritmo de Ventana Deslizante para Subcadenas Únicas
11:05 - 22
Playground: Longest Substring Without Repeating Characters
00:00 - 23

Algoritmo Python para Substring más Largo Sin Repeticiones
14:16 - 24
Retos de Algoritmos: Dos Apuntadores y Subcadenas
01:50 - 25
Máximos 1s Consecutivos y Subcadenas sin Repeticiones
03:22
- 26

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

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

Búsqueda Binaria en Arreglos Rotados
04:59 - 29
Playground: Search in Rotated Arrays
00:00 - 30

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

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

Búsqueda Binaria en Matrices 2D Ordenadas
06:33 - 33
Playground: Search 2D Array Matrix
00:00 - 34

Búsqueda Binaria en Matrices con Python
07:48
¿Cómo encontrar un número en una matriz 2D ordenada?
Cuando se trata de buscar en matrices 2D ordenadas, el conocimiento clave es el uso de la búsqueda binaria. Este método es esencial para realizar búsquedas eficientes en arreglos de datos que de otra manera requerirían recorrido completo y por ende, mayor tiempo de procesamiento. Pero, ¿cómo se puede implementar este enfoque para obtener resultados óptimos?
¿Qué es la búsqueda binaria?
La búsqueda binaria es un algoritmo que permite encontrar un valor específico en una lista ordenada dividiendo repetidamente el rango de búsqueda a la mitad. Esto reduce considerablemente el número de elementos que deben verificarse, haciendo el proceso mucho más eficiente comparado con una búsqueda lineal que analizaría cada elemento uno por uno.
¿Por qué es importante el orden en la matriz?
El orden en la matriz es fundamental para aplicar búsqueda binaria. Si los datos no están ordenados, el algoritmo no podría reducir eficientemente el rango de búsqueda. Por ejemplo, en matrices ordenadas:
- Las filas están en orden ascendente de izquierda a derecha.
- Las columnas están en orden ascendente de arriba hacia abajo.
Estas propiedades aseguran que al seleccionar un punto medio se pueda decidir en qué dirección moverse, similar a como se haría en una lista unidimensional.
¿Cómo implementar la búsqueda en una matriz ordenada?
La estrategia en una matriz bidimensional aprovecha el orden automático por filas y por columnas:
- Búsqueda en filas: Empieza evaluando las filas. Comienza desde el último número de la fila (mayor valor) y decide, mediante búsqueda binaria, en qué fila podría estar el número objetivo.
- Búsqueda en la fila seleccionada: Una vez identificada la posible fila, aplica búsqueda binaria en esa fila para localizar el valor.
Ejemplo de implementación en Python
A continuación, un ejemplo de cómo podría codificarse este tipo de búsqueda en una matriz bidimensional en Python.
def search_matrix(matrix, target):
if not matrix or not matrix[0]:
return False
# Número de filas y columnas
num_rows, num_cols = len(matrix), len(matrix[0])
# Búsqueda binaria en filas
row_begin, row_end = 0, num_rows - 1
while row_begin <= row_end:
row_mid = (row_begin + row_end) // 2
if matrix[row_mid][0] <= target <= matrix[row_mid][-1]:
break
elif matrix[row_mid][0] < target:
row_begin = row_mid + 1
else:
row_end = row_mid - 1
else:
return False
# Búsqueda binaria en la fila encontrada
row = row_mid
col_begin, col_end = 0, num_cols - 1
while col_begin <= col_end:
col_mid = (col_begin + col_end) // 2
if matrix[row][col_mid] == target:
return True
elif matrix[row][col_mid] < target:
col_begin = col_mid + 1
else:
col_end = col_mid - 1
return False
# Ejemplo de uso
matriz = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
print(search_matrix(matriz, 16)) # Debería devolver True
¿Qué beneficios ofrece la búsqueda binaria en matrices grandes?
- Eficiencia: Reduce dramáticamente el número de comparaciones necesarias.
- Ahorro en recursos: Menos operaciones se traducen en menor consumo de tiempo y recursos computacionales.
- Aplicación práctica: Ideal para bases de datos de gran tamaño, permitiendo búsquedas rápidas en entornos con millones de registros.
¿Qué considerar al implementar este tipo de búsqueda?
- Orden correcto: Asegúrate de que tanto filas como columnas estén ordenadas.
- Gestión de bordes: Maneja adecuadamente casos de bordes o matrices vacías.
- Pruebas exhaustivas: Implementa pruebas para validar el algoritmo con diferentes tamaños y configuraciones de matrices.
Explorar y entender estos algoritmos mejora no solo el rendimiento de búsquedas complejas, sino también la comprensión de cómo manipular y manejar eficientemente grandes volúmenes de datos. No dejes de explorar este y otros algoritmos eficientes que harán tus códigos más robustos y veloces.