Stable Matching
场景
有n个男的,n个女的,他们想要一一成对
而且他们各自都有对异性,根据他们想要和对方在一起的程度做排名
我们需要将他们一一配对,我们把最后的男女组合,叫做matching
假设matching S存在这样的一男M,一女W,他们虽然没有成对,他们都觉得,比起他们现在的伴侣,M更想和W在一起,W也更想和M在一起,那他们就会私奔,我们称为unstable pair。我们把这样的matching S叫做unstable matching
下面的例子中,X-C, Y-B, Z-A就是一个unstable matching,因为X-B会私奔
我们的目标就是找到一个stable matching
算法
一个情况下,可能有多种stable matching
以下的叫做Gale-Shapley Algorithm,能找到一个man-optimal, woman-pessimal的stable matching
也就是在找到的matching中,男人会尽量和自己更喜欢的女人匹配,女人会尽量和自己更不喜欢的男人匹配
Gale-Shapley算法是的复杂度
算法证明
stable-matching
一定不会出现一男一女各自落空,没有对象的情况
在Gale-Shapley中,女的第一次被求婚就会接受,此后只会找到更好的伴侣,而不会变成单身。女的最后落空只会是因为没有被求婚过
而男的在最差情况下,会对所有女生求婚,如果找到单身的女生,那么就会成对
不可能出现一男一女各自落空的情况
不会存在unstable的配对
假设Gale-Shapley Matching中存在一男M,一女W,他们是unstable pair
那么M一定会先向W求婚,再向当前的伴侣求婚,而且被W拒绝了
W拒绝M的原因一定是,已经有了比M更好的伴侣,所以M和W不会是unstable pair
man-optimal
反证法
假设在同一个场景下
Gale-Shapley Algorithm找出的matching为A,A不是man-optimal matching
存在一个stable matching为B,B是man-optimal matching

-
如果B是man-optimal,而A不是,那么B中至少一个有一个男的获得了更好的伴侣。
-
假设在A中,是在整个求婚过程中最先被拒绝的男人,拒绝他的女人是,而在B中和成功匹配
从2中,我们可以知道,在A中,曾经向求婚,但是已经有了对象,对象记为。而在B中,虽然更喜欢,但还是选择了 -
因为B是stable matching,那么B中,一定和一个,比起更喜欢的女人在一起了,记为
那么在A中,一定先向求婚,被拒绝,然后再向求婚,然后在一起,但这与我们假设的“是在整个求婚过程中最先被拒绝的男人”相违背,证明B不存在,A是man-optimal的
woman-pessimal
反证法
假设在同一个场景下
Gale-Shapley Algorithm找出的matching为A,A不是woman-pessimal matching
存在一个stable matching为B,B是woman-pessimal matching
-
如果B是woman-pessimal,而A不是,那么B中至少一个有一个女的获得了更差的伴侣。
-
假设在A中,和在一起,而不是最差的选择;
在B中和在一起,而是最差的选择
也就是对于,比起更喜欢 -
假设在B中和在一起,因为我们已经证明了Gale-Shapley找出的A是man-optimal的,所以对于,比起更喜欢
这样的话B中,和是unstable的,所以B不存在,A是woman-pessimal的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?