几个月前,有一个nice question关于“ 1:n匹配问题”,似乎没有多时间算法。
我想添加约束以找到与多项式算法的1:n匹配问题的最大匹配。我想说:“对于顶点A1,如果顶点尚未从另一个顶点取出,则选择{B1,B2,B5}或{B2,B3}”即我不允许所有可能的组合。
如果我们为每个选择引入辅助顶点H并用树=>替换边缘,则可以表示这个。我们遇到类似于普通二分匹配的问题。 A或B的每个顶点在匹配中只能有一个边。 H中顶点或来自顶点的边缘都在匹配中,或者在匹配中不存在。想象一下下面的三分图:
现在定义h_ij =“包含H_ij的树根”以轻松表达匹配:
这个问题可以在多项式时间内解决吗?如果是,是否有加权(w(h_ij))变量的多时间解?如果不是,你可以争论甚至证明它是像我这样的“简单人”,还是建议其他约束来解决1:n匹配问题?
E.g。可以将图形转换为一般图形,然后可以通过一般图形的加权匹配来求解吗?或者branchings甚至matching forests可以在这里提供帮助吗?
PS:不是作业;-)
答案 0 :(得分:4)
最大值和最大值之间存在差异。我认为你在下面的写作中意味着最大值。
您似乎没有非常清楚地定义您的问题,但如果我已正确理解您的意图,那么您的问题似乎是NP完整(并且与'{3}}'等效')。
我们可以假设允许的集合大小与所有A_i相同(k)以找到[1:k]匹配,因为可以忽略任何其他集合大小。为了找到最大k,我们只运行[1:k]的算法,k = 1,2,3 ..等等。
所以你的问题是(我认为......):
给定m个集合族F_i = {S_1i, .., S_n(i)i}
(| F_i | = F_i = n(i)的大小,不必与| F_j |相同),每个大小为k的集合,你必须从每个集合中找到一个集合家庭(比如S_i)这样
我们可以分两步显示k = 3的NP-Complete:
设置包装是个问题:
给定n个集合S_1,S_2,...,S_n,找到这些中成对不相交集的最大数量。
即使| S_1 |,此问题仍然是NP-Complete = | S_2 | = ... = | S_n | = 3,称为3组包装问题。
我们将使用它来显示您的问题是NP-Hard,通过简单地将3-Set打包减少到您的问题。
给定S_1,S_2,..,S_n只是形成族
F_i = {S_i}。
现在,如果你的问题有一个多项式时间解决方案,那么我们得到一组集合{S_1,S_2,...,S_r},这样
这种简单的减少为我们提供了解决3套包装问题的解决方案,因此您的问题是NP-Hard。
要查看此问题是在NP中,我们将其减少为Set-Packing,如下所示:
给定F_i = {S_1i,S_2i,...,S_ni}
我们考虑集合T_ji = S_ji U {i}(即我们将该族的id添加到集合本身中)并通过Set-Packing算法运行它们。我将留给您,看看为什么Set-Packing的解决方案可以解决您的问题。
对于最大解决方案,您只需要一个贪心算法。只要继续拿起套装,直到你不能再挑选。这将是多项式时间。