在一个项目中我遇到了这个问题,我将在这里用问题的实际领域之外的术语重新表述(我想我可以谈论烟花的口径和形状,但这会使理解更加复杂)。我正在寻找一种(可能是近似的)算法来解决它。
我有n个大小不一的容器,m个不同大小职业、不同颜色的物件(物件可以是多色的,所以一个物件的颜色是真正的一套)。
我的目标是将所有对象放入容器中(我已经知道这是可能的),以便每个容器的颜色种类最小化。对于“颜色的种类被最小化”,我的意思是每个容器的不同颜色数量的总和是最小的。
一个例子。我有两个大小为 2 的容器和四个对象,它们的颜色是 {red}、{red,green}、{blue}、{blue,green},每个大小为 1。最佳解决方案是 [{red} , {red, green}], [{blue}, {blue, green}],其中总品种为 2+2=4。更糟糕的解决方案是 [{red}, {blue}], [{red, green}, {blue, green}],其中总品种为 2+3=5。
我的猜测是这个问题是 NP 难题,因为它听起来比背包问题更难:对象的值被转换为负值,而且取决于同一容器内的其他对象。但是我不知道如何解决这个问题以获得一个近似的解决方案,无论如何这将是非常受欢迎的。