稳定匹配问题学习小记

问题

\(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\)次,然后对里面的每个单身男人进行操作。因为可能有的男人当前不单身,但后来单身了,最终没有尝试过求婚过所有女人。

posted @ 2021-05-05 08:19  jz_597  阅读(110)  评论(0编辑  收藏  举报