多对一匹配算法

时间:2013-01-27 05:26:23

标签: algorithm many-to-many

如果这是重复,我道歉。我缺乏计算机科学知识,无法知道要搜索什么。

我需要找到匹配的算法。我有一系列的房间,还有一系列的房间内容。内容有一个最小尺寸的房间,他们会适合 - 所以有些人会很乐意适合任何房间,有些只适合一个或两个房间。我也会为一些房间设置一个最大尺寸,但我认为只有当我确定房间是否合适时才会产生影响。

假设(虽然 - 在我的实际使用中无法保证)有一个潜在的解决方案,我如何找到最佳分配,这样每个房间只使用一次而且没有任何内容缺少房间?

2 个答案:

答案 0 :(得分:2)

您的问题似乎是maximum bipartite matching问题。您可以将问题视为无向图G(V,E),其中顶点V是房间和内容,边E是房间和内容之间可能的连接:

  1. 图表是二分图。如果我们将顶点分成两组,即房间和内容,则每组中都没有内部边缘。
  2. 如果房间足够大以容纳内容,则contents(i)room(j)之间的图表中存在边缘。
  3. 最大匹配产生两组(即房间和内容)中顶点之间的最大配对数,确保每个顶点仅使用一次。如果所有顶点都匹配,则称匹配是“完美的”。有许多算法可用于此类问题,Hopcroft-Karp方法可能最快。

    您还可以考虑进一步优化您的问题,您可以尝试最大限度地减少房间内的总浪费空间。在这种情况下,“重量”将基于内容区域和房间之间的差异与上面定义的边缘相关联。 然后,您将寻求最大重量最大匹配。

答案 1 :(得分:0)

您可以将其解决为http://en.wikipedia.org/wiki/Assignment_problem。你没有匹配的东西匹配数量,但是你可以为任何一方首先缩短的东西做补充。如果你为每一个可能的匹配使得组合物的成本相同,那么对于没有组成只能产生部分匹配的东西的解决方案,解决方案的最低成本答案也将是解决方案的最低成本答案,因为无论如何分配,成本的东西对成本的贡献都是一样的。

(当然,可能有更快的方法来解决您的具体问题 - 例如,如果您只有一个方面可以匹配其中一方,只需在每个可能的位置进行尝试。)