Introducción
Arrays y Strings para resolver algoritmos avanzados
Arrays y Strings en detalle
Dos Apuntadores
Patrón de Dos Apuntadores
Verifying Alien Dictionary: análisis del problema
Solución de Verifying Alien Dictionary
Playground: Verifying Alien Dictionary
Programando Verifying Alien Dictionary con JavaScript
Merge Two Sorted Lists: análisis del problema
Solución de Merge Two Sorted Lists
Playground: Merge Two Sorted Lists
Programando Merge Two Sorted Lists con Python
Container With Most Water: análisis del problema
Solución de Container With Most Water
Playground: Container with Most Water
Programando Container With Most Water con Java
Reto: Trapping Rain Water
Ejercicios recomendados de Dos Apuntadores
Ejercicios resueltos de Dos Apuntadores
Ventana Deslizante
Patrón de Ventana Deslizante
Longest Substring Without Repeating Characters: análisis del problema
Solución de Longest Substring Without Repeating Characters
Playground: Longest Substring Without Repeating Characters
Programando Longest Substring Without Repeating Characters con Python
Ejercicios recomendados de Ventana Deslizante
Ejercicios resueltos de Ventana Deslizante
Búsqueda Binaria
Algoritmo de Búsqueda Binaria
Search in Rotated Arrays: análisis del problema
Solución de Search in Rotated Arrays
Playground: Search in Rotated Arrays
Programando Search in Rotated Arrays
Search 2D Array Matrix: análisis del problema
Solución de Search 2D Array Matrix
Playground: Search 2D Array Matrix
Programando Search 2D Array Matrix
Próximos pasos
Toma el Curso Avanzado de Algoritmos: Estructuras de Datos Lineales
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La búsqueda binaria es una técnica esencial para buscar elementos en listas ordenadas, ya que es extremadamente eficiente con una complejidad de tiempo de O(log N). No obstante, al enfrentarnos a arreglos rotados, es crucial identificar ciertas situaciones para asegurar el éxito de nuestra búsqueda. Este conocimiento es vital tanto para el desarrollo de software como para optimizar búsquedas en grandes conjuntos de datos, y puede resultar en tiempos de ejecución considerablemente más rápidos.
Un arreglo rotado es aquel que ha sido "girado" en un sentido, de modo que, aunque el orden original era ascendente, ahora ese orden parece alterado. Por ejemplo, el arreglo [5, 6, 7, 0, 1, 2] está rotado, y esta rotación puede ocurrir hacia la izquierda, derecha o incluso no existir. Identificar esta rotación es esencial, ya que impacta directamente en cómo debemos aplicar la búsqueda binaria.
Existen múltiples casos a evaluar cuando se trata de buscar en arreglos rotados:
Estado del arreglo:
Comparación con el objetivo:
Estos casos se manejan de manera similar en esencia. Lo crucial es modificar la comparación según el estado del arreglo.
La presencia de rotación cambia la lógica usual de búsqueda binaria. En un segmento rotado (e.g., [7, 0]), identificar si el lado izquierdo es efectivamente menor o mayor puede ser confuso, pero este problema se resuelve ajustando las condiciones del algoritmo. Por ejemplo:
Veamos cómo podría implementarse:
def buscar_elemento_rotado(arr, objetivo):
izquierda, derecha = 0, len(arr) - 1
while izquierda <= derecha:
mitad = (izquierda + derecha) // 2
# Si encontramos el objetivo
if arr[mitad] == objetivo:
return mitad
# Verificamos si la mitad izquierda está ordenada
if arr[izquierda] <= arr[mitad]:
if arr[izquierda] <= objetivo < arr[mitad]:
derecha = mitad - 1
else:
izquierda = mitad + 1
else:
if arr[mitad] < objetivo <= arr[derecha]:
izquierda = mitad + 1
else:
derecha = mitad - 1
# Si no encontramos el objetivo
return -1
# Ejemplo de uso
# Suponiendo un arreglo rotado: [5, 6, 7, 0, 1, 2]
resultado = buscar_elemento_rotado([5, 6, 7, 0, 1, 2], 0)
print("El índice del objetivo es:", resultado) # Debería imprimir "El índice del objetivo es: 3"
La búsqueda binaria en un orden rotado a menudo resulta más eficaz que una búsqueda lineal simple (O(N)), especialmente en listas grandes. Esto se debe a que, en vez de revisar cada elemento uno por uno, la búsqueda binaria divide el problema y reduce continuamente el espacio de búsqueda, ahorrando tiempo significativamente.
Este enfoque demuestra cómo un entendimiento profundo de las estructuras de datos y algoritmos puede mejorar sustancialmente la eficiencia de los programas y resalta la importancia de un conocimiento completo sobre el funcionamiento interno de técnicas fundamentales como la búsqueda binaria. ¡Sigue aprendiendo y enfrentando nuevos desafíos para afianzar estos conceptos!
Aportes 4
Preguntas 0
Aplicando la parte de que no solo busque de a 1 si no de a 3, respetando la O(long n), aunque me complique con el caso de cuando el valor no esta en la lista, pues me daba index error.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?