La solución es hacer un binary search verticalmente, para después hacer uno horizontalmente, dentro de la fila que tiene el rango correcto del número que se esta buscando
Introducción
Patrones de arreglos: ventana deslizante y dos apuntadores
Arrays y Strings: Manipulación y Complejidad Temporal
Dos Apuntadores
Optimización de Algoritmos con Dos Apuntadores
Ordenación Lexicográfica en Idioma Alienígena
Algoritmos de Ordenación en Python: Guía Práctica Paso a Paso
Playground: Verifying Alien Dictionary
Creación de Mapas y Diccionarios en JavaScript
Fusionar Listas Ordenadas con Python
Ordenamiento de listas con apuntadores y complejidad O(n+m)
Playground: Merge Two Sorted Lists
Fusión de listas ordenadas en Python
Problema: Calcula el contenedor con más agua
Optimización de algoritmos: cálculo eficiente de áreas máximas
Playground: Container with Most Water
Programación Orientada a Objetos con Java
Algoritmo para Trapping Rainwater en Python
Transformación de Números Negativos a Positivos en Listas Python
Uso de Dos Punteros en Algoritmos Python
Ventana Deslizante
Patrón Ventana-Deslizante: Análisis de Datos Sucesivos
Subcadenas más largas sin caracteres repetidos
Longitud máxima de subcadena sin caracteres repetidos
Playground: Longest Substring Without Repeating Characters
Cadena sin caracteres repetidos en Python
Optimización de búsqueda binaria en Python
Programación Dinámica: Algoritmos y Aplicaciones Prácticas
Búsqueda Binaria
Búsqueda Binaria: Algoritmo Eficiente en Listas Ordenadas
Búsqueda Binaria en Arrays Rotados
Búsqueda Binaria en Arreglos Rotados
Playground: Search in Rotated Arrays
Búsqueda Binaria en Arrays Rotados usando C++
Búsqueda eficiente en matrices ordenadas MxN
Búsqueda Binaria en Matrices 2D Ordenadas
Playground: Search 2D Array Matrix
Búsqueda Binaria en Matrices con Python
Próximos pasos
Estructuras de Datos Lineales Avanzadas
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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?
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.
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:
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.
La estrategia en una matriz bidimensional aprovecha el orden automático por filas y por columnas:
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
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.
Aportes 4
Preguntas 0
La solución es hacer un binary search verticalmente, para después hacer uno horizontalmente, dentro de la fila que tiene el rango correcto del número que se esta buscando
Investigando lo que la profe pidió 🙆♂️:
O(m log n)
, y al pasarlo a binary search me embolaté un poco, y tengo que mejorar mis tiempos de resolución, pero bueno copilot me guío, con un bello O(log m*n)
:si solo aplanamos la matriz la complejidad sería
log (n+m)
lo cual sería mejor, dado que
log (n+m) < log m + log n
pero habría que considerar la complejidad de aplanar, que no sé cuál es
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?