2
によって確率でデキュー次のように私は、いくつかのタスクを保持しているプライオリティキュー、数値が非一意のプライオリティを持つ各タスクを持っている:Scalaの確率プライオリティキュー - 優先
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が同じ優先順位でもありますにもかかわらず、バックタスクを取得します。
- 優先度の高いアイテムをランダムに取得するにはどうすればよいですか?それは50/50のチャンスで、タスクaまたはタスクcのいずれかを取得することです。
- どのように優先順位に従って確率でアイテムをランダムに取得するのですか?それは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 –