计算最大对数算法

时间:2016-11-04 10:02:44

标签: algorithm matching

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

配对有一些标准:

  • 他们的年龄应该是+ - 3年
  • 首先是相同的比赛,但差异比赛是可以接受的
  • 他们应该拥有最大数量的共同利益

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

1 个答案:

答案 0 :(得分:1)

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

对于每个男人,根据上述标准创建单独的排序列表(首选项列表),反之亦然。这只是用自定义比较器对雄性和雌性阵列进行多次排序。

现在,你有每个男性和女性的偏好列表,你准备运行稳定的婚姻算法,以获得最大的一对。稳定婚姻问题的常见伪代码如下:

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)