ジョブのリストと、これらのジョブを待っているワーカーのキューがあります。すべての仕事は同じですが、労働者は異なり、仕事を遂行する能力によって分類されます。つまり、最初の人はこの仕事を最もうまく行うことができ、2番目の人は少し悪いことをします。仕事は常にその時点で空いている人から最もスキルの高い人に割り当てられます。ある人に仕事が割り当てられると、しばらくの間、列から外れます。しかし、彼が終わると、彼は元の位置に戻ります。したがって、たとえば、ある瞬間のワーカー キューは次のようになります。
[x, x, .83, x, .7, .63, .55, .54, .48, ...]
はx
行方不明の労働者を表し、数字は残された労働者のスキルレベルを示します。新しいジョブが発生すると、使用可能なワーカーの中で最もスキルの高い 3 番目のワーカーに割り当てられます。したがって、次の瞬間のキューは次のようになります。
[x, x, x, x, .7, .63, .55, .54, .48, ...]
この時点でワーカー #2 が仕事を終えてリストに戻ったとします。
[x, .91, x, x, .7, .63, .55, .54, .48, ...]
プロセスが完全に明確になったことを願っています。私の質問は、ワーカーの迅速な検索と削除、およびその位置への挿入を実装するために使用するアルゴリズムとデータ構造です。
今のところ、私が見ることができる最善のアプローチは、最小限の要素を削除する (ジョブを割り当ててワーカーをキューから削除する) ために償却されたフィボナッチ ヒープを使用することです。これはかなり良い方法です。しかし、要素がすでにソートされており、時々キューをドロップするだけであるという事実を考慮に入れる、さらに優れたアルゴリズム/データ構造はありますか?O(log n)
O(1)