【问题标题】:Many to One Matching Algorithm多对一匹配算法
【发布时间】:2013-01-27 16:56:40
【问题描述】:

如果这是重复的,我深表歉意。我缺乏计算机科学知识,不知道应该正确搜索什么。

我需要找到一个匹配算法。我有一系列房间,以及一系列内容换房间。这些物品有一个最小尺寸的房间可以容纳——所以有些人很乐意放在任何房间里,有些人只能放在一两个房间里。我还将为某些房间设置最大尺寸,但我认为这仅在我确定房间是否合适时才会生效。

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

【问题讨论】:

    标签: algorithm many-to-many


    【解决方案1】:

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

    1. 该图是二分图。如果我们将顶点分成两个集合,房间和内容,每个集合中都没有内部边。
    2. 如果房间大到足以容纳内容,则在contents(i)room(j) 之间存在一条边。

    最大匹配会产生两个集合(即房间和内容)中顶点之间的最大配对数,确保每个顶点只使用一次。如果所有顶点都匹配,则称匹配是“完美的”。有许多算法可用于解决此类问题,可能最快的是Hopcroft-Karp 方法。

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

    【讨论】:

      【解决方案2】:

      您可以通过http://en.wikipedia.org/wiki/Assignment_problem 解决此问题。您没有要匹配的匹配数量的东西,但是您可以为先不足的一方补上东西。如果您为每个可能的匹配设置相同的组合事物的成本,则具有组合事物的解决方案的最小成本答案也将是仅产生部分匹配的没有组合事物的解决方案的最小成本答案,因为编造的东西无论怎么分配对成本的贡献都是一样的。

      (当然,可能有更快的方法来解决您的特定问题 - 例如,如果您在一侧只有一件事要匹配,只需在每个可能的位置尝试即可)。

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 2018-01-24
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 2017-06-07
        • 2012-12-25
        相关资源
        最近更新 更多