算法的起源:在1962年,两个数学经济学家David Gale和Lloyd Shapley问了这样一个问题:能否设计一个学院招生或者工作招聘等自动实施(self-enforcing)的过程即给一组招聘者和应聘者的优先列表,我们能否设计这样一个算法:对于每一个招聘方E和每一个没有为E工作的应聘方A,使得下面两种情况中的一个成立:
- E相对于A更喜欢每一个接受它的应聘者;
- A相对于为E工作更喜欢为现在的公司工作;
如果这个成立,那么结果就是稳定的
为了简化这个问题,我们考虑一一匹配的情况。n个男人M={m1,m2,...,mn}和n个女人W={w1,w2,...,wn}匹配结婚的事情。
完美匹配S'(perfert matching)是指M中的每个成员和W中的每个成员在集合S’中只出现一次的匹配。
对于S,不稳定的对(instability)是指在S中有两对(m,w),(m',w')有以下的性质:m相对与w更喜欢w',w'相对于m'更喜欢m。那么(m,w')是一个不稳定对(instability)
一个匹配是稳定的要满足两个条件(1)它是完美的(2)在该匹配中没有不稳定的对(instability)
注:对于通过一种情况可能会有多种稳定匹配的方式。
算法设计:
initially all m belongs to M and w belong to W are free
while there is a man m who is free and hasn't proposed to every woman
choose such a man m
let w be the highest-ranked woman in m's preference list to
whom m has not yet proposed
if w is free then
(m,w) become engaged
else w is currently engaged to m'
if w prefers m' to m then
m remains free
else w prefers m to m'
(m,w) become engaged
m' become free
endif
endif
endwhile
return the set S of engaged pairs
算法分析:
view:
(1)w开始进入配对状态直到她收到第一男人的求婚,而且与她配对的男人会越来越好(根据她的喜爱列表)
(2)男人求婚的对象越来越差(根据他的喜爱列表)
(3)G-S算法至多进行n^2次遍历while循环后结束
(4)在算法执行过程中的某点m是单身,那么存在一个他还没有求过婚的女人
proof:
假设存在一个m是单身但是已经向每一个女人求过婚,根据(1),我们知道每一个女人已经配对完成,那么必须需要n个男人与她配对,
但是总共只有n个男人,而且m没有配对,所以矛盾产生了
(5)算法执行结束后返回的集合S是一个完美匹配
proof:
假设算法执行结束后仍有一个男人m是单身,则m肯定已经向每一个女人求婚过,否则while循环不会退出。根据(4)中的矛盾,不存一个男人是单身而且已经向每一个女人求婚过,所以矛盾产生了
(6)算法执行结束后返回的集合S是一个稳定匹配
proof:
S是一个稳定匹配有两个条件,一个是它是一个完美匹配,另一个是它是一个不存在不稳定对的匹配。
在(5)中我们已经证明算法执行结束后返回的集合S是一个完美匹配,接下来,我们只要证明S中不存在不稳定对即可。
假设S中存在不稳定对(m,w),(m',w'),其中
m相对与w更喜欢w',并且w'相对于m'更喜欢m
那我们问一个问题:m在执行过程中有没有向w求过婚?
如果没有,那么在m的喜爱列表中,w必须高于w',这与我们的假设矛盾;
如果有,那么意味着m被拒绝了因为w'当前的配对者m''高于m,但是w'最后的配对者是m',说明m'在w'的喜爱列表中高于m'’,也就是m'高于m,这与我们的假设矛盾。
有效伴侣:如果存在一个稳定匹配包含一个配对(m,w),那么w是m的一个有效伴侣
最佳有效伴侣:如果w是m的有效伴侣,而且在m的喜爱列表中没有一个是m的有效伴侣的女人等级比w高,那么w是m的最佳有效伴侣
用best(m)来表示m的最佳有效伴侣
(7)用S*来表示集合{(m,best(m));m 属于M}
每一个G-S算法执行得到的结果在集合S*中
proof:
假设在一个G-S算法的执行过程E中,一个男人没有和他的最佳有效伴侣进行配对。
因为男人是按照他的喜爱列表递减进行求婚的,所以在执行过程E中他一定被他的最佳有效伴侣拒绝过。
考虑在E中,m是第一个被他的有效伴侣w拒绝的男人,再次因为男人是按照他的喜爱列表递减进行求婚的,所以w一定是m的最佳有效伴侣。
m被w拒绝有两种可能,一个是w现在的配对者更有好感而拒绝m,另一个是w切断了与m的联系而接受了另一个男人m’的求婚因为相对于m,w更喜欢m‘
因为w是m的一个有效伴侣,那么存在一个稳定匹配S' 包含匹配对(m,w),那么在稳定匹配S’中,假设m‘与w'配对
因为在E中,m是第一个被有效伴侣拒绝的人,所以m’没有被拒绝过,就与w进行了配对。因为m‘是按照自己的喜爱列表递减进行配对的,而且w’也是m'的有效伴侣,那么m'相对与w'更喜欢 w,而且我们早已知道w相对于m更喜欢m',那么在稳定匹配S'中(m',w)是一个不稳定对。这与S'是一个稳定匹配相矛盾。
最差有效伴侣:m是w的最差有效伴侣如果m是w的有效伴侣,而且没有一个是w有效伴侣的男人排名比m低。
(8)在稳定匹配S*中,每一个女人和她的最差有效伴侣配对。
proof:
假设在稳定匹配S*中包含(m,w),而且m并不是w的最差有效伴侣。
那么存在一个稳定匹配S'包含(m',w)而w相对于m'更喜欢m,
在S'中m与w'进行配对,而w是m的最佳有效伴侣,所以m相对于w'更喜欢w
所以在S'中,存在一个不稳定对(m,w),产生了矛盾。