我正在尝试解决以下与分发相关的问题-
我有一个按重要性排序的项目列表 L (I1, I2,....In),I1 是最重要的。每个项目都有多个标签分配给它,每个项目上这些标签的组合可能不同,因此 I1 可能有标签 T1 和 T2,I2 可以有标签 t2、t3 和 t4,而 I3 可以有标签 T1,依此类推.
现在,我必须从这个列表 L 中进行批处理,项目的分布(根据标签)受以下约束 -
- 每个批次都有一个固定的大小 B
- 每个标签在批次分布中都有一系列项目,范围从最小值到最大值。因此,B 应该包含最少 x1 个带有标签 t1 的项目,x2 个带有标签 t2 的项目,以及最多 y1 个 t1 项目,y2 个 t2 项目,依此类推。
- 我们从 L 的顶部开始挑选项目并继续填充批次,直到达到满足约束的最终分布。例如,如果 L 有 300 个项目,并且我们必须将批次大小设为 50,我们可以一直到列表中的任意数量的项目,然后选择项目以进行所需的分布。
- 请记住,如果从列表中选择一个项目,分配给它的所有标签的计数都会增加 1。
我正在考虑一个解决方案,首先,我列出与每个特定标签对应的项目列表。我从其列表中为特定标签选择最少的所需项目。所以,我会从带有标签 t1 的项目列表中选择带有标签 t1 的 x1 个项目,而不管这些项目是否包含任何其他标签。这样,我将确保满足所有标签的“最低”标准。但对于最大部分,每个标签肯定会过火。如何递归地用 L 中的剩余项目替换批次中的项目以进行最终所需的分配?
任何其他解决方案都会很棒。或者任何可以让我找到解决这个问题的正确方向的现有算法。
我知道这个问题有点罗嗦,可能有点令人困惑,但我已经尽力解释了它,当然,我想这个问题可能很有趣。