algorithm - 计算最大对数算法

标签 algorithm matching

我有两张人表,包含男性和女性。我知道他们的年龄、种族和兴趣(每个变量是或否)。目的是将它们配对并设置最大对数。

配对有一些标准:

  • 他们的年龄应为 +- 3 岁
  • 同场比赛优先,但可以接受不同比赛
  • 他们应该有最大数量的共同兴趣

有没有更快的算法来加速这个过程,而不是做很多层循环和 if else 条件?

最佳答案

首先根据这些标准为每个男性和女性建立优先级集,然后申请 Stable marriage problem产生最大可能配对的算法。

对于每个男人,根据上述标准创建一个单独的排序列表(偏好列表),反之亦然。这只是使用自定义比较器对 male 和 female 数组进行多次排序。

现在,您有了每个男性和女性的偏好列表,您可以运行稳定婚姻算法以获得尽可能多的配对。稳定婚姻问题的常见伪代码如下所示:

function stableMatching {
    Initialize all m ∈ M and w ∈ W to free
    while ∃ free man m who still has a woman w to propose to {
       w = first woman on m’s list to whom m has not yet proposed
       if w is free
         (m, w) become engaged
       else some pair (m', w) already exists
         if w prefers m to m'
            m' becomes free
           (m, w) become engaged 
         else
           (m', w) remain engaged
    }
} 

如果正确实现算法,时间复杂度在平均情况下为 O(nlogn),在最坏情况下为 O(n^2)

关于algorithm - 计算最大对数算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419844/

相关文章:

algorithm - 双 for 循环的最坏情况运行时间

java - 交换排序算法查询

algorithm - 用点图案填充矩形

algorithm - 多事件匹配算法

C++: 没有匹配函数来调用 ''

javascript - 使用 JavaScript + jQuery 函数检查表行冗余时性能下降

string - 在文本中查找字典字符串的最快方法

c# - 以编程方式求解模方程

algorithm - 找到一个完美的匹配或证明这是不可能的

c# - 正则表达式阿拉伯语发声匹配