【发布时间】:2022-01-07 04:52:36
【问题描述】:
在 Go 中,container/heap 包可以用作 PriorityQueue --
https://pkg.go.dev/container/heap#example-package-PriorityQueue
是否有任何用于多级优先级队列的 Go 包?如果没有,如何自己写?
“多级优先级队列”是我的意思:
- 任务1:遍历学生的所有分数,找出分数最高的前N名学生。这是典型的 PriorityQueue。
- 任务2:遍历不同课程学生的所有分数,得到前N门课程的前N高分(假设课程数大于N)。这就是我说的“多级优先级队列”。
样本结果可以是
course A: 99 98 98
course B: 92 90 88
course C: 91 89 87
注意事项,
-
course D:90 89 88的前 3 名最高分不在前 3 名课程中。 -
在某些情况下,学生的分数可能不足以填满所有前 N 个最高分。例如:
course E: 85 82 course F: 83 course G: 82 80 78 -
进一步的要求,在现实中,
- 数据来自于解析超复杂超大的 XML 文件,因此我需要单程遍历 XML 文件,这就是我需要优先级队列的原因。
- XML文件其实是SQL Server Trace文件,里面包含成百上千条SQL命令(SQL命令就是课程,持续时间就是课程分数),这是我需要优先队列的第二个原因——只跟踪排名靠前的。
【问题讨论】:
-
什么定义了“前 N 门课程”?
-
课程按他们获得的最高分排名/排序,然后获得其中的前 N 个
标签: algorithm go multidimensional-array priority-queue