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的,但是她们都没能得到满意的。
来源: 刘进的日志
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的,但是她们都没能得到满意的。