稳定匹配问题学习小记
问题
有\(n\)个男人,\(n\)个女人。每个男的心中都有对这\(n\)个女的优先级顺序,每个女的心中也有对这\(n\)个男的优先级顺序。
现在要找到一种匹配方式,使得不存在一对男女,互相认为对方比自己当前匹配的对象优。
算法
每个男人按照优先级顺序降序尝试向女人求婚,尝试过的不会再尝试。
每次找到一个单身男人(找不到结束),尝试跟下一个没有尝试过的女人求婚。
如果女人单身或者觉得当前配对对象不如这个男人,就把对象换成当前男人。
性质
有穷性:算法一定在\(n^2\)次内结束。
完美性:最后不会有单身男女。
稳定性:
如果存在\(B_0,G_0\),当前匹配了\((B_0,G_1),(B_1,G_0)\),但是\(B_0,G_0\)都觉得对方比当前对象更优。因为\(B_0\)在向\(G_1\)求婚之前,先向\(G_0\)求婚;但是\(G_0\)拒绝了它,因此\(B_1\)应该比\(B_0\)对于\(G_0\)更优,矛盾。
对于所有男性最优(最优定义为,对于某个男性而言,在所有的稳定匹配方案中,最优的对象)
假设\(B_0\)的最优匹配是\(G_0\),然而算法流程中\(B_0\)被\(G_0\)拒绝了,并且也是第一个被最优对象拒绝的悲惨的男人。假设此时\(G_0\)匹配到了\(B_1\)。
因为\(B_0\)向\(G_0\)表白过但后面被拒绝了,所以在\(G_0\)心目中\(B_1\)比\(B_0\)优。
因为\(B_0\)是第一个被最优对象拒绝的,所以对于\(B_1\)来说,\(G_0\)不会劣于他的最优对象。
由定义得,存在一种稳定匹配的方案,最终\(B_0,G_0\)配对,\(B_1\)匹配的对象不优于\(B_1\)的最优对象。于是对\(B_1\)而言,\(B_1\)匹配的对象劣于\(G_0\);又因对于\(G_0\)而言,\(B_1\)比\(B_0\)优。此时不稳定。
对于所有女性最劣:
如果女性\(G_0\)没有匹配到最劣匹配\(B_0\),而是匹配到了\(B_1\)。
对于\(G_0\)来说\(B_1\)比\(B_0\)更优。
又因为男性最优,所以对于\(B_1\)来说\(G_0\)是最优的。
由定义得,存在一种稳定匹配的方案,最终\(B_0,G_0\)配对。然而在这个方案中,对于\(G_0\)来说\(B_1\)更优,对于\(B_1\)来说\(G_0\)最优,此时不稳定,矛盾。
小细节(YYT提醒):在实现的时候,不能在外面循环\(n\)次,然后对里面的每个单身男人进行操作。因为可能有的男人当前不单身,但后来单身了,最终没有尝试过求婚过所有女人。