稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem

时间:2022-12-09 09:48:20

稳定匹配问题Stable Match Problem

转自:http://hi.baidu.com/revinfly/item/e48b6fbab5145bf662388e95

问题的提出
        《算法》的第一堂课讲了关于稳定匹配(Stable Matching)的问题,这是一个由现实情况引出的一个很有趣的问题。假设说现有一堆学生准备到一堆公司实习,每个学生心目中对这些公司都有一个喜好排 序,但为了保证成功率,每个学生都向所有的公司投递了申请。公司收到学生申请后,根据各自的要求和喜好对所有学生也有一个满意度排序,并依据排序向一部分 学生发出了offer,现在假设A公司向学生X发出了offer,由于各个公司的进度不一样,在学生X接到A公司的offer后他又收到了B公司的 offer,相较而言,X更喜欢B公司,于是他决定放弃A公司的offer转投到B公司门下。由于X的离去,A公司就少了一个实习生,于是它又向待聘的学 生Y发出offer,学生Y于是放弃已经接受的公司C,转投到公司A门下,那么就这样情况开始连续失控….
   以上混乱情况的出现,在于公司和学生之间没有一个要求保持现状的强制体系,用专业的话语来讲也即是该过程不是自强化(self-reinforcing)的。大家都可以根据自己喜好随时改变自己之前做出的决定,于是整个情况开始不可控制。
   在上述情况下,提出了我们的问题:给定一组雇主E和申请人A之间的优先权,我们能否把A合理的分配给E,以使得对于每个雇主E和未分配为E工作的申请人A之间,以下两种情况至少存在其一:
1、E对于它接受的所有人都比A满意
2、A对于为他分配的公司比E满意。
   如果上述情况成立,那么这种分配就是稳定的,个人兴趣将制止申请人A和公司E之间出现幕后交易。
这里,我们引出几个概念:
1、不稳定对(unstable pair):在以下情况同时存在的时候,申请人x和公司y是不稳定的:
A、相对已经分配好的公司,x更喜欢y;
B、相对其中一个已经录用的学生,y更喜欢x。
2、稳定分配(stable assignment):不存在不稳定对的分配
经典的男女配对问题
   OK!马上就将进入我们今天的经典问题,给定一组男人和一组女人,每个人在心目中都对所有的异性有一个倾慕度排序,从最喜欢到最不喜欢依次排序1、2、3。现在给出问题,如何对这些男女进行配对使得在分配好后不出现偷情的现象。先看下面:

稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem

图 2

    很明显,我们会发现这样的组合是不稳定的,因为在这样的组合下Xavier—Amy或者Xavier---Bertha都有机会会出现私奔。
    OK!现在让我们将他们重新分配如下:X-A, Y-B, Z-C,如图3所示:

    问如何将这四个人两两组合得到稳定匹配呢?我们会发现无论如何组合都不会出现稳定的匹配:若A-B, C-D则B-C unstable、A-C, B-D则A-B unstable、A-D, B-C则A-C unstable!
    所以我们可以得出,在最佳室友这个问题上,稳定匹配并不总是存在的!
G—S算法提出
    经过以上的分析,我们可以给出男女匹配的算法了,这个算法叫做Propose-and-reject algorithm(求婚-拒绝算法,也叫G-S算法)【由Gale和Shaply于1962年提出】,算法的目的即使找出一个稳定匹配,算法如下:
Initially all mÎM, and w Î 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' becomes free
         Endif
     Endif
Endwhile
Return the set S of engaged pairs
    对以上算法进行分析,我们会发现两个现象:1、女人从接到第一个求婚起就开始一直保持约会的状态,并且她约会的对象会越来越好(从她的排序表来看);2、男人求婚的对象(女人)会越来越差!
算法证明
下面,我们对这个算法的正确性证明如下:
1、算法的有限性——算法最多会在执行完n2次while循环的时候结束:每次while循环,一个男人向一个女人求婚,因为一共有n个男人和n个女人,所以最多只有n2次求婚。
2、算法的完美性——所有的男女都进行了配对:(反证法)假设男人M在算法结束后没有配对,那么相应的肯定会存在一个女人假设为W也没有配对,那么可以肯 定女人W从来都没有收到求婚的请求,但是根据现象2,男人M会向所有的女人求婚一直到有人接受,那么矛盾就出现了,于是假设不成立,命题得证。
3、算法的稳定性——不存在不稳定对:(反证法)假设在GS配对里,Amy-Yancey、Bertha-Zeus分别是2对,假设A—Z是不稳定对,那 么出现这种现象有两种可能:a、Z从来没有向A求婚,根据现象2,得出Z会更喜欢他的GS对象,而不是A,那么A—Z就是稳定的;b、Z向A求过婚,但是 被A拒绝了(可能是当场拒绝,也可能是后来A遇到更好的抛弃了Z),那么也可以得出A更喜欢她的GS对象,而不是Z,所以A—Z也是稳定的。所以在任何情 况下,A—Z都是稳定的,假设不成立,命题得证。
总结
稳定匹配问题:即给定n个男人和n个女人和他们对异性的喜好排序表,如果可能,求出他们稳定的匹配。
Gale-Shapley算法:求出问题的最佳匹配对。
后续问题
1、如何有效的实现G—S算法?
2、如果有多个稳定匹配对,G—S算法选择的是哪一个?
上述问题将在下篇得到解答,呵呵。

稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem

图4

稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem

 图 3    好了,现在这样分配后,会发现男男女女们虽然对自己的配偶不一定满意,但是却无论如何找不到和他(她)情投意合的私奔对象,于是我们的分配也稳定了!

最佳室友分配问题
    牵红线的问题解决了,那我们会想到对于这类似的问题,我们的稳定匹配是不是总是存在呢?!答案是否定的!请看下面的最佳室友问题:话说有A、B、C、D四个学生,学校规定2个人一间寝室,4个人理想的舍友排序如下:

稳定匹配问题Stable Match Problem -- 稳定婚姻问题 Stable Marriage Problem                                            图 1
     概念1:完美匹配(perfect matching):每个男的都分到一个女的,每个女的也有一个男的,并且实行严格的一夫一妻制。
    概念2:稳定性(stability):对于分配好的每个人都没有机会通过私自组合(私奔)来破环我们的分配。例如:假设在我们的分配中,m1和w1是一 对,m2和w2是一对,但是在他们排序表中,相较w1和w2,m1更喜欢w2,同时w2也更喜欢m1,而不是给她分配的m2,这样就出现了w1和m2更情 投意合,如是他们私奔了。这样的分配就是不稳定的了。
    概念3:稳定匹配(stable matching):没有不稳定对(unstable pair)的完美匹配。
    现在我们再回到图1,假设给出以下组合,问是否稳定?X-C, Y-B, Z-A,即如图2所示: