En este módulo, aprenderemos sobre los algoritmos de búsqueda, que son fundamentales en la programación y en la informática en general. Los algoritmos de búsqueda permiten encontrar un elemento específico dentro de una estructura de datos, como una lista o un arreglo. Veremos dos de los algoritmos de búsqueda más comunes: la búsqueda lineal y la búsqueda binaria.

Conceptos Clave

  1. Búsqueda Lineal: Un algoritmo que recorre cada elemento de la estructura de datos hasta encontrar el elemento buscado o hasta llegar al final de la estructura.
  2. Búsqueda Binaria: Un algoritmo más eficiente que la búsqueda lineal, pero que requiere que la estructura de datos esté ordenada. Divide repetidamente la estructura de datos en mitades para reducir el área de búsqueda.

Búsqueda Lineal

Descripción

La búsqueda lineal es el algoritmo de búsqueda más sencillo. Se utiliza cuando los datos no están ordenados. Este algoritmo recorre la estructura de datos elemento por elemento hasta encontrar el elemento buscado o hasta llegar al final de la estructura.

Ejemplo en Python

def busqueda_lineal(lista, objetivo):
    for i in range(len(lista)):
        if lista[i] == objetivo:
            return i  # Retorna el índice donde se encontró el objetivo
    return -1  # Retorna -1 si el objetivo no se encuentra en la lista

# Ejemplo de uso
lista = [3, 5, 2, 4, 9]
objetivo = 4
resultado = busqueda_lineal(lista, objetivo)

if resultado != -1:
    print(f"Elemento encontrado en el índice {resultado}")
else:
    print("Elemento no encontrado")

Explicación del Código

  1. Definición de la función: busqueda_lineal(lista, objetivo) toma una lista y el elemento objetivo que queremos encontrar.
  2. Bucle for: Recorre cada elemento de la lista.
  3. Condición: Si el elemento actual es igual al objetivo, retorna el índice del elemento.
  4. Retorno -1: Si el bucle termina sin encontrar el objetivo, retorna -1.

Ejercicio Práctico

Ejercicio: Implementa una función de búsqueda lineal que, además de retornar el índice del elemento encontrado, también cuente el número de comparaciones realizadas.

def busqueda_lineal_contador(lista, objetivo):
    comparaciones = 0
    for i in range(len(lista)):
        comparaciones += 1
        if lista[i] == objetivo:
            return i, comparaciones
    return -1, comparaciones

# Prueba tu función
lista = [10, 23, 45, 70, 11, 15]
objetivo = 70
indice, comparaciones = busqueda_lineal_contador(lista, objetivo)
print(f"Elemento encontrado en el índice {indice} después de {comparaciones} comparaciones")

Búsqueda Binaria

Descripción

La búsqueda binaria es un algoritmo más eficiente que la búsqueda lineal, pero requiere que la lista esté ordenada. Este algoritmo divide repetidamente la lista en mitades y compara el elemento del medio con el objetivo, reduciendo así el área de búsqueda a la mitad en cada paso.

Ejemplo en Python

def busqueda_binaria(lista, objetivo):
    inicio = 0
    fin = len(lista) - 1

    while inicio <= fin:
        medio = (inicio + fin) // 2
        if lista[medio] == objetivo:
            return medio
        elif lista[medio] < objetivo:
            inicio = medio + 1
        else:
            fin = medio - 1

    return -1

# Ejemplo de uso
lista = [1, 3, 5, 7, 9, 11]
objetivo = 7
resultado = busqueda_binaria(lista, objetivo)

if resultado != -1:
    print(f"Elemento encontrado en el índice {resultado}")
else:
    print("Elemento no encontrado")

Explicación del Código

  1. Definición de la función: busqueda_binaria(lista, objetivo) toma una lista ordenada y el elemento objetivo.
  2. Variables inicio y fin: Inicializan los límites de la búsqueda.
  3. Bucle while: Continúa mientras el inicio sea menor o igual al fin.
  4. Cálculo del medio: Calcula el índice del elemento medio.
  5. Condiciones:
    • Si el elemento medio es igual al objetivo, retorna el índice.
    • Si el elemento medio es menor que el objetivo, ajusta el inicio.
    • Si el elemento medio es mayor que el objetivo, ajusta el fin.
  6. Retorno -1: Si el bucle termina sin encontrar el objetivo, retorna -1.

Ejercicio Práctico

Ejercicio: Implementa una función de búsqueda binaria que, además de retornar el índice del elemento encontrado, también cuente el número de comparaciones realizadas.

def busqueda_binaria_contador(lista, objetivo):
    inicio = 0
    fin = len(lista) - 1
    comparaciones = 0

    while inicio <= fin:
        comparaciones += 1
        medio = (inicio + fin) // 2
        if lista[medio] == objetivo:
            return medio, comparaciones
        elif lista[medio] < objetivo:
            inicio = medio + 1
        else:
            fin = medio - 1

    return -1, comparaciones

# Prueba tu función
lista = [2, 4, 6, 8, 10, 12, 14]
objetivo = 10
indice, comparaciones = busqueda_binaria_contador(lista, objetivo)
print(f"Elemento encontrado en el índice {indice} después de {comparaciones} comparaciones")

Comparación de Algoritmos

Algoritmo Complejidad Temporal Requiere Lista Ordenada Ventajas Desventajas
Búsqueda Lineal O(n) No Simple de implementar Ineficiente para listas grandes
Búsqueda Binaria O(log n) Muy eficiente para listas grandes Requiere lista ordenada

Conclusión

En esta sección, hemos aprendido sobre dos algoritmos de búsqueda fundamentales: la búsqueda lineal y la búsqueda binaria. La búsqueda lineal es simple y no requiere que la lista esté ordenada, pero puede ser ineficiente para listas grandes. La búsqueda binaria, por otro lado, es mucho más eficiente pero requiere que la lista esté ordenada. Ambos algoritmos son herramientas esenciales en la programación y entender cuándo y cómo utilizarlos es crucial para desarrollar soluciones eficientes.

En el próximo tema, exploraremos los algoritmos de ordenamiento, que son complementarios a los algoritmos de búsqueda y nos permitirán preparar nuestras listas para una búsqueda binaria eficiente.

© Copyright 2024. Todos los derechos reservados