将项目分配给最少数量的组

时间:2015-02-23 05:26:54

标签: algorithm math

这是一种流行的CS模式,但我显然遗漏了一些关键字,因为我没有运气搜索它。

我有一组4项:[A,B,C,D]。

我有3组:1,2,3。

第1组可以接受A或B.

第2组可以接受B或C.

第3组可以接受C或D.

以最小化所用组数的方式分配项目。 即解决方案是: 第1组:[A,B]

第2组:[]

第3组:[C,D]

我将如何以编程方式解决此问题?我知道我以前见过这个,所以非常感谢所有指向正确方向的关键字或链接。

2 个答案:

答案 0 :(得分:2)

这是集合覆盖问题。这是NP难,所以找到真正的最小集合一般很难并且需要指数时间。采用覆盖最剩余元素的集合的贪婪算法可以给出良好的近似。对于具有有界尺寸的覆盖套件,它也可以在合理的时间内解决。有关详细信息,请参阅http://en.m.wikipedia.org/wiki/Set_cover_problem

答案 1 :(得分:1)

如果我们将此问题可视化为Graph问题,其中所有组和项都是图中的节点,并且组和项之间存在边连接,我们可以看到此问题是{{3 }}

但是,如果项目数量很少(少于16个),我们可以使用动态编程轻松解决。