我有一个问题,感觉非常像 NP 难问题,但我希望得到一些帮助来证明它。
其次,如果可以提出最佳多项式时间算法那就更好了,尽管即使好的“贪婪”近似也可以。
给定 M 个弹珠、B 个桶以及每个桶的容量为 K,其中 M = BK,找到使共享颜色数量最大化的弹珠的某种分布。如果颜色 A 和颜色 B 一起出现在同一个桶中,则认为它们是共享的。
对于给定问题,颜色的分布是已知的,并且可以按照您想要的任何顺序进行排序和添加
颜色以某个数组的形式提供,其中索引处的每个元素代表一个颜色计数。每个元素的总和就是 M。我们不能对这个数组的分布方式做出任何假设,只是提供了它。
示例:
桶ID | 颜色 |
---|---|
0 | A、C |
1 | A、C |
2 | B、D |
3 | B、D |
M = 8,B = 4,K = 2
颜色数组:2,2,2,2
显然,这不是最优的,因为我们可以将存储桶 1 中的 C 与存储桶 2 中的 D 交换,并获得更好的结果(共享更多颜色)。
对这个问题的任何见解都应该受到无限赞赏,谢谢:)
算法: