GALESHAPLEY算法

合集下载

Gale Shapley 学生最优机制摘抄

Gale Shapley 学生最优机制摘抄

Gale -Shapley 学生最优机制( 本文简称GS 机制) 就具有公平和抗策略的特性,并且相对于其他公平的机制而言,它是帕累托最优的。

GS 机制最早是在大学招生模型中提出来的( Gale and Shapley,1962〔9〕) ,在大学招生模型中,学生和学校都是积极参与人。

Gale 和Shapley 证明,在大学招生模型中稳定匹配总是存在的,并且在所有的稳定匹配中,存在一个匹配对于学生来说是帕累托最优的,一个匹配对于所有学校帕累托最优。

他们提出了达到学生( 学校) 最优稳定匹配的机制,这个机制通过延迟接受学生( 学校) 申请来达到。

由于我们关注的是学生利益,因此考虑学生最优机制,该算法过程如下:第1 轮: 每个学生申报其第一志愿,每个学校根据其偏好将第一志愿报考本校的前qc( qc 为招生名额) 个学生纳入考查名单,拒绝其他学生。

第 2 轮: 上轮被拒绝的学生申报第二志愿,每个学校将第二志愿报考本校的学生和列入考查名单的学生一起比较,将前qc个学生纳入第二轮考查名单。

第k 轮: 上轮被拒绝的学生申报第k 志愿,每个学校将第k 志愿报考本校的学生和列入考查名单的学生一起比较,将前qc个学生纳入第k 轮考查名单。

当没有学生被拒绝,所有学生都分配到最终位置时,该算法结束。

定理1 ( H.Ergin and T.Sonmez,2006〔10〕) : 给定考生的真实偏好以及考生在“波士顿机制”下的显示偏好博弈。

这个博弈的纳什均衡结果与学生最优机制下真实申报偏好所得到的匹配结果是相同的。

定理2 ( Gale and Shapley,1962〔9〕; Balinski and Son-mez,1999〔11〕) : GS 机制帕累托优于其他任何公平机制。

定理3 ( Dubins and Freedman,1981〔12〕; Roth,1982〔13〕) : GS 机制是抗策略的。

定理4 ( Alcalde and Barberà,1994〔14〕) 在高考招生问题中,GS 机制是唯一满足个人理性、公平、没有浪费和抗操纵的学生录取机制。

稳定婚姻匹配问题(Gale-Shapley算法)(转载)

稳定婚姻匹配问题(Gale-Shapley算法)(转载)

稳定婚姻匹配问题(Gale-Shapley算法)(转载)1962 年,美国数学家 David Gale 和 Lloyd Shapley 发明了⼀种寻找稳定婚姻的策略。

不管男⼥各有多少⼈,不管他们各⾃的偏好如何,应⽤这种策略后总能得到⼀个稳定的婚姻搭配。

换句话说,他们证明了稳定的婚姻搭配总是存在的。

有趣的是,这种策略反映了现实⽣活中的很多真实情况。

两对夫妻M1 F2,M2 F1。

M1⼼⽬中更喜欢F1,但是他和F2结婚了,M2⼼⽬中更喜欢F2,但是命运却让他和F1结婚了,显然这样的婚姻是不稳定的,随时都可能发⽣M1和F1私奔或者M2和F2私奔的情况。

所以在做出匹配选择的时候(也就是结婚的时候),我们需要做出稳定的选择,以防这种情况的发⽣。

稳定婚姻是组合数学⾥⾯的⼀个问题。

问题⼤概是这样:有⼀个社团⾥有n个⼥⽣和n个男⽣,每位⼥⽣按照她的偏爱程度将男⽣排序,同时每位男⽣也按照⾃⼰的偏爱程度将⼥⽣排序。

然后将这n个⼥⽣和n个男⽣配成完备婚姻。

如果存在两位⼥⽣A和B,两位男⽣a和b,使得A和a结婚,B和b结婚,但是A更偏爱b⽽不是a,b更偏爱A⽽不是B,则这个婚姻就是不稳定的,A和b可能背着别⼈相伴⽽⾛,因为他俩都认为,与当前配偶⽐起来他们更偏爱各⾃的新伴侣。

如果完备婚姻不是不稳定的,则称其是稳定的。

通过证明,可以得到每⼀个n⼥n男的社团,都存在稳定婚姻的结论。

但是这种情况只在异性的社团中存在。

也就是说在同性的社团⾥⾯,稳定婚姻的存在性将不再被保证。

解决思路如下⾸先选择⼀个单⾝男⽣,他会按照他的喜欢程度对⼀个还没有表⽩过的⼥⽣表⽩。

如果⼥⽣此时处于单⾝状态,则恭喜,他们两⼈将进⼊约会状态。

如果⼥⽣已经有男朋友,则⼥⽣会⽐较当前男朋友与表⽩的男⽣,如果更喜欢表⽩的男⽣,则恭喜,男⽣成功上位,⼥⽣之间的男朋友则进⼊单⾝状态;若⼥⽣还是更喜欢⾃⼰的男朋友,则不好意思,男⽣表⽩失败。

当所有的男⽣都脱离单⾝状态时,此时的约会状态应是稳定的,证明如下:若存在之前描述的不稳定因素,即虽然男⽣i和⼥⽣a牵⼿,但男⽣i对⼥⽣b更喜欢,⽽⼥⽣b发现,相⽐⾃⼰的男朋友j,她更喜欢男⽣i。

盖尔-沙普利算法流程和应用案例

盖尔-沙普利算法流程和应用案例

盖尔-沙普利算法流程和应用案例盖尔-沙普利算法(Gale-Shapley Algorithm),也被称为稳定婚姻算法或者情人节算法,是解决稳定婚姻问题的一种算法。

该算法首先是由David Gale和Lloyd Shapley两位数学家在1962年提出的,用于解决社会经济学领域中的配对问题,后来被应用到人工智能领域中的任务分配问题、交通流分配问题等等。

盖尔-沙普利算法的核心思想是通过迭代,使每个人都选择自己最喜爱的对象,并且这个选择是可交换的,直到所有人都被配对。

算法分为两个阶段:第一阶段,每个男士都要向自己最喜欢的女士求婚,如果女士没有男友,就接受这个男子的求婚;如果女士已有男友,就比较女士已有男友和该男子之间的差异,如果该男子比女士已有男友更合适,该女士就与该男子配对,女士的原男友就成为自由人。

这个过程将一直持续到所有女性都有了伴侣。

第二阶段,男性根据每个女性的新伴侣向次喜欢的女性提出求婚,并将其中没有匹配的女性作为新的迭代对象。

如果已经拒绝了所有的女性,那么这个男士就成为自由人。

此过程将一直进行到男性都有了伴侣。

应用案例:例如,在安排医生和病人之间的预约时,有三个医生和三个病人。

三个医生分别是A、B、C,三个病人分别是X、Y、Z。

假设这三个医生和三个病人之间的相关顺位如下表所示:A: X > Y > ZB: Y > X > ZC: X > Z > YX: A > B > CY: B > A > CZ: A > C > B按照盖尔-沙普利算法,医生A会优先选择病人X,病人X会选择医生A,他们将成为一对。

医生B会选择病人Y,病人Y会选择医生B,他们将成为一对。

医生C会选择病人Z,病人Z会选择医生A,这时病人X成为自由人。

接下来,病人X会选择他次喜欢的医生B,医生B也会选择他次喜欢的病人X,这时他们成为一对。

最后,病人Z会选择他次喜欢的医生C,医生C也会选择他次喜欢的病人Z,他们将成为一对。

稳定婚姻问题和延迟认可算法

稳定婚姻问题和延迟认可算法

稳定婚姻问题和延迟认可算法作者:goal00001111 (高粱)始发于goal00001111 的专栏;允许自由转载,但必须注明作者和出处摘要:延迟认可算法(Gale-Shapley算法)是解决稳定婚姻问题的经典算法,本文用C++来实现Gale-Shapley算法。

文章详细介绍了Gale-Shapley算法的原理和编码思路,给出了一个直接从原理出发的原始算法及其改进版本,并对两个版本进行了比较分析。

关键词:稳定婚姻问题延迟认可算法二维数组以空间换时间稳定婚姻问题问题来自于一场“3分钟相亲”活动,参加活动的有n位男士和n位女士。

要求每位男士都要和所有的女士进行短暂的单独交流,并为她们打分,然后按照喜欢程度,对每一位女士进行排序;同样的,每位女士也要对所有男士进行打分和排序。

作为活动的组织者,当你拿到这些数据后,该如何为男,女士们配对,才能使大家皆大欢喜,组成稳定的婚姻呢?插一句:什么样的婚姻才能称为稳定的婚姻呢?所谓稳定的婚姻,就是指男女结婚后,双方都不会发生出轨行为。

那怎样才能做到双方都不出轨呢?如果双方都是对方的最爱,自然不会出轨;如果有一方或双方都不是对方的最爱,则必须保证想出轨的人找不到出轨的对象。

例如,男子i认为其妻子不是自己的最爱,他更爱的人是j女士,可是j女士认为自己的丈夫比男子i强,则不会选择与男子i出轨;另外有k女士很喜欢男子i,可是男子i又觉得她不如自己的现任妻子,所以也不会选择和k女士出轨。

这样男子i就找不到与之出轨的对象了;同理,如果他的妻子也找不到出轨对象的话,他们的婚姻就是稳定的。

简言之,只要满足“除妻子(丈夫)外,我爱的人不爱我,爱我的人我不爱”条件,就可形成稳定的婚姻。

回到我们的问题:如何让所有参加相亲活动的男女都组成各自的“稳定婚姻”?1962 年,美国数学家David Gale 和Lloyd Shapley 发明了一种寻找稳定婚姻的策略,人们称之为延迟认可算法(Gale-Shapley算法)。

稳定匹配难题

稳定匹配难题

前面我们提到,该算法对男人有利,对女人不利,它优先满足了男人的偏好,因此在北上广这样的特大型城市才会有那么多的剩女存在,她们终生在等待更靠谱的白马王子出现,但其实这位白马王子早就已经和别的女人配对成功(结婚)了,于是其中的不少女人选择了做小三。
一轮过后,有些男人有女友了,有些还打着光棍,没关系,继续开始第二轮。那些光棍们重复上一轮的行为,找自己最心仪的女人表白。女人会遇到一个特殊情况,自己有男友了,但是又有一个男人来表白。如果新来的男人比现在的差,她就忽略,如果比现在的好,那就劈腿换新人。
第三轮再重复第二轮的行为。如此循环往复,一直到最后每个人都成功匹配为止。Shapley和Gale两人从数学上证明了,这种策略的结果是最稳固的。因为男人是从自己最喜欢的人开始追求,当他配对成功的时候,意味着所有他更喜欢的女孩都拒绝了他。而女人如果有机会就可以换自己更喜欢的男人,因此当她配对成功的时候,意味着再没有更好的男人来找她了。所以双方达到了稳定(Stable)的状态。
我们发现,该算法对男人(主动出击的一方)有利,对女人(被动等待的一方)不利。因为男人都是从自己最心仪的女孩开始表白,这个策略首先考虑了男人的偏好。相关的数学证明从略。
你可能会发现,当n很大的时候,一轮轮的表白游戏会进行无数次,事实也正是如此。常识告诉我们,农村的人结婚通常都很早,而城市,特别是巨大城市的人,结婚都很晚。那是因为农村里你能够接触到的人都很少,即n很小(可能小于20),通过简单的几轮匹配,大家就能达到稳定匹配状态。而大城市如北上广,n巨大(接近无限),你可能会经历无数次匹配都达不到稳定状态。所以并非像广告里说的那样:更多选择更多欢笑。有时候选择更多反而结果更差了。
算法是为了解决“稳定匹配难题(Stable Matching Problem)”而提出的,所谓稳定匹配难题,是指:有n个男人,还有n个女人,男人心目中有自己的心上人列表,从最喜欢的女神,一直到最不心仪的恐龙,而女人心中也有相同的列表,从最喜欢的高富帅,到最不喜欢的猥琐男。很明显的,某男喜欢的女人,她可能根本看不上他。而多个女人喜欢的男人,也不可能同时娶这些女人。所以要找出一个让所有人都能结婚解决以上这个难题,数学家Shapley和Gale两人在1962年提出了一种特殊的算法,后来被称为Gale & Shapley算法,他们证明了,按照这套算法,他们能够找到一个让大家都满意,且稳定的组合,前提是男女数量相等。

gs算法代码

gs算法代码

gs算法代码GS算法,即Gale-Shapley算法,用于解决稳定婚姻问题。

以下是GS算法的伪代码:```function GaleShapley(n, menPrefs, womenPrefs):// 初始化所有男士和女士都未匹配menStatus = new Array(n)womenStatus = new Array(n)for i = 0 to n-1:menStatus[i] = -1womenStatus[i] = -1// 当还有未匹配的男士时,进行循环while there are unmatched men:// 选择一个未匹配的男士m = the first unmatched man// 找到该男士的首选女士w = menPrefs[m][0]if womenStatus[w] == -1:// 如果女士尚未匹配,则将男士和女士匹配menStatus[m] = wwomenStatus[w] = melse:// 如果女士已经匹配,则比较当前男士和已匹配男士的偏好m2 = womenStatus[w]if womenPrefs[w].index(m) < womenPrefs[w].index(m2): // 如果当前男士更受女士青睐,则与女士匹配,将原匹配男士置为未匹配menStatus[m] = wwomenStatus[w] = mmenStatus[m2] = -1else:// 如果原匹配男士更受女士青睐,则当前男士保持未匹配状态// 在该男士的偏好列表中删除首选女士menPrefs[m].remove(w)return menStatus```上述伪代码描述了GS算法的主要逻辑。

其中,`n`表示男士和女士的数量,`menPrefs`和`womenPrefs`分别表示男士和女士的偏好列表。

`menStatus`和`womenStatus`分别表示男士和女士的匹配状态,初始值都为-1,表示未匹配。

稳定婚姻问题算法

稳定婚姻问题算法

稳定婚姻问题算法
稳定婚姻问题是一个组合优化问题,可以使用算法求解。

一个常用的解决稳定婚姻问题的算法是Gale-Shapley算法。

下面是Gale-Shapley算法的伪代码:
1. 初始化所有人未匹配
2. 当存在一个男性未匹配的时候,选择一个未匹配男性m
3. 选择m的最喜欢的尚未婚配的女性w
4. 如果w未婚配,则将m和w配对
5. 如果w已婚配,但是m在w的排名上比当前配偶更好,则
将m和w配对,并将当前配偶变为未匹配状态
6. 重复步骤2-5直到所有男性都匹配
Gale-Shapley算法保证了最终的婚配结果是稳定的,即不存在
一个男性和一位女性,他们彼此喜欢对方胜过当前配偶的情况。

当然,除了Gale-Shapley算法,还有其他一些算法可以解决稳定婚姻问题,比如Stable Marriage with Incomplete Lists(SMI)算法等。

具体选择哪个算法取决于问题的规模和特点。

优化的Gale—Shapley算法在学生选课中的应用

优化的Gale—Shapley算法在学生选课中的应用
可选择 多 个学生 ,是 一对 多 的 配 问题 ,因此 ,本
文对 Ga l e — S h a p l e y算法进行 了优化 ,以解决学生选课
问题
1 优化 Ga l e — S h a p l e y 算 法
1 . 1 算法设计 基于 G a l e — S h a p l e y 算法H 的基本思想 和匹配方
度 ,以课 程 为单位 对 学生进行 集合 划分 ,课 程 对该 集合 中喜 爱度相 同的学 生发 放 随机种 子 ,再 对选课 的学
生进行 排序 和 录取 ,对 录取 完的 学生进 行哈 希标 记 ,并 释放相 应 的存储 空 间 ,从 而 完成 学生和课 程之 间双
向选择 匹配。 算法 分析 结果表 明 :本优 化 算法 降低 了空 间和 时间复 杂度 ,且 能 完成 学生与课 程之 间 最大满
0 引 言
婚姻稳定匹配问题” 是 G a l e 和S h a p l e y 于1 9 6 2 年
述性质 :J v的元素 和 M 的元素随机组成 的有序对 出现
在匹配 A中一次且仅有一次 。完美匹配 A 具有下述性
质: J Ⅳ的元素和 的元素恰好出现在 A 的有序对里一
次且仅有一次 。完美匹配D - 2 ] 是一对男女配对且互为理
表1 学生对课程喜爱度表
Ta b l e 1 T h e s t u d e n t s p r e f e r e n c e l i s t o f c o u r s e s
后课 程对所有 的学生排序 ,得到 “ 伪优 先表 ” ,从而
解决喜 爱度 并列 的 问题 。学 生对课 程 的喜爱 度用 自 然数表示 ,女 ¨1 ,2等 ,而随机种 子是 以学生对 课程 的喜 爱 度 和该 喜爱 度 相 同 的学生 人 数 为依 据 发放 ,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Gale-Shapley 算法——如何寻找稳定的婚姻搭配
据说,一本书开篇就直言不讳地谈起两性的话题,这本书准能畅销。

有幸的是,在众多可以用来引入“算法”的话题中,我最喜欢的那一个还真与两性有那么一些关系。

假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚。

如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(1),你应该怎样为他们牵线配对呢?
最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”。

这虽然很完美,但绝大多数情况下都不可能实现。

比方说,男 1 号的最爱是女 1 号,而女 1 号的最爱不是男 1 号,这两个人的最佳选择就不可能被同时满足。

如果出现了好几个男人的最爱都是同一个女孩儿的情况,这几个男人的首选也不会同时得到满足。

当这种最为理想的配对方案无法实现时,怎样的配对方案才能令人满意呢?
其实,找的对象太完美不见得是个好事儿,和谐才是婚姻的关键。

如果男 1 号和女 1 号各自有各自的对象,但男 1 号觉得,比起自己现在的对象,女 1 号更好一些;女 1 号也发现,在自己心目中,男 1 号的排名比现男友更靠前一些。

这样一来,这两人就可能会发生外遇,最后扔下各自现在的对象,一起私奔了——因为这个结果对他们两人都更好一些。

在一种男女配对的方案中,如果出现了这种情况,我们就说婚姻搭配是不稳定的。

作为一个红娘,你深深地知道,对象介绍得不好没有关系,就怕婚姻关系不稳定。

给客户牵线配对时,虽然不能让每个人都得到最合适的,但婚姻搭配必须得是稳定的。

换句话说,对于每一个人,在他心目中比他当前的伴侣更好的异性,都不会认为他也是一个更好的选择。

现在,我们的问题就是:稳定的婚姻搭配总是存在吗?应该怎样寻找出一个稳定的婚姻搭配?
为了便于分析,我们下面做一些约定。

我们用字母 A 、 B 、 C 对男性进行编号,用数字 1 、 2 、 3 对女性进行编号。

我们把所有男性从上到下列在左侧,括号里的数字表示每个人心目中对所有女性的排名;再把所有女性列在右侧,用括号里的字母表示她们对男性的偏好。

图 0-1 所示的就是有 2 男 2 女的一种情形,每个男的都更喜欢女 1 号,但女 1 号更喜欢男 B ,女 2 号更喜欢男 A 。

若按 A-1 、 B-2 进行搭配,则男 B 和女 1 都更喜欢对方一些,这样的婚姻搭配就是不稳定的。

但若换一种搭配方案(如图 0-2 ),这样的搭配就是稳定的了。

图 0-1 一个不稳定的婚姻搭配男 B 和女 1 都不满意现任伴侣
图 0-2 一个稳定的婚姻搭配
可能很多人会立即想到一种寻找稳定婚姻搭配的策略:不断修补当前搭配方案。

如果两个人互相之间都觉得对方比自己当前的伴侣更好,就让这两个人成为一对,剩下被甩的那两个人组成一对。

如果还有想要私奔的男女对,就继续按照他们的愿望对换情侣,直到最终消除所有的不稳定组合。

容易看出,应用这种“修补策略”所得到的最终结果一定满足婚姻的稳定性,但这种策略的问题就在于,它不一定有一个“最终结果”。

事实上,按照上述方法反复调整搭配方案,最终有可能会陷入一个死循环,因此该策略甚至不能保证得出一个确定的方案来。

图 0-3 应用“修补策略”可能会产生死循环
1962 年,美国数学家 David Gale 和 Lloyd Shapley 发明了一种寻找稳定婚姻的策略。

不管男女各有多少人,不管他们各自的偏好如何,应用这种策略后总能得到一个稳定的婚姻搭配。

换句话说,他们证明了稳定的婚姻搭配总是存在的。

有趣的是,这种策略反映了现实生活中的很多真实情况。

在这种策略中,男人将一轮一轮地去追求他中意的女子,女子可以选择接受或者拒绝她的追求者。

第一轮,每个男人都选择自己名单上排在首位的女人,并
向她表白。

此时,一个女孩儿可能面对的情况有三种:没有人跟她表白,只有一个人跟她表白,有不止一个人跟她表白。

在第一种情况下,这个女孩儿什么都不用做,只需要继续等待;在第二种情况下,接受那个人的表白,答应暂时和他做男女朋友;在第三种情况下,从所有追求者中选择自己最中意的那一位,答应和他暂时做男女朋友,并拒绝其他所有的追求者。

第一轮结束后,有些男人已经有女朋友了,有些男人仍然是单身。

在第二轮追女行动中,每个单身男都从所有还没拒绝过他的女孩中选出自己最中意的那一个,并向她表白,不管她现在是否是单身。

和第一轮一样,女孩儿们需要从表白者中选择最中意的一位,拒绝其他追求者。

注意,如果这个女孩儿已经有男朋友了,当她遇到了更好的追求者时,她必须拒绝掉现在的男友,投向新的追求者的怀抱。

这样,一些单身男人将会得到女友,那些已经有了女友的人也可能会被甩掉,重新变成光棍。

在以后的每一轮中,单身的男人继续追求列表中的下一个女孩儿,女孩儿则从包括现男友在内的所有追求者中选择最好的一个,并对其他人说不。

这样一轮一轮地进行下去,直到某个时候所有人都不再单身,下一轮将不会有任何新的表白发生,整个过程自动结束。

此时的婚姻搭配就一定是稳定的了。

图 0-4 应用上述策略,三轮之后将得出稳定的婚姻搭配
这个策略会不会像之前的修补法一样,出现永远也无法终止的情况呢?不会。

下面我们将说明,随着轮数的增加,总有一个时候所有人都能配上对。

由于在每一轮中,至少会有一个男人向某个女人告白,因此总的告白次数将随着轮数的增加而增加。

倘若整个流程一直没有因所有人都配上对了而结束的话,最终必然会出现某个男人追遍了所有女孩儿的情况。

而一个女孩儿只要被人追过一次,以后就不可能再单身了。

既然所有女孩儿都被这个男人追过,就说明所有女孩儿现在都不是单身,也就是说此时所有人都配上对了。

接下来,我们还需要证明,这样得出的配对方案确实是稳定的。

首先注意到,随着轮数的增加,一个男人追求的对象总是越来越糟,而一个女孩儿的男友只可能变得越来越好。

假设男 A 和女 1 各自有各自的对象,但比起现在的对象来,男 A 更喜欢女 1 。

因此,在此之前男 A 肯定已经跟女 1 表白过。

既然女 1 最
后没有跟男 A 在一起,说明女 1 拒绝了男 A ,也就是说她有了比男 A 更好的男人。

这就证明了,两个人虽然不是一对,但都觉得对方比自己现在的伴侣好,这样的情况绝不可能发生。

我们把用来解决某种问题的一个策略,或者说一个方案,或者说一个处理过程,或者说一系列操作规则,或者更贴切的,一套计算方法,叫做“算法”。

上面这个用来寻找稳定婚姻的策略就叫做“ Gale-Shapley 算法”,有些人也管它叫“延迟认可算法”。

每个算法都有它的实际意义,能给我们带来很多启发。

Gale-Shapley 算法最大的意义就在于,作为一个为这些男女牵线的媒人,你并不需要亲自计算稳定婚姻匹配,甚至根本不需要了解每个人的偏好,只需要按照这个算法组织一个男女配对活动就可以了。

你需要做的仅仅是把算法流程当作游戏规则告诉大家,游戏结束后会自动得到一个大家都满意的婚姻匹配。

对于男性来说,从最喜欢的女孩儿开始追起是顺理成章的事;对于女性来说,不断选择最好的男人也正好符合她的利益。

因此,大家会自动遵守游戏规则,不用担心有人虚报自己的偏好。

历史上,这样的“配对游戏”还真有过实际应用,并且更有意思的是,这个算法的应用居然比算法本身的提出还早 10 年。

早在 1952 年,美国就开始用这种办法给医学院的学生安排工作,这被称之为“全国住院医师配对项目”。

配对的基本流程就是,各医院从尚未拒绝这一职位的医学院学生中选出最佳人选并发送聘用通知,当学生收到来自各医院的聘用通知后,系统会根据他所填写的意愿表自动将其分配到意愿最高的职位,并拒绝掉其它的职位。

如此反复,直到每个学生都分配到了工作。

当然,那时人们并不知道这样的流程可以保证工作分配的稳定性,只是凭直觉认为这是很合理的。

直到 10 年之后, Gale 和 Shapley 才系统地研究了这个流程,提出了稳定婚姻问题,并证明了这个算法的正确性。

用稳定性来评价配对方案的好坏的确很站得住脚,但有时候我们也会遇到一些别的需求,它们又对应着算法世界中的诸多其它问题。

比方说,如果我们已经知道每一对男女之间的“相配度”,如何寻找一种配对方案使得由此产生的总相配度最大?在算法领域中,这被称为二分图的最大权值匹配问题。

再比如,如果不考虑性别的差异(比如同桌、搭档的匹配),问题就更加复杂了,这通常被归入一般图匹配的范畴。

这些问题现在都已经找到了有效的算法,不过它们太复杂,已经超出本书的范围了。

生活中的算法应用随处可见。

这本书要做的,就是带领大家从身边熟悉的事物出发,一睹算法的无尽魅力。

相关文档
最新文档