几个月前有一个 好问题 关于一个"1:n匹配的问题"似乎没有聚的时间算法。

我想添加的限制找到一个最大匹配的1:n匹配的问题有多项式的算法。我想说的:"顶点A1选择{B1、B2、B5}或者{B2、B3}如果折点不是已经从另一个顶点",即我不会允许所有可能的组合。

这可能是表示如果我们介绍帮助顶点H用于每一个选择和替代边的树木=>,我们得到一个问题,类似普通的二分匹配。每一个顶点A或B可能只有一个边缘的匹配。边缘或从顶点H是所有的匹配,或者他们没有存在的匹配。想象一下下面的三方图:

alt text

现在定义h_ij="树的根源,其中包含H_ij"表达的匹配很容易:

  • 然后在例如M={h12 22}将是一个'最大的'匹配,虽然不是所有的折点B的参与
  • 集合{h12,h23}是不匹配的,因为然后B3会有选择的两倍。

将这个问题,那么将可解在多项式的时间?如果是,是否有一个polytime解决方案的加权(w(h_ij))的变体?如果没有,你可以说或者即使证明了它对于"简单的人"像我这样或建议其他制约因素解决1:n匹配的问题?

E.g。可以曲线图转化为一个总图,然后可以解决与加权的匹配用于一般图表?或者可以 branchings 甚至 森林匹配 帮帮这里吗?

PS:没有家庭作业;-)

有帮助吗?

解决方案

之间有差别最大, 最大的.我假设你指的是最大的以下书面记录.

你似乎并不具有定义的问题很清楚,但是,如果我理解您的意向是否正确,这似乎是你的问题是NP完成(和'等同'来 集装箱).

我们可以假设,允许设置的尺寸是相同的(k)对于所有的蛋白的睡眠找到一个[1:k]匹配的,因为任何其他集大小,可以忽略。找到max k,我们刚刚运行的算法对[1:k]为k=1、2、3的..等等。

所以你的问题(我认为...):

鉴于m设置的家庭 F_i = {S_1i, .., S_n(i)i} (|F_i|=size的F_i=n(i)中,不需要同如|F_j|),每个组的大小k,你必须找到一个组从每个家庭(说S_i)这样的,

  • S_i和S_j是不相交的任我新j。
  • 数S_i的是最高的。

我们可以显示,它是NP-完全为k=3在两个步骤:

  1. NP-完整的问题 集装箱 可以减少。这显示出,它是NP-难。
  2. 你的问题是在NP和可以减少到集装箱。这和1)意味着你的问题是NP-完成。它还有助于利用任何似/随机算法已经存在于集装箱.

集装箱的问题是:

鉴于n组S_1,S_2,...,S_n,找到最大数目的两两相交集中这些。

这个问题仍然存在NP-完成即使|S_1|=|S_2|=...=|S_n|=3和被称为3-集装箱问题。

我们将利用这表明,你的问题是NP-努力,通过提供一个易于减少,从3套包装你的问题。

鉴于S_1,S_2,..,S_n只是形式的家庭

F_i={S_i}.

现在如果你的问题有一个时间多项式解决,那么我们得到一个套套{S_1,S_2,...,S_r}这样

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

这个简单的削减为我们提供了一个解决方案3-集装箱的问题,因此你的问题是NP-难。

看,这个问题是在NP,我们减少它对集装箱如下:

鉴于F_i={S_1i,S_2i,...,S_ni}

我们考虑集T_ji=S_ji U{我}(即我们添加一个id家庭的成立本身),并运行它们通过集装箱的算法。我将它留给你看为什么一个解决集装箱提供一个解决您的问题。


对于一个 最大的 解决方案,所有你需要的是一个贪婪的算法。只要保持捡集直到你可以选择不多。这将是多项式的时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top