GaleShapley算法

 Gale-Shapley算法
来源: 刘进的日志

Gale-Shapley算法

近来学习了很有趣的Gale-Shapley算法,又名求婚-拒绝算法。

n个男人和n个女人相互配对。每个男人m对所有的女人排名,如果m给w的排名高于w’,就说m偏爱w超过w’。把m的按顺序的排名作为他的优先表。类似的,每个女人也对所有的男人排名。要求求他们的一个稳定匹配。

所谓稳定匹配是这样的:给定一个完美匹配S,如果在S中存在两个对(m,w),(m’,w’),其中m更爱w’,且w’更爱m,那么配对(m,w’)就是一个不稳定的因素,他们原来的婚姻都将不稳定。我们的目标就是建立一个不含有上述不稳定因素的配对集合。

算法如下:

 

初始所有的m∈M和w∈W都是自由的

While 存在男人m是自由的且还没对n个中每个女人都求过婚

   选择一个这样的男人m

   令w是m的优先表中m还没求过婚的最高排名的女人

   If  (w是自由的)

     (m,w)变成约会状态

   Elseif(w当前与m’)约会

          If  w是更偏爱m’then

              m保持自由

          Else w更偏爱m  then

              (m,w)变成约会状态

               m’变成自由

          endif

    endif

Endwhile

输出已约会的配对的集合,即为稳定匹配。

 

算法分析得知,这个算法带有某种不公平性,即如果男的求婚,女的就是不幸的;而如果女的求婚,男的也是如此。例子如下:

有这样的优先表:

m更加偏爱w甚于w’,即在m的表中w排在w’的前面

m’更加偏爱w’甚于w

w更加偏爱m’甚于m

w’更加偏爱m甚于m’

那么执行这个算法将得到(m,w),(m’,w’)这样的稳定配对,然而女人的偏爱被忽略了。w是更加偏爱m’的,w’更加偏爱m的,但是她们都没能得到满意的。
原文地址:https://www.cnblogs.com/acSzz/p/2728461.html