Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/carlosgomezc7/plataforma_aprendizaje/llms.txt

Use this file to discover all available pages before exploring further.

busqueda_binaria_curso localiza un curso por su identificador numérico en O(log n) comparaciones usando búsqueda binaria iterativa. En lugar de recorrer la lista de principio a fin, la función divide el espacio de búsqueda a la mitad en cada iteración, lo que la hace significativamente más eficiente que una búsqueda lineal a medida que el catálogo de cursos crece. Requisito previo: la lista recibida debe estar ordenada por id de forma ascendente antes de llamar a esta función.

Firma

def busqueda_binaria_curso(arr: list[dict], id_curso: int) -> dict | None

Parámetros

arr
list[dict]
required
Lista de diccionarios de curso ordenada de forma ascendente por el campo id. Pasar una lista desordenada producirá resultados incorrectos.
id_curso
int
required
ID numérico del curso a buscar. Debe coincidir exactamente con el campo id de algún elemento de la lista para que la búsqueda tenga éxito.

Valor de retorno

Devuelve el diccionario del curso cuyo id coincide con id_curso. Si ningún curso tiene ese ID, devuelve None.

Prerrequisito

La lista arr debe estar ordenada por id de forma ascendente antes de llamar a esta función. El método de la interfaz gráfica buscar_curso() realiza este ordenamiento automáticamente:
cursos_ordenados_id = sorted(cursos, key=lambda x: x['id'])
Si llamas a busqueda_binaria_curso directamente, aplica el mismo sorted antes de pasarle el arreglo.

Ejemplo

cursos = sorted(db.obtener_cursos(), key=lambda x: x['id'])
resultado = busqueda_binaria_curso(cursos, 104)
# resultado == {'id': 104, 'nombre': 'Física Cuántica', 'relevancia': 90, 'dificultad': 9}

no_encontrado = busqueda_binaria_curso(cursos, 999)
# no_encontrado == None

Código fuente

def busqueda_binaria_curso(arr, id_curso):
    inicio = 0
    fin = len(arr) - 1
    while inicio <= fin:
        medio = (inicio + fin) // 2
        if arr[medio]['id'] == id_curso:
            return arr[medio]
        elif arr[medio]['id'] < id_curso:
            inicio = medio + 1
        else:
            fin = medio - 1
    return None

Build docs developers (and LLMs) love