设置
假设我有非常多的物品,每个物品都具有形状、大小和颜色。它们可以是:
- 三角形、圆形或正方形
- 红色、绿色或蓝色
- 小号或大号
我不能对这些属性在物品中的分布作出任何假设。我“有把握”它们不全是一百万个大号的红色三角形,但这总是有可能的。
问题
我想从我的物品中挑选36个,在所有属性类别上尽可能地“多样化”。澄清一下,从很多物品中选取36个后,我理想情况下想要12个红色、12个绿色、12个蓝色、12个三角形和18个小号等。
现在有18种可能的不同物品类型(3种颜色 * 3种形状 * 2种大小),所以一种方法是包括每种不同类型的两个(假设我有它们)。
如果我没有足够数量的每种不同类型,另一种(不切实际且粗暴)的方法是迭代每种可能的36个物品的子集,并保留最佳子集。
我相信这是一个特定实例,可以通过已知算法解决更广泛的问题类,但我无法确定谷歌的“奥秘”。我将其标记为背包问题
,因为感觉或许是这个问题,但我想知道是否有更好的解决方法?
您能帮忙提供解决方案或至少合适的搜索术语吗?