最快的算法,让两个人相互结婚

时间:2016-10-18 10:27:08

标签: algorithm graph

我无法想到这个问题的算法。问题是: 有两套,设置" 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可以结婚1b可以结婚2c可以结婚3d可以结婚{ {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作为她的伴侣。

输出="不成功"

我需要最快的算法来确定成功或失败

2 个答案:

答案 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的所有匹配项(普通匹配项),并将它们从集合中取出。现在,让我们计划最低重力对(人群指数+女性群集指数最小)并回溯它们。在处理主案件时处理子案例。