稳定匹配问题

问题描述如下:
有n个男生和n个女生,找出一种稳定的匹配方式,满足以下条件:
1. 每个男生能且只能匹配一个女生。
2. 每个男生将所有女生排序形成一个列表,从最喜欢到最不喜欢依次排列。
3. 每个女生将所有男生排序形成一个列表,从最喜欢到最不喜欢依次排列。

不稳定因素:如果在已经匹配好的方案中,存在某个男生,更喜欢他配偶以外的女生,且那个女生也更喜欢他,则该男生与女生则为一对不稳定因素。注意,单方面更喜欢并不是不稳定因素。
稳定匹配:保证完美匹配且不存在不稳定因素。

一种稳定匹配算法:Propose-and-reject algorithm. [Gale-Shapley 1962]

Initialize each person to be free.
while (some man is free and hasn't proposed to every woman) {
    Choose such a man m
    w = 1st woman on m's list to whom m has not yet proposed
    if (w is free)
        assign m and w to be engaged
    else if (w prefers m to her fiancé m')
        assign m and w to be engaged, and m' to be free
    else
        w rejects m
}

通俗来讲就是:

  1. 从男生集合中选择一位男生,根据他的偏好列表,从没有尝试过的第一位女生开始尝试匹配。
  2. 如果对应的女生没有配偶,或者该女生有配偶但更喜欢当前男生。那么这个女生就会答应当前男生,并T掉之前的配偶。
  3. 否则,女生拒绝当前男生,进行下一次循环。
    算法的时间复杂度为O(n^2)

注意,稳定匹配不一定存在,如果待匹配的两个集合互不相关,则一定存在稳定匹配;如果是一个集合中的元素互相匹配,则不一定有稳定匹配。
一个反例:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值