我正在寻找一组(我们将表示b_i
)中不相交的子集(我们将表示这些X
)的最小数量,以使所有b_i
都满足以下限制条件:
x_i
中的每个元素X
应该精确地放入一批。 len(b_i) <= MAX_ELEMENTS_PER_BATCH
的i
sum(b_i) <= MAX_SUM_PER_BATCH
的i
我想出了一种启发式方法来查找满足约束条件的批次,但不能保证批次的最小数量。
例如:
MAX_SUM_PER_BATCH
。我意识到这可能是一个我不知道的名字解决的问题,并且针对最小批次进行优化会带来复杂性。
请在您的答案中输入伪代码,python或java。
答案 0 :(得分:0)
那又怎么样:
排序集合(从大到小)
采用集合的下一个元素,并尝试根据2条规则将其放入现有批次中(从创建的第一个批次开始)。
如果适合,添加到批次并返回到2。否则,创建一个新批次,添加到它并返回到2
我相信它可以满足所有条件,并且排序后只需1次线性采集即可
编辑:存储批次的当前总和而不每次都重新计算可能会更有效