【发布时间】:2016-11-28 21:35:04
【问题描述】:
我有一个优先级队列,里面有几个任务,每个任务都有一个数字非唯一的优先级,如下:
import scala.collection.mutable
class Task(val name: String, val priority: Int) {
override def toString = s"Task(name=$name, priority=$priority)"
}
val task_a = new Task("a", 5)
val task_b = new Task("b", 1)
val task_c = new Task("c", 5)
val pq: mutable.PriorityQueue[Task] =
new mutable.PriorityQueue()(Ordering.by(_.priority))
pq.enqueue(task_a)
pq.enqueue(task_b)
pq.enqueue(task_c)
我要接下一个任务:
pq.dequeue()
但这样一来,我总是会找回任务a,即使还有具有相同优先级的任务c。
- 如何随机获取优先级最高的项目之一?即以 50/50 的几率获得任务 a 或任务 c。
- 如何根据优先级随机获得任何物品?即得到45%的任务a,10%的任务b,45%的任务c。
【问题讨论】:
-
您可以根据轮盘选择算法排序优先级
-
我不知道 Scala,但在我知道的许多语言中,我会为优先级实现一个自定义比较器,当优先级被考虑时,随机选择作为次要排序标准相等。
-
根据您想要的准确度和队列的大小,
Ordering.by(Random.nextDouble*_.priorty)可能就是您想要的。
标签: scala data-structures priority-queue