均匀分布填充算法



需要您的帮助解决算法任务-有3个篮子,篮子1有10个球,最大容量可能是100,篮子2有50个球,最大容量可能是200,篮子3有100个球,最大容量可能是300。请帮我写一个算法或代码,将另外100个球在3个篮子之间进行最好的均匀分配。不能在篮筐之间移动球

您建议的算法当然应该适用于具有不同最大容量和任何onHand值的任何数量的篮子,例如,我想要添加的1个球或应该填充所有篮子的最大容量值100%。

在我的评论中已经提到过。如果您想让%fill的分布相等,那么您可以将这些球单独添加到当前填充最少的篮子中:

import numpy as np
def fill_baskets(baskets, ballsToDistribute):
for i in range(ballsToDistribute, 0, -1):
# find the basket with the lowest percentage of balls in it
currFillLevels = [currFill / maxFill for currFill, maxFill in baskets]
minIndex = np.argmin(currFillLevels)
# give the ball to this basket
baskets[minIndex][0] += 1
return baskets

baskets = [[10, 100], [50, 200], [100, 300]]
new_baskets = fill_baskets(baskets, 100)
# print the result:
for i, basket in enumerate(new_baskets):
print(f"Basket {i+1}: {basket[0]/basket[1]:.3f}% ({basket[0]}/ {basket[1]})")

这种情况下的输出如下:

Basket 1: 0.440% (44/ 100)
Basket 2: 0.435% (87/ 200)
Basket 3: 0.430% (129/ 300)

代码中可能出现的唯一问题是当我们有太多的球要放弃时。那么所有的篮子都会被塞满。

最新更新