Algoritmo de búsqueda binaria en listas ordenadas
Clase 26 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
¿Qué es la búsqueda binaria?
La búsqueda binaria es un algoritmo altamente eficiente para encontrar un elemento en una lista ordenada. Es especialmente útil cuando trabajamos con grandes conjuntos de datos, como por ejemplo, una aplicación con un millón de usuarios organizados alfabéticamente. La búsqueda binaria se destaca por su eficacia al reducir significativamente la cantidad de elementos que necesitamos revisar, permitiéndonos encontrar el elemento deseado sin tener que recorrer toda la lista. Su complejidad en tiempo es O(log n), lo que la hace mucho más rápida que una búsqueda lineal, especialmente en grandes volúmenes de datos.
¿Cómo funciona la búsqueda binaria?
La esencia de la búsqueda binaria radica en su capacidad para dividir el espacio de búsqueda a la mitad en cada paso del proceso. Utiliza dos apuntadores, uno para el extremo izquierdo y otro para el extremo derecho de la lista. A partir de aquí, se calcula la posición media y se compara el valor en esta posición con el valor objetivo.
Pasos del algoritmo
-
Inicialización de los apuntadores:
- El apuntador izquierdo comienza al inicio de la lista.
- El apuntador derecho se coloca al final de la lista.
-
Calcular la posición media:
- Se utiliza la fórmula:
medio = izquierda + (derecha - izquierda) / 2.
- Se utiliza la fórmula:
-
Comparación con el objetivo:
- Si el número en la posición media es el deseado, se ha encontrado la posición y el algoritmo finaliza.
- Si el número es menor que el objetivo, se ajusta el apuntador izquierdo a
medio + 1. - Si es mayor, se ajusta el apuntador derecho a
medio - 1.
-
Repetir el proceso:
- El proceso se repite mientras el apuntador izquierdo sea menor o igual al derecho.
-
Criterio de parada:
- Si los apuntadores se cruzan sin haber encontrado el número, se concluye que el número no está presente en la lista.
Ejemplo en Python
Aquí se muestra un ejemplo sencillo del algoritmo implementado en Python:
def busqueda_binaria(lista, objetivo):
izquierda, derecha = 0, len(lista) - 1
while izquierda <= derecha:
medio = izquierda + (derecha - izquierda) // 2
if lista[medio] == objetivo:
return medio
elif lista[medio] < objetivo:
izquierda = medio + 1
else:
derecha = medio - 1
return -1
¿Cuándo utilizar la búsqueda binaria?
La búsqueda binaria es ideal para utilizarse bajo ciertas condiciones. Veamos algunas recomendaciones para su uso:
- La lista debe estar previamente ordenada. Esto es fundamental para que el algoritmo funcione correctamente.
- Es especialmente útil cuando trabajamos con grandes volúmenes de datos donde la búsqueda lineal se volvería ineficiente.
- Al ser un algoritmo con una complejidad de O(log n), es apto para entornos donde la eficiencia y la escalabilidad son esenciales.
Ejemplo en C++
A continuación, un ejemplo de cómo implementar la búsqueda binaria en C++:
#include <vector>
using namespace std;
int busquedaBinaria(const vector<int>& lista, int objetivo) {
int izquierda = 0;
int derecha = lista.size() - 1;
while (izquierda <= derecha) {
int medio = izquierda + (derecha - izquierda) / 2;
if (lista[medio] == objetivo) {
return medio;
} else if (lista[medio] < objetivo) {
izquierda = medio + 1;
} else {
derecha = medio - 1;
}
}
return -1;
}
Conclusión
El algoritmo de búsqueda binaria es una herramienta poderosa que debe utilizarse cuando se requiere rapidez y eficiencia en la búsqueda de elementos dentro de una lista ordenada. Su relación de complejidad logarítmica ofrece ventajas significativas frente a la búsqueda lineal, y su lógica simple pero efectiva garantiza que se puedan manejar grandes conjuntos de datos con facilidad. Para cualquier desarrollador, entender y saber implementar la búsqueda binaria es esencial, y servirá para enfrentar problemas complejos de manera más eficiente. Sigue perfeccionando tus habilidades y explorando las posibilidades que estos algoritmos ofrecen en el mundo real.