匹配问题

匹配问题

匹配问题中的重要概念

  1. 匹配,假设有男人的集合M和女人的集合W,每个男人向女人W求婚,并且两个人成功组成一对,就叫做匹配
  2. 完美匹配,假设集合M和集合W的数量相同,都是n,即n个男人,n个女人,如果使用一种算法,最后所有的男人和女人成功匹配,没有一个单身的男人或者单身的女人,那么就叫做完美匹配
  3. 不稳定匹配,假设完美匹配形成了集合S,其中男人 m i m_i mi和女人 w j w_j wj匹配形成 ( m i , w j ) (m_i, w_j) (mi,wj),而另外又有男人 m k m_k mk和女人 w l w_l wl匹配形成 ( m k , w l ) (m_k, w_l) (mk,wl),如果S的匹配中,与 w j w_j wj比起来, m i m_i mi更喜欢人妻 w l w_l wl,与 m k m_k mk比起来, w l w_l wl更喜欢 m i m_i mi,那么没有什么可以阻挡 m i m_i mi抛弃当前妻子 w j w_j wj而与 w l w_l wl结合,形成新的一个匹配 ( m i , w l ) (m_i, w_l) (mi,wl),这就说明形成的匹配S是一个不稳定的匹配,因为根据喜欢因素,这些匹配会被打破而形成新的匹配,包含这种不稳定因素的匹配叫做不稳定匹配
  4. 稳定匹配,假如最终形成的完美匹配结果是S,里面所有的女人都对当前的男人满意,或者男人对当前配对的女人满意,那么就不会出现打破原有组合形成新的匹配的可能性,此时匹配S叫做稳定匹配
  5. 有效伴侣,假如在男人集合M和女人集合W进行匹配,得到集合S,S中包含(m,w),那么说明w是m的有效伴侣,同样的,m也是w的有效伴侣。
  6. 最佳伴侣,稳定匹配可能不唯一,假如稳定匹配集合S中包含匹配(m,w), 而其他任何稳定匹配中包含 ( m , w i ) (m,w_i) (m,wi),而m对所有女人的喜好从高到低排序过程中,w始终在 w i w_i wi前面,那么说明w是m的最佳伴侣,表示为best(m)。

GS算法

为了使得这种双方都有需求的匹配,最终形成一个完美的、稳定的匹配,Gale和Shapely两位科学家提出了GS算法(以他们名字首字母命名)。该算法的伪代码如下:

while(集合M中存在一个单身男子m并且该男子没有向所有女性求婚过)
	m向他没有求婚过的最心仪的女子w求婚;
	if(w处于单身状态)
		组成匹配(m,w)else if(w处于匹配状态)
	{
		if(相比w的现任m1,w更加心仪m)
			w抛弃m1,和m组成匹配(m,w)
		else 
			w拒绝了m的求婚,m仍然单身。
	}
}

GS算法的while循环,最多执行 n 2 n^2 n2次,即每个m都想对心仪的女性从高到低依次求婚。进行GS算法时,一个较好的数据结构是采用两种不同的矩阵。矩阵的第i行是一个数组,数组依次从低到高罗列了男子心仪的女生编号。如下组织形式依次列出了0、1、2三位男子最心仪的三位女生,依次心仪程度依次从高到低排列。例如:

男子心仪女生1心仪女生2心仪女生3
0MarryPennyMoon
1MarryMoonPenny
2PennyMoonPenny

女生则是通过索引可以直接查找对男子的评分,方便比较求婚的男子是否比当前匹配的男子更令她心仪。

女子0号男子1号男子2号男子
Marry10分7分5分
Penny4分5分10分
Moon8分7分6分

按照这种数据结构组织形式,GS算法的复杂度为 O ( n 2 ) O(n^2) O(n2);

GS算法的几个特性

  1. 如果算法执行中,某个男子是单身,那么一定存在一个他还未求过婚的女子。(n对男女,某男单身,一定存在某女单身)

  2. GS算法执行结束时得到的匹配集合S一定是一个完美匹配。(GS执行结束条件是不存在单身男子)

  3. GS算法执行结束得到的S是一个稳定匹配。(反证法证明)

  4. GS算法执行结束后,每个男子都与其最佳伴侣匹配到一起,即形成集合 S ∗ S^* S = { ( m , b e s t ( m ) ) ∣ m ∈ M (m,best(m)) |m \in M (m,best(m))mM }

    • 假设GS算法执行中,首次出现了一个悲催男子 m i m_i mi,居然被自己的最佳伴侣 w i w_i wi给拒绝了。而这说明 m i m_i mi w i w_i wi求婚时 w i w_i wi更加喜欢与 w i w_i wi当前的约会对象 m j m_j mj,或者是原本 w i w_i wi m i m_i mi匹配,但 m j m_j mj w i w_i wi求婚时, w i w_i wi果断抛弃了 m i m_i mi而选择了 m j m_j mj
    • 假设存在另外一个稳定匹配 S 1 S_1 S1,在这里面 m i m_i mi w i w_i wi匹配到一起, m j m_j mj w j w_j wj匹配到一起。上述GS算法运行结束后 m j m_j mj选择和 w i w_i wi匹配到一起,而没有选择 w j w_j wj,GS算法中男人每次都会选择当前没有求过婚的优先级最高的女性求婚,这说明 m j m_j mj喜欢 w i w_i wi多过喜欢 w j w_j wj
    • 上面的论述得到两个结论.(1) w i w_i wi喜欢 m j m_j mj多过喜欢 m i m_i mi。(2) m j m_j mj喜欢 w i w_i wi多过喜欢 w j w_j wj。但是( m i , w i m_i,w_i mi,wi)和( m j , w j m_j,w_j mj,wj)属于稳定匹配。结论和假设相互矛盾。因此说明GS算法执行结束后男子都和最佳伴侣匹配到一起。
  5. GS算法执行结束后,每个女子都与其最差的有效伴侣匹配到一起。

    • 假设GS算法结束后存在某个女子,并没有与最差的有效伴侣匹配到一起。此时假设 m i m_i mi w i w_i wi匹配到一起,并且 m i m_i mi不是 w i w_i wi的最差有效伴侣。那么必然存在另外一个有效匹配,其中 m j m_j mj w i w_i wi匹配到一起, m i m_i mi w j w_j wj匹配到一起。上述假设可知(1) w i w_i wi喜欢 m i m_i mi多过喜欢 m j m_j mj在GS算法结果中假设 m i m_i mi w i w_i wi匹配到一起而没有选择 w j w_j wj,可以得到(2) m i m_i mi喜欢 w i w_i wi多过喜欢 w j w_j wj。两个结论恰好与假设存在包括( m j , w i m_j,w_i mj,wi)( m i , w j m_i,w_j mi,wj)的稳定匹配矛盾。因此原命题正确。
  6. GS算法中求婚的一方可以得到最佳有效伴侣,而被求婚的一方只能得到最差的有效伴侣。

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/t46414704152abc/article/details/82756590
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞