“(1:k)树匹配” - 在多项式时间内可解?

时间:2010-03-01 14:35:36

标签: algorithm graph matching

几个月前,有一个nice question关于“ 1:n匹配问题”,似乎没有多时间算法。

我想添加约束以找到与多项式算法的1:n匹配问题的最大匹配。我想说:“对于顶点A1,如果顶点尚未从另一个顶点取出,则选择{B1,B2,B5}或{B2,B3}”即我不允许所有可能的组合。

如果我们为每个选择引入辅助顶点H并用树=>替换边缘,则可以表示这个。我们遇到类似于普通二分匹配的问题。 A或B的每个顶点在匹配中只能有一个边。 H中顶点或来自顶点的边缘都在匹配中,或者在匹配中不存在。想象一下下面的三分图:

alt text

现在定义h_ij =“包含H_ij的树根”以轻松表达匹配:

  • 然后在示例中M = {h12,h22}将是一个'最大'匹配,尽管并非涉及B的所有顶点
  • 集合{h12,h23}不匹配,因为B3将被选择两次。

这个问题可以在多项式时间内解决吗?如果是,是否有加权(w(h_ij))变量的多时间解?如果不是,你可以争论甚至证明它是像我这样的“简单人”,还是建议其他约束来解决1:n匹配问题?

E.g。可以将图形转换为一般图形,然后可以通过一般图形的加权匹配来求解吗?或者branchings甚至matching forests可以在这里提供帮助吗?

PS:不是作业;-)

1 个答案:

答案 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)这样

  • S_i和S_j与任何i neq j不相交。
  • S_i的数量是最大的。

我们可以分两步显示k = 3的NP-Complete:

  1. 可以减少NP-Complete问题Set Packing。这表明它是NP-Hard。
  2. 您的问题在NP中,可以缩减为Set Packing。这和1)意味着你的问题是NP-Complete。它还可以帮助您利用已存在的Set-Packing的任何近似/随机算法。
  3. 设置包装是个问题:

    给定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},这样

    • S_i和S_j是不相交的
    • S_i的数量最大。

    这种简单的减少为我们提供了解决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的解决方案可以解决您的问题。


    对于最大解决方案,您只需要一个贪心算法。只要继续拿起套装,直到你不能再挑选。这将是多项式时间。