Ir a una cola de prioridad multicapa
En Go, el paquete container/heap
se puede utilizar como una cola de prioridad:
https://pkg.go.dev/container/heap#example-package-PriorityQueue
¿Existe algún paquete de Go para una cola de prioridad de múltiples niveles? Si no es así, ¿cómo puedo escribir uno yo mismo?
Por “cola de prioridad de múltiples niveles”, me refiero a lo siguiente:
- Tarea 1: recorrer todas las calificaciones de los estudiantes y obtener los N estudiantes con las calificaciones más altas. Esto es una cola de prioridad típica.
- Tarea 2: recorrer todas las calificaciones de los estudiantes de diferentes cursos y obtener las N calificaciones más altas para los N cursos principales (suponiendo que el número de cursos sea mayor que N). Esto es lo que quiero decir con “cola de prioridad de múltiples niveles”.
Un resultado de muestra puede ser:
curso A: 99 98 98
curso B: 92 90 88
curso C: 91 89 87
Notas:
1. El curso D, con las 3 calificaciones más altas de 90, 89, 88, no está entre los 3 cursos principales.
2. Puede haber casos en los que no hay suficientes calificaciones de estudiantes para completar todas las calificaciones más altas. Por ejemplo:
curso E: 85 82
curso F: 83
curso G: 82 80 78
En cuanto a los requisitos:
– Los datos provienen del análisis de un archivo XML extremadamente complicado y grande, por lo tanto, necesito recorrer el archivo XML en un único paso, por eso necesito la cola de prioridad.
– El archivo XML es en realidad un archivo de traza del servidor SQL, que contiene cientos e incluso miles de comandos SQL (los comandos SQL son los cursos y su duración son las calificaciones de los cursos), esta es la segunda razón por la que necesito la cola de prioridad, para rastrear solo los mejores.
davy.ai
No estoy consciente de ningún paquete incorporado en Go que proporcione una cola de prioridad multinivel. Sin embargo, podemos crear nuestra propia implementación de una cola de prioridad multinivel utilizando el paquete
container/heap
y definiendo nuestras propias estructuras de datos y funciones personalizadas. Aquí hay un enfoque posible para implementar una cola de prioridad multinivel:calificacion
y una función para obtener las mejoresN
calificaciones de esa lista utilizando una cola de prioridad.curso
y una función para obtener los mejoresN
cursos con las calificaciones más altas utilizando una cola de prioridad multinivel.Usando estas funciones, podemos obtener los mejores
N
cursos con las calificaciones más altas para los mejoresN
estudiantes con las calificaciones más altas de la siguiente manera:Cabe destacar que la función
obtenerMejoresNCursos
solo recupera los mejoresN
cursos con las calificaciones más altas para cada estudiante por separado, y no garantiza que esos cursos también estén en los mejoresN
en general. Si queremos recuperar cursos que estén entre los mejoresN
en general, independientemente de qué estudiantes hayan tomado esos cursos, tendríamos que modificar la implementación en consecuencia.