这是一种流行的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]
我将如何以编程方式解决此问题?我知道我以前见过这个,所以非常感谢所有指向正确方向的关键字或链接。
答案 0 :(得分:2)
这是集合覆盖问题。这是NP难,所以找到真正的最小集合一般很难并且需要指数时间。采用覆盖最剩余元素的集合的贪婪算法可以给出良好的近似。对于具有有界尺寸的覆盖套件,它也可以在合理的时间内解决。有关详细信息,请参阅http://en.m.wikipedia.org/wiki/Set_cover_problem
答案 1 :(得分:1)
如果我们将此问题可视化为Graph问题,其中所有组和项都是图中的节点,并且组和项之间存在边连接,我们可以看到此问题是{{3 }}
但是,如果项目数量很少(少于16个),我们可以使用动态编程轻松解决。