我无法想到这个问题的算法。问题是: 有两套,设置" M"包含男人名单,设置" F"包含一份女性名单。
现在有一套" Marriage"其中包含允许的婚姻,假设(a,1)
意味着男性a
可以嫁给女性1
和女性1
嫁给男性a
。
婚姻只有在合作伙伴与推荐列表匹配时才能完成。我们称之为"成功"如果来自M
的每个人,可以将某人与其姓名对应的推荐列表中的某个人结婚,而对于来自列表F
的女性则相同。否则我们称之为"不成功"
示例1
List M = {a,b,c,d}
List F= {1,2,3,4}
Recommended List = { (a,1),(a,4),(b,1),(b,2),(c,3),(c,4),(d,1),(d,4) }
a
可以结婚1
,b
可以结婚2
,c
可以结婚3
,d
可以结婚{ {1}}。
输出="成功"
示例2
4
与女性List M = {a,b,c,d}
List F= {1,2,3,4}
Recommended List = { (a,1),(a,3),(b,1),(b,2),(c,3),(c,1),(d,1),(d,2) }
结婚是不可能的,因为推荐列表中没有可能配对的女性4
作为她的伴侣。
输出="不成功"
我需要最快的算法来确定成功或失败
答案 0 :(得分:0)
似乎是图形匹配(稳定婚姻)问题,但它可以很容易地解决如下。
r_f=[i[1] for i in recomended_list]
r_m = [i[0] i in recomended_list]
answer = "successfull" if set(M).issubset(r_m) and set(F).issubset(r_f) else "unsucessfull"
答案 1 :(得分:0)
让我们像这样创建集群:
M1 =所有男子都有一场比赛
M2 =所有男子有两场比赛
W1 =所有女性都有一场比赛
...
现在,您可以找到M1和W1的所有匹配项(普通匹配项),并将它们从集合中取出。现在,让我们计划最低重力对(人群指数+女性群集指数最小)并回溯它们。在处理主案件时处理子案例。