[Algorithm] Deferred Acceptance Algorithm
一.立即接受算法:
对于约会的配对,大家都去追自己最心仪的女生。而这个女生面对几位追求者,要立刻做个决定。
被拒绝的男生们调整一下心情,再去追求心中的 No. 2。以此类推。
这样做法有一个严重的问题:当你被你的No.1拒绝后,再去追求你的No.2的时候,你心中的No.2可能已经在第一轮中选择了其他人。
但坑爹的是,有可能你正是你心中No.2心中的No.1,但是她并不知道。所以她在第一轮中,因为没有被你追求,而屈就他人。比及你在第一轮中表白失败,再去找你的No.2 时,已然晚矣。
假设班上三男(分别是A,B,C),三女(分别是x,y,z),见图一(左女右男):

他们心中对异性的排名见图二。在女x的心中A>B,意味着A要好于B。

第一轮中,男生们向心中的No.1女示好,即A,B两男向心中最喜欢的x女示好,而C男向y女示好。如图三所示。
(在第一轮,女y 只有一个追求者,只能屈就)
如果采用立即接受算法,此轮之后的结果是,x-A,y-C两对结成情侣。注意,y女虽然心中首选是B男,但是由于B男在此轮中正在追逐x女,无奈下y女屈就于唯一来献殷勤的C男。比及第二轮开始时,唯一还没配对的就是z女和B男了,所以B男只能接受z女。

最后的结果是x-A,y-C,z-B三对恋人。
注意:y女和B男两人都更愿意离开自己的现任伴侣而彼此在一起。
这种不稳定的状态就是很多文学影视作品的来源哈。在数学上,这也恰恰被称为是“不稳定”的组合。顾名思义,我们希望能够有种算法,给我们的结果是所有配对都是稳定的。
二.延迟接受算法
延迟接受算法的操作:每个男生在第一轮中向自己心中的No.1示爱。但是各位姑娘们不用立即决定,而是先hold住了。
在第二轮中,每个男生再向心中的No.2示爱。从第二轮开始,每位姑娘们只保留自己到现在为止所收获的最心仪的男生(但是不用答应他,只hold在心理),而拒绝其他所有人。
而被拒绝的男生(也就是现在尚没有人hold着你的男生)则继续在下一轮中向心中排名的下一个姑娘表白。
以此类推,一轮轮继续下去,直到所有想示爱的男生都示完为止。此时,每个手中有offer的姑娘,可以选择接受。
(感觉就是先让女生获得完全信息)
以上就是立即接受算法的做法。大家算一下,就会发现,在我们这个简单的例子中,最后的结果是x-A,y-B,z-C三组恋人终成眷侣。而这是一稳定的结果。
所有6人中,你不可能找到一男一女符合以下条件:他们都更愿意抛弃已有的伴侣而与彼此在一起。

延迟接受算法能够从数学上证明是一定会产生稳定配对的算法。这使它成为一个重要的工具,因为这类的配对问题在现实生活中太常见了。罗斯在《共享经济》中介绍了他将延迟接受算法分别运用于肾脏移植市场,全国住院医生配对程市场和高中择校系统,实现了稳定的配对,取得了非常好的成果。

Nice.
[Algorithm] Deferred Acceptance Algorithm的更多相关文章
- [Math] Deferred Acceptance Algorithm
约会配对问题 一.立即接受算法: 对于约会的配对,大家都去追自己最心仪的女生.而这个女生面对几位追求者,要立刻做个决定. 被拒绝的男生们调整一下心情,再去追求心中的 No. 2.以此类推. 这样做法有 ...
- 【Java】-NO.13.Algorithm.1.Java Algorithm.1.001-【Java 常用算法手册 】-
1.0.0 Summary Tittle:[Java]-NO.13.Algorithm.1.Java Algorithm.1.001-[Java 常用算法手册 ]- Style:Java Series ...
- Prim's Algorithm & Kruskal's algorithm
1. Problem These two algorithm are all used to find a minimum spanning tree for a weighted undirecte ...
- Method for finding shortest path to destination in traffic network using Dijkstra algorithm or Floyd-warshall algorithm
A method is presented for finding a shortest path from a starting place to a destination place in a ...
- [Algorithm] Radix Sort Algorithm
For example we have the array like this: [, , , , , ] First step is using Counting sort for last dig ...
- [Algorithm] A* Search Algorithm Basic
A* is a best-first search, meaning that it solves problems by searching amoung all possible paths to ...
- [Algorithm] A nonrecursive algorithm for enumerating all permutations of the numbers {1,2,...,n}
def permutationN(n): a=[None]*n for i in range(n): a[i]=i+1 sum=1 for j in range(n): sum*=(j+1) i=0 ...
- [Algorithm] Median Maintenance algorithm implementation using TypeScript / JavaScript
The median maintenance problem is a common programming challenge presented in software engineering j ...
- Algorithm: Euclid's algorithm of finding GCD
寻找最大公约数方法 代码如下: int gcd (int a, int b) { return b ? gcd (b, a % b) : a; } 应用:求最小公倍数 代码如下: int lcm (i ...
随机推荐
- 【转】一篇文章读懂人力资源三支柱体系(COE・BP・SSC)
通过人力资源转型,提升效率和效能 作者:Sharon Li,翰威特大中华区咨询总监. 杰克韦尔奇曾说过“人力资源负责人在任何企业中都应该是第二号人物”,但在中国,99%的企业都做不到.原因很简单, ...
- Knockout开发中文API系列4–监控属性数组
PS:这个翻译系列好久都没有更新了,实在是不应该,一方面是由于时间不多,另一方面也由于自身惰性太大,从今天起接着更新,会在最近的一月内把这个系列中文API文档翻译完整. 如果你想侦测并响应一个对象的变 ...
- UEFI Protocol
MEM_INFO_PROTOCOL MEM_INFO_PROTOCOL; EFI_LOADED_IMAGE_PROTOCOL EFI_DEVICE_PATH_PROTOCOL EFI_DRIVER_B ...
- 解决linux下不生成core dump文件
core dump的概念: A core dump is the recorded state of the working memory of a computer program at a spe ...
- js学习(四)- prototype原型对象
前言: 下面两行代码都是创建一个数组对象myArray:var myArray=[];//等价于var myArray=new Array();同样,下面的两段代码也都是创建一个函数myFunctio ...
- javascript常用功能收藏
引用:http://www.css88.com/archives/5180 收集了一些比较常用的javascript函数. 字符串长度截取 function cutstr(str, len) { va ...
- "add-apt-repository" On Linux
在 Ubuntu 9.10以后 我们可以使用 "add-apt-repository" 脚本添加 ppa 到当前的库中并且自动导入公钥. 再终端下使用下面的语法: add-apt- ...
- List<Map<String, Object>>是什么意思
List集合中的对象是一个Map对象,而这个Map对象的键是String类型,值是Object类型 List以Map接口对象为列表对象. Map以String为键,以Object为值. List里只能 ...
- 如何在集群中获得处理本次请求的web容器的端口号?
系统四台机器,每台机器部署四个Tomcat Web容器.现需要根据端口号随机切换到映射的数据源,若一台机器一个Tomcat则用IP识别,可现在一台机器四个Tomcat,因此还需要获得Web容器的端口号 ...
- perl 中的引用
perl 语言中的引用共分为两类: 声明引用时只需要在对象的前面加上反斜杠 第一列是数组的引用: 代码示例: , , ); my $array_ref = \@array; 第二种是哈希的引用 代码示 ...