【问题标题】:Non-bipartite non-weighted maximum matching between users用户间非二分非加权最大匹配
【发布时间】:2012-04-21 21:40:52
【问题描述】:

情况:用户选择多个其他用户作为项目的可能合作伙伴。用户对他选择的一个用户没有偏好(即他列表中的任何用户都足以成为合作伙伴)。示例:

| user_id | preferred_partners |
| 1       | 2 4                |
| 2       | 3 1                |
| 3       | 4 2 1              |
| 4       | 1                  |

真正的名单会更大。

我的问题:给定一组用户及其首选合作伙伴(如上面的列表),我想生成一组最终合作伙伴对。最终配对的人数必须最大化(我希望有尽可能多的人配对)。

这是我认为我需要的算法:Edmonds's matching algorithm,但由于我不是数学背景,我无法解释和实施它。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: ruby algorithm matching weighted bipartite


    【解决方案1】:

    Edmonds 的匹配算法确实是你想要的。这是一个good link,提供了详细的解释

    【讨论】:

    • 我遇到的问题是在 ruby​​ 中实现算法。
    【解决方案2】:

    Edmonds 的算法可能是您想要的,但话又说回来,它可能不是。你会寻找三重奏吗?你会想要偏好的强度吗?您是否曾经想要一些关于您的机制的保证,例如,如果有人提出更多偏好,他们就不能从匹配变为不匹配?合作伙伴必须相互优先吗?如果不是,是否更重视共同偏好的合作伙伴?

    其中一些变体可以通过 Edmonds 算法或其加权表亲来解决,该算法使用 Edmonds 来解决“受限原始”,其方式与匈牙利算法使用二分匹配算法的方式非常相似,但其中一些,尤其是 3D 匹配, 很难,不适合可爱的组合算法。通过从 Ruby 调用整数规划求解器,您可能会发现甚至可以更轻松地求解多时间情况。

    【讨论】:

    • 没有三倍,只有双倍。没有偏好优势。如果某些用户不匹配也没关系。合作伙伴必须是相互偏好的,但这个问题可以通过在运行算法之前从数据集中删除不相互偏好的偏好来轻松解决。我 99% 确定 Edmonds 的算法是我需要的算法。我只需要帮助在 Ruby/Python/PHP/等中实现它。
    猜你喜欢
    • 2011-04-26
    • 2013-01-27
    • 2011-07-09
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2019-12-18
    • 2014-05-09
    • 2011-05-07
    相关资源
    最近更新 更多