我有两张桌子,包括男性和女性。我知道他们的年龄,种族和兴趣(每个变量的是或否)。目的是将它们配对并设置最大对数。
配对有一些标准:
有没有更快的算法加速这个过程,而不是制作多层循环和if else条件?
答案 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)
。