计算加权分配比率的算法

时间:2017-02-01 04:07:53

标签: algorithm math distribution buckets

这是我面临的问题。我有一些项目。然后我有不同数量的桶,重量(在0和1之间)连接到它们。我正在尝试计算每个桶中应该包含的项目的百分比。

例如,假设我有20个项目和3个桶:

  • B1 - 重量:0.5
  • B2 - 重量:0.5
  • B3 - 重量:0.25

百分比将是:

  • B1 - 40%的项目= 8项
  • B2 - 40%的项目= 8项
  • B3 - 20%的项目= 4项

百分比应该添加到100%,以便将所有项目分配到存储桶中。在上面的例子中,B1和B2都应该有两倍于B3的物品,因为它们的重量是B3的两倍;但是,当所有3个桶放在一起时,B1的实际百分比是40%。

是否有针对此的算法,或者你们中的任何人都知道如何解决它?

2 个答案:

答案 0 :(得分:4)

我认为您可以将每个桶的重量除以所有物品的总重量,以找出每个桶应该承受的物品的百分比。

但是,如果物品数量和铲斗重量不均匀分配,则会出现轻微问题。为了举例,我们考虑以下场景:

B1 - weight: 0.15
B2 - weight: 0.15
B3 - weight: 0.70

让我们假设有23项。

然后我们可以通过将总重量的比例乘以项目的总数来计算应该分配给每个桶的项目数量:

B1 - weight: 0.15, 3.45 items
B2 - weight: 0.15, 3.45 items
B3 - weight: 0.70, 16.1 items

可以处理这个分数桶问题的一种算法是计算每个桶的项目数,一次一个,然后将剩余部分转移到下一个计算。所以,在这个例子中,我们会这样做:

B1 - 3.45 items, keep 3, rollover 0.45
B2 - 3.45 items + 0.45 = 3.9 items, keep 3, rollover 0.9
B3 - 16.1 items + 0.9 = 17 items (whole number, and last bucket)

答案 1 :(得分:1)

对所有桶的权重求和,然后将每个桶的权重除以该总和,以得出桶的总量百分比。