我使用的是具有两组顶点L和R以及边集E的二分图。我尝试解决了几个不同的问题:
1)简单的集合覆盖问题(即,在L中找到顶点的最小基数子集,使得该子集的邻域包含R的全部)。据我所知,这个问题被称为命中集问题,相当于集合覆盖问题,并且存在一些近似算法。我想知道你推荐的近似算法,我在网上发现了几个不同的算法。
2)我想要解决的第二个问题类似于上面的问题,但是我想要仅描述R的一个子集,而不是R的任何其他元素,而不是描述所有的R。此外,允许操作包括设置联合并设置差异和设置L的元素邻域的交集。因此,我想找到L中必须包括在这种描述中的最小元素数。如果不清楚,我会道歉,我可以进一步解释并回答任何问题。
我真的很感激任何帮助。
答案 0 :(得分:0)
对于1,我建议integer linear programming。那里有许多解决者;我个人使用GLPK(免费)和CPLEX(商业)。
对于2,直观地说,我们希望由所选集合引起的维恩图具有以下属性:没有区域既包含T中的元素又包含不在T中的元素。(我假设除了设置补充,我们允许公式中的空集。)我们可以将此问题简化为简单的集合覆盖问题,如下所示。要覆盖的新元素是T中所有x和R - T中所有x的两个元素集{x,y}。每个旧集合S产生一个新集合{{x, y} | x in S and y in R - S}
。