将弹珠分配到桶中以实现最大程度的颜色共享

问题描述 投票:0回答:1

我有一个问题,感觉非常像 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 交换,并获得更好的结果(共享更多颜色)。

对这个问题的任何见解都应该受到无限赞赏,谢谢:)

algorithm optimization graph-theory np-complete np-hard
1个回答
0
投票

算法:

  • 令 NC 为不同颜色的数量
  • 如果NC < K
    • 将每种颜色的一颗弹珠添加到第一个桶中
    • 完成(无论你如何处理其余的弹珠,共享计数都不会改变)
  • 其他
    • 将前 K 种颜色的大理石添加到第一个桶中
    • 从接下来的 K 种颜色中添加一颗弹珠,将弹珠剩余到第二个桶中
    • 继续,直到弹珠或水桶耗尽
© www.soinside.com 2019 - 2024. All rights reserved.