s のソートされていないリストがあるとしbucket
ます。(各バケットにはプロパティがあります。)バケットのリスト全体にできるだけ均等に分配しなければならないsize
数量があるとします (つまり、最大値を最小限に抑えます)。Q
バケットが大きいサイズで並べ替えられている場合、解決策は明らかです。図に示すように、各バケットをたとえばbuckets[i]
まで完全に満たしてからQ/(buckets.length-i) <= buckets[i]->size
、残りのバケットを同じ量 で満たしQ/(buckets.length-i)
ます。
バケットがソートされていない場合、これを解決する最も効率的な方法は何ですか?
次のように反復することしか考えられません(疑似コード):
while Q > 0
for i in 0..buckets.length-1
q = Q/(buckets.length-i)
if q > buckets[i]->size
q = buckets[i]->size
buckets[i]->fill(q)
Q -= q
しかし、より良い方法があるかどうか、またはリストをソートする方が効率的かどうかはわかりません。
(私が直面している実際の問題はそれ以上のものです。たとえば、この「並べ替えられていない」リストは実際には別のプロパティ「ランク」によって並べ替えられており、数量が均等に分割されない場合にどのバケットが追加の塗りつぶしを取得するかを決定します。たとえば、並べ替えてから埋める方法を使用するには、バケット サイズとランクでリストを並べ替えますが、これに対する答えを知っていれば、残りを理解するのに役立ちます)。