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.

El módulo de Cursos es la primera pestaña de la Plataforma Educativa Personalizada. Su propósito es presentar al estudiante una lista de cursos ordenados de mayor a menor relevancia personalizada y permitirle localizar cualquier curso en la base de datos en tiempo sub-lineal usando su identificador numérico. Para lograr esto, el módulo combina dos algoritmos clásicos: Quick Sort para el ordenamiento y Búsqueda Binaria para la consulta.

Vista general

La pestaña “Cursos (Orden/Búsqueda)” expone dos controles interactivos principales:
ControlDescripción
Botón Cargar y Ordenar por RelevanciaCarga todos los cursos desde db_local.json y los muestra ordenados de mayor a menor relevancia usando Quick Sort.
Campo de texto + botón BuscarAcepta un ID numérico y localiza el curso correspondiente mediante Búsqueda Binaria, mostrando el nombre y dificultad en un cuadro de diálogo.

Ordenar por Relevancia (Quick Sort)

Al hacer clic en “Cargar y Ordenar por Relevancia”, la aplicación llama internamente a quicksort_cursos(cursos, 'relevancia') con la lista de cursos obtenida de la base de datos local y muestra los resultados en el Listbox de la interfaz, de mayor a menor relevancia.
def quicksort_cursos(arr, clave="relevancia"):
    if len(arr) <= 1:
        return arr
    pivote = arr[len(arr) // 2]
    izq = [x for x in arr if x[clave] > pivote[clave]]
    medio = [x for x in arr if x[clave] == pivote[clave]]
    der = [x for x in arr if x[clave] < pivote[clave]]
    return quicksort_cursos(izq, clave) + medio + quicksort_cursos(der, clave)
El algoritmo sigue el paradigma divide y vencerás: selecciona el elemento central del arreglo como pivote y particiona los demás elementos en tres grupos — los de valor mayor al pivote (izq), los iguales (medio) y los de valor menor (der). La recursión se aplica sobre los grupos extremos y los resultados se concatenan en el orden izq + medio + der, lo que produce una lista ordenada de mayor a menor (descendente).
El orden resultante es mayor a menor (izq antes que der), a diferencia de un Quick Sort ascendente convencional. Esto garantiza que el curso de mayor relevancia aparezca siempre en la primera posición de la lista de sugerencias.

Buscar Curso por ID (Búsqueda Binaria)

El campo de búsqueda acepta un ID numérico (ej. 103). Al presionar “Buscar”, el método buscar_curso() realiza dos pasos antes de presentar el resultado:
  1. Ordenar por ID ascendente — la lista de cursos se ordena por id de menor a mayor usando sorted(), requisito previo indispensable para la Búsqueda Binaria.
  2. Aplicar la búsqueda — se llama a busqueda_binaria_curso(cursos_ordenados_id, int(id_buscar)) que recorre el arreglo en tiempo O(log n).
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
La función mantiene dos punteros (inicio y fin) que convergen hacia el elemento buscado. En cada iteración calcula el índice medio y compara el ID almacenado ahí con el ID objetivo:
  • Si coinciden → retorna el diccionario completo del curso (id, nombre, relevancia, dificultad).
  • Si el ID del medio es menor → el objetivo está en la mitad derecha; inicio avanza.
  • Si el ID del medio es mayor → el objetivo está en la mitad izquierda; fin retrocede.
  • Si los punteros se cruzan sin encontrar coincidencia → retorna None.

Ejemplo de uso

Los datos por defecto cargados en db_local.json al iniciar la aplicación son:
IDNombreRelevanciaDificultad
101Matemáticas Básicas853
102Programación en Python955
103Historia del Arte602
104Física Cuántica909
105Estructuras de Datos998
Ordenar por relevancia produce la siguiente lista en pantalla:
ID: 105 | Estructuras de Datos       | Relevancia: 99
ID: 102 | Programación en Python     | Relevancia: 95
ID: 104 | Física Cuántica            | Relevancia: 90
ID: 101 | Matemáticas Básicas        | Relevancia: 85
ID: 103 | Historia del Arte          | Relevancia: 60
Buscar el ID 103 muestra el cuadro de diálogo:
Curso Encontrado:
Historia del Arte
Dificultad: 2
Buscar un ID inexistente como 999 muestra: "Curso no encontrado.".
La Búsqueda Binaria requiere que el arreglo esté ordenado por ID de menor a mayor antes de ejecutarse. Este ordenamiento se realiza automáticamente dentro del método buscar_curso() mediante sorted(cursos, key=lambda x: x['id']), por lo que no es necesario ningún paso manual del usuario.

Para la referencia completa de cada algoritmo consulta:

Build docs developers (and LLMs) love