2
我有個優先級隊列,其中包含多個任務,以數字非唯一的優先級每個任務有機率出列,如下所示:斯卡拉概率優先級隊列 - 優先
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()
可是這樣一來,我會永遠回去任務,即使有也任務c具有相同的優先級。
- 如何隨機獲取其中一個具有最高優先級的項目?那是得到任務a或任務c,有50/50的機會。
- 如何隨機獲取任何項目,並根據優先級的概率?那是得到45%的任務a,10%的任務b和45%的任務c。
您可以根據輪盤選擇算法訂購優先級 –
我不知道Scala,但在許多語言中,我確實知道我會爲優先級實現一個自定義比較器,將該選項隨機化爲二級排序標準否則這些優先事項將被視爲平等。 – pjs
這看起來很有趣https://www.codatlas.com/github.com/apache/kafka/HEAD/core/src/main/scala/kafka/utils/timer/TimingWheel.scala –