定义
题意:有 n n n 男 n n n 女,每一个人都对其他 n n n 个异性有不同程度的喜爱,用一个长为 n n n 的列表表示,列表中的异性按喜爱程度从高到低排列。问能否找出一个结婚方案,使得不存在两对夫妻 ( m , w ′ ) , ( m ′ , w ) (m, w'), (m', w) (m,w′),(m′,w),使得 m m m 比起 w ′ w' w′ 更喜爱 w w w, w w w 比起 m ′ m' m′ 更喜爱 m m m,
如果两对夫妻 ( m , w ′ ) , ( m ′ , w ) (m, w'), (m', w) (m,w′),(m′,w) 没有上述情况就称这两对夫妻是稳定的,否则就是不稳定的。
用图论的语言描述,我们要找的结婚方案就是二分图中的一个完美匹配,且要是一个稳定匹配。
Gale-Shapley 算法
这是一个符合直觉的算法,直接写成伪代码就能表述意思。
初始化:所有男女都没有对象
WHILE 还有某个男性没有对象,且其尚未追求过所有女性
选择这样一个男性 m
设 w 为 m 尚未追求过的,且 m 喜爱程度最高的女性
IF w 没有对象
让 (m, w) 暂时结对
ELSE
设当前 w 与 m' 是一对
IF w 比起 m' 更喜欢 m
让 (m, w) 暂时结对,m' 变为没有对象
ELSE
m 被拒绝,仍然没有对象
END
最后所有结对的男女即成夫妻。
算法正确性
-
算法是否会终止?
会,在 n 2 n^2 n2 轮内终止。原因显然。
-
算法是否找到完美匹配?
是,否则必然有一对男女都没有对象,而该男性由于没有对象一定会追求该女性,使得两者结对。
-
算法是否找到稳定匹配?
是,考虑最终结果中任意两对夫妻 ( m , w ′ ) , ( m ′ , w ) (m, w'), (m', w) (m,w′),(m′