稳定婚姻问题指的是一定数量的男士按照自己的喜好程度对相同数量的女士进行排序,然后进行配对形成稳定婚姻关系。这种配对关系对双方都是比较满意的。
一、基本概念
为了介绍稳定婚姻问题中的“稳定”的意思,我们先介绍一下什么是“不稳定”:在当前所有匹配中存在A男士和B女士,他们没有配对,但是比起当前的伴侣,他们更加喜欢对方。不存在这种情况的配对就是稳定婚姻。稳定婚姻问题就是要根据给定的男士和女士的优先选择,求出一个稳定的婚姻匹配。
例如,男士有小王、小李、小赵,女士有翠花、舒敏、月儿,下面是他们各自对异性的喜好排序情况,求出一个稳定婚姻匹配。
二 、使用方法及步骤
步骤一:从自由男士中选择一个,向他的优先列表中的没有拒绝过他且优先权最高的女士求婚,如果该女士未配对,则接受,如果该女士已配对,则女士比较该自由男士和当前与她配对的男士的优先权,选择优先权高的男士;
步骤二:继续下一次配对。
三 、代码
伪代码
Initialize all men and women to free
while there exist a free man m who still has a woman w to propose to
{
w = m's highest ranked such woman to whom he has not yet proposed
if w is free
(m, w) become engaged
else some pair (m', w) already exists
if w prefers m to m'
(m, w) become engaged
m' becomes free
else
(m', w) remain engaged
}
上述伪代码叫做GALE-Shapley算法
翻译伪代码
假设m代表男人,w代表女人
1、初始化假设所有男女都未配对
2、当有一位男生未配对同时有一位女士未被追求(或者说未被提出配对要求)
执行循环
{
w=男人首先选择心目中的最佳人选(女人),同时这位女士未被追求(或者说未被提出配对要求)
如果这个女士暂未配对
那么使(m,w)配对
否则 已经存在配对(m’,w),通俗地讲就是人家有男朋友了
如果 这个女士更喜欢m,而不是m’,
那么(m,w)就重新配对,
m’就自由了,也就是陪抛弃了
否则 (m’,w)任然配对
}
下面用代码实现下
# Python3 program for stable marriage problem
# Number of Men or Women
N = 4
# This function returns true if
# woman 'w' prefers man 'm1' over man 'm'
def