The Gale-Shapley Algorithm 学习笔记

本文是关于Gale-Shapley算法的学习笔记,该算法解决了稳定婚姻问题。首先介绍了Gale老教授在数理经济学的贡献,然后详细阐述了算法的背景和步骤:基于男女双方的偏好列表,通过不断优化匹配来达到稳定性。文章最后提到,这个算法可能在男性视角下导致满意度不均,并提出是否能通过机器学习自动完成偏好排序的疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在认真专研匹配算法,同学给推荐了这个算法,感觉不错。不过,先前有很多大神已经写过这个算法的介绍了,我这当晚辈的,迟迟不敢动笔怕班门弄斧。但是呢?如果有前辈看我写得一塌糊涂看不下去了给我指点一点两点,那就是真的赚到啦!

首先看看德高望重的David Gale老教授。Gale老教授研究的领域主要有数理经济学、博弈论和凸分析。

他在数理经济学中的主要贡献有:1.the existence of competitive equilibrium(竞争均衡的存在性);2.the solution of the n-dimensional Ramsey problem(n维拉姆齐定价,垄断厂商的定价) 3.the theory of linear programming and linear inequalities(线性模型和编程领域)

1962年的时候Gale和Lloyd Shapley撰写的关于 Stable Marriage Problem的论文是“the first formal statement and proof of a problem that has far-reaching implications in many matching markets”.原文链接如下:College admissions and the stability of marriag

### Gale-Shapley算法的时间复杂度和空间复杂度 #### 时间复杂度分析 Gale-Shapley算法用于解决稳定婚姻问题,在最坏情况下,该算法的时间复杂度为O(n^2),其中n表示参与匹配的人数。这是因为每位参与者最多会被拒绝n次,并且每次被拒绝都会触发一次提案操作。因此,总的提案次数不会超过n * n = n^2次[^4]。 对于每一次提案过程中的比较与更新操作而言,这些基本运算可以在常数时间内完成。所以整个算法运行时间主要取决于总提案数量,即O(n^2)。 ```python def gale_shapley(men_prefs, women_prefs): free_men = set(range(len(men_prefs))) engagements = {} while free_men: man = free_men.pop() for woman in men_prefs[man]: if woman not in engagements or prefers(woman, man, engagements[woman], women_prefs): engagements[woman] = man break return [(woman, man) for woman, man in engagements.items()] ``` 此Python伪代码展示了如何实现Gale-Shapley算法的核心逻辑部分。注意这里简化了一些细节以便更好地理解整体流程。 #### 空间复杂度分析 关于空间复杂度方面,由于只需要存储每个人的偏好列表以及当前的配对状态,故所需额外内存大小正比于输入规模。具体来说,如果用数组或链表形式保存每个个体对其它成员偏好的排名,则总共需要大约2*n^2的空间来记录所有人的偏好信息;再加上用来追踪已婚情况的数据结构(如字典),总体上可以认为是线性级别的辅助空间需求——即O(n^2)。 综上所述,Gale-Shapley算法具有多项式级别的时间性能表现和合理的空间消耗特性,这使得其成为求解大规模实例的有效工具之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值