问题背景:
n个男生和m个女生进行匹配约会,当然一个男生至多和一个女生约会,一个女生也至多和一个男生约会,并且每个男生心中都有一个对女生的排名表,即表示了这个男生更愿意与哪个女生约会,不同男生的排名表不一定相同,每个女生也都有一个对男生的排名表。现在要求你求一个匹配,这个匹配不含 不稳定因素。
不稳定因素:一个男生A,一个女生B,A与A‘匹配,B与B’匹配,但A更愿意与B匹配,B也更愿意与A匹配,具有这种性质的(A,B)就被称为不稳定因素。
数学模型:
两个点集:M,W,M={m1,m2,m3……,mn},W={w1,w2,w3……,wm},M和W的交集为空集,记M*W为M与的笛卡尔积,也就是所有(m,w)形成的二元有序对所构成的集合。匹配S为M*W的子集,且满足每个M的元素和每个W的元素至多出现在S的一个有序对中。
每个m对所有的w都有一个排名,每个w也对所有的m有一个排名。
稳定匹配是不包含不稳定因素的匹配。
不稳定因素:是一个有序对(m,w‘),且(m,w),(m‘,w‘)属于匹配S,但m对w‘的排队(m所认为的w‘的排名)高于m对w的排名,且w对m的排名高于m对w‘的排名,这样(m,w‘)就是一个不稳定因素。
稳定匹配集求解算法:Gale-Shapley算法
初始,所有人都是自由的,称所有人的状态为自由。一个男生m向他的排名表上排名最高的女生w发起邀请,待所有男生都发送完邀请后,女生开始筛选邀请,即挑选她认为的排名最高的男生,二人的状变为约会。
然后那些仍处于自由状态的男生,按照他的排名表 顺序 邀请下一个人(也就是说,如果一个男生上一次邀请了排名为i的女生,这次他将邀请排名为i+1的女生),不管他所邀请的人是否处于约会状态。待所有自由状态的男生发送完邀请后,女生再次筛选邀请。重复此过程,直至所有男生都不再发送邀请,这时所得的匹配即为稳定匹配。
算法的有穷性:
因为一个男生不会邀请同一个女生两次,邀请次数最多为N*M时算法一定结束。
另一种思路:让人数少的集合表示男生,人数多的集合表示女生,即N<=M;假设存在一个男生邀请了M次后仍然没有匹配结果,那么此时M个女生都已经匹配(否则这个男生会被没有匹配结果的女生所接受),又每个女生的匹配对象不相同,男生中至少有一个人没有匹配对象,所以M<N,与假设相悖,所以假设错误,所有的男生都已经匹配。
正确性证明:反证法
假定结束时仍存在不稳定因素(m,w‘),此时m与w匹配,m‘与w‘匹配。分两种情况考虑:
第一:m在邀请w之前邀请过w‘,但w‘的最终匹配对象变成了m‘,这就说明了w‘认为m‘更加优秀,与我们的假设相悖。
第二:m没有邀请过w‘,也就直接说明了m认为w‘更加优秀,与我们的假设相悖。
所以,假设错误,不存在不稳定因素。
结果的唯一性:
在选定了发起邀请的集合后,算法执行的结果是一定的。
定义匹配状态:执行完某轮邀请筛选后男女生的匹配状况。
证明:
状态转移的唯一性。开始所有人都处于自由状态,匹配状态唯一。进行第一轮,每个男生所邀请的对象都是确定的(他们排名表上的第一名),所以每个女生所接受到的邀请都是一定的,那么她们所接受的邀请也是一定的(她们排名表上靠前的那个)。所以进行完第一轮后匹配状态是一定的,然后第二轮中发送邀请的男生确定(仍处于自由状态的男生),他们邀请的对象确定(排名表上的下一名),因而第二轮结束后匹配状态也一定。重复下去,结束时匹配结果就是确定的。因而该算法执行结果唯一(前提:选定了发出邀请的一方)。
G-S性质:发起邀请的一方在算法执行过程中其匹配对象越变越差,接受邀请的一方在匹配过程中其匹配对象越变越好。
注意:稳定匹配存在多种,G-S算法求出的只是其中一种。但G-S算法所求出的匹配对发出邀请方最为有利,对邀请接受方最为不利。
定义:
有效伴侣:若存在一个稳定匹配使得m是w的匹配对象,则称m是w的有效伴侣。
最佳有效伴侣:在m的所有有效伴侣中m最满意的伴侣w为最佳有效伴侣,记作best(m)=w;
证明:G-S算法所求出的匹配中,邀请发出方中每个人都与其最佳有效伴侣相匹配。
假设G-S算法执行结束后存在男生没有和最佳有效伴侣组合,这样的男生叫做倒霉男,倒霉男都被自己的最佳有效伴侣拒绝过,取其中第一个被最佳有效伴侣拒绝的人,记为m,其最佳有效伴侣为w,记算法结束后w和m‘组合。又w是m的最佳有效伴侣,所以存在一个稳定匹配S’,m和w组合,假设在这个匹配中m‘和w‘组合,所以w‘也是m‘的有效伴侣。
第一种情况:对m‘来说w‘优于w,那么在S中,在m被w拒绝前,m‘被w‘拒绝,这也就说明了m‘早于m被有效伴侣拒绝,那么m‘一定更早的被最佳有效伴侣拒绝了,这与m是第一个被最佳有效伴侣拒绝的相矛盾。
第二种情况:对m‘来说w由于w‘,那么在S‘中,m‘,w形成不稳定因素,这与S’是一个稳定匹配矛盾。
综合这这两种情况,G-S算法中不存在倒霉男。
扩展:该算法在一对多的时候也适用,即X部可以匹配多个或者Y部可以匹配多个,但当X部和Y部同时可以匹配多个点的时候不适用。
假设Y部点可以匹配多个点。则以X部点作为发出邀请方,Y部点在接收邀请时,检测是否能优化自身目前的选择,(优化:将一个好感度比当前邀请低的舍弃,使得整体的好感度上升)。
资料:http://www.icourses.cn/web/sword/portal/shareDetails?cId=3271#/course/chapter 第四章 时间:39:30 PS:这个老师讲的更加通俗易懂
比较详细的PPT:https://www.docin.com/p-2042973211.html 大力推荐!!!!!!
原文地址:https://www.cnblogs.com/dialectics/p/12373814.html