单身狗给单身狗安排婚姻要不得
如果您有妹纸的话当我没说QAQ
稳定婚姻问题是一类特殊的二分图匹配问题,具体问题情境如下:
有\(n\)名单身男子和\(n\)名单身女子,每个人都对其他的所有异性有一个喜爱度排序记作\(1-n\),\(1\)表示最喜欢,\(n\)表示最不喜欢,依次递减,现在要安排出\(n\)对情侣,使得对于任意一对非情侣的男女,他们都认为互相是更好的选择而非现在的情侣(这样的我们称作非稳定的婚姻)。例如下面这种情况
|\(1(A,B)\)|\(A(1,2)\)|
|\(2(B,A)\)|\(B(2,1)\)|
其中用数字表示男子,字母表示女子,括号里的人从前到后好感依次递减,假设我们安排两对婚姻\(1-B,2-A\),对于后者,因为对于\(2\)而言,\(B\)的选择比当前的\(A\)好,同样对于\(B\)而言,\(2\)的选择比当前的\(1\)好,于是\(2\)和\(B\)就会产生私奔的可能性,所以我们称这种婚姻是不稳定的
对于这样的一类问题,我们如何求解呢?
一个最简单的思路是:我们先任意安排\(n\)对婚姻,如果此时有两人产生了私奔的意愿就将他们连起来,剩下的依次类推
然而这种做法的话最后会产生循环,在此就不举例了
还有一种做法是由美国数学家 David Gale 和 Lloyd Shapley 于1962年发明的。在该算法中,所有单身的男孩子将一轮一轮的追求自己所喜爱的女生。具体的,在第一轮中,我们让所有的男孩子追求自己最喜爱的女生,如果一名女生被多名男子同时追求的话,她会选择这之中她最喜欢的男生。这一轮结束时,可能会出现一部分男生没有找到配偶,那么将进入第二轮,他们将追求自己第二喜欢的女孩子,注意如果一名之前已经有配偶的女孩子被追求且女孩子更喜欢新的男孩子的话,她将会和原配偶分手转向新的男子,这名被抛弃的男子只能加入新一轮的追求中……如此往复直到形成了\(n\)对配偶
我们从两个方面来证明该算法的正确性
1)一定不会出现最后仍有单身的情况(即保证有解),若一名男子到最后仍为单身,那么前提就是他已经追求了所有的女子,其中一定包括那名单身女子,而女子一旦被追求过了就不会再单身,这样的话就一定不存在一名女子和这名单身男子相配了,这显然是不符合实际的
2)这样的解一定是最优的:男子的配偶越来越差,而相反的女子的配偶越来越好,并且女子交换配偶一定是当她认为当前的男子更好的时候,也就是说两人结为配偶时一定是“认为彼此就是最适合的”才会结为配偶
这个算法的时间复杂度是\(O(n^2)\)的,和匈牙利算法一样