stable marriages(稳定婚姻) problem
稳定婚姻问题,from ubc-vsp23,感觉确实是一个有趣的问题。
问题
问题本身:有n个男孩,n个女孩,每一个男孩有他对于所有女孩的排名,每一个女孩也有她对于所有男孩的排名,那么如何将他们配对呢?别tm说什么为什么一定要配对( 图示:
首先既然是稳定婚姻问题,我们得先定义出来什么是稳定,在婚姻问题中我们对稳定的定义是:不存在这样两队夫妻:她们彼此更喜欢另一对的另一半。emmm有点抽象,就是说男一和女一在一起,男二和女二在一起,如果男二和女一相互喜欢,那么这里的婚姻是不稳定的,不能出现这种情况。当然这样定义肯定会出现一个问题,这是第一个问题:每一个喜好列表的人都能找到稳定的配对吗?或者说,每一对情侣能找到一个保证稳定不分手的情况吗?这里有一个算法提出了一个解决方案:Gale-Shapley算法
Gale-Shapley算法
算法步骤如下:
- 初始时,所有的男性和女性都被标记为”单身”状态。
- 从未与女性提出过求婚的男性中,选择一个男性。
- 对于这个男性,按照他对女性的偏好顺序,从未被求婚过的女性中选择一位女性。
- 如果这位女性是”单身”状态,则接受男性的求婚,两人形成婚姻配对。
- 如果这位女性已经与其他男性形成婚姻配对,比较当前男性和已婚男性对女性的偏好,如果当前男性更受女性喜欢,则女性与当前男性解除婚姻关系,接受当前男性的求婚。
- 如果这位女性拒绝当前男性的求婚,男性继续尝试向下一位女性提出求婚。
- 重复步骤2-6,直到所有男性都提出过求婚。
这确实是一个很有意思的问题,多想想可以多理解一点东西。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 si1v3r的狗窝!