什么是算法 如何寻找稳定的婚姻搭配

    据说,一本书开篇就直言不讳地谈起两性的话题,这本书准能畅销。有幸的是,在众多可以用来引入“算法”的话题中,我最喜欢的那一个还真与两性有那么一些关系。假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚。如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(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 才系统地研究了这个流程,提出了稳定婚姻问题,并证明了这个算法的正确性。

    用稳定性来评价配对方案的好坏的确很站得住脚,但有时候我们也会遇到一些别的需求,它们又对应着算法世界中的诸多其它问题。比方说,如果我们已经知道每一对男女之间的“相配度”,如何寻找一种配对方案使得由此产生的总相配度最大?在算法领域中,这被称为二分图的最大权值匹配问题。再比如,如果不考虑性别的差异(比如同桌、搭档的匹配),问题就更加复杂了,这通常被归入一般图匹配的范畴。这些问题现在都已经找到了有效的算法,不过它们太复杂,已经超出本书的范围了。生活中的算法应用随处可见。这本书要做的,就是带领大家从身边熟悉的事物出发,一睹算法的无尽魅力。

-------------------------------------------------------------------
(1) 这个排名的来源并不重要,它有可能是客户根据每位异性的个人资料直接给出的,也有可能是通过客户提交的个人信息推算出来的。

Stable Matching Problem稳定匹配问题-----稳定婚姻算法 (一)问题的引出:             有N男N女,每个人都按照他对异性的喜欢程度排名。现在需要写出一个算法安排这N个男的、N个女的结婚,要求两个人的婚姻应该是稳定的。             何为稳定?             有两对夫妻M1 F2,M2 F1。M1心目中更喜欢F1,但是他和F2结婚了,M2心目中更喜欢F2,但是命运却让他和F1结婚了,显然这样的婚姻是不稳定的,随时都可 阅读详情

相关推荐

稳定婚姻问题:Gale–Shapley算法

(一)问题的引出 在组合数学、经济学、计算机科学中,稳定婚姻问题(英语:stable marriage problem,简称SMP)又称为稳定配对问题(stable matching problem),是指在两组同样大小的元素集合中(例如集合1是男子组、集合2是女子组,而他们各有偏好),寻求一个稳定配对组合所遇到的问题。一个组合在以下情况下并不稳定: 在集合1中有一个元素A更偏好于集合2的一些元素B,但元素A已被配对;而元素B亦更偏好于元素A多于配对给他的元素。在男女婚姻的角度来说,可以写成一名男子A获安排

Anne033的博客 3075

婚姻稳定匹配问题

婚姻稳定匹配问题 算法 GS稳定匹配算法 稳定婚姻匹配问题可以由GS稳定匹配算法(盖尔-沙普利算法)来解决。 GS稳定匹配算法也称作“延迟接受算法”,是美国数学家David Gale和Lloyd Shapley在1962年提出的寻找稳定婚姻的一种方法。 特点 算法的特点在于,只要男士和女士人数相等,并且心中都有自己的排名情况,无论需要配对的总人数多少,都可以得到一个稳定的婚姻。 问题描述 婚介中心登记了N位男士与N位女士的信息,每位男士按照他对女士的喜爱程度做了排名,每位女士按照她对男士的喜爱程度做了排名。

xiaoxiaojinglinger的博客 3871

稳定婚姻匹配

单身男女的稳定婚姻匹配 ,用c++实现,gale算法。

[0]引言 什么是算法 如何寻找稳定的婚姻搭配

引言 什么是算法如何寻找稳定的婚姻搭配     据说,一本书开篇就直言不讳地谈起两性的话题,这本书准能畅销。有幸的是,在众多可以用来引入“算法”的话题中,我最喜欢的那一个还真与两性有那么一些关系。假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚。如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(1),你应该怎样为他们牵线配对呢

matrix67的专栏 1033

婚姻匹配(稳定匹配)

稳定婚姻匹配 算法作业

CGNS快速入门到实战(二):VS配置调用CGNS静态链接库

CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库;(三)CGNS文件及案例展示。本篇文章重点讲述VS配置调用CGNS静态链接库。

ahang_99的博客 2616

稳定匹配问题

稳定匹配问题有多种叙述方式: 医院和医学院毕业生的分配问题。 一组男性和一组女性的恋爱关系的分配问题。 问题的关键在于不出现不稳定对既A更倾向于B,B亦更倾向于A,但是A和B却没有配对。 下面列举一下匹配算法(以婚姻配对问题为例): 此算法为男性优先算法,简单证明是每次都是由男性按照自己喜欢的女性列表从高到低进行表白,而女性只能选择接受与否。在这种情况下,女性一旦有了配偶就不可能恢复单身,而...

qq_37724465的博客 1477

从原理到实战:ARS548 4D毫米波雷达数据处理与多模态融合全解析

本文深入解析了4D毫米波雷达ARS548的工作原理与数据处理全流程。从FMCW测距测速、MIMO虚拟天线阵列到点云生成的三步FFT处理,提供了详尽的Python代码实现。文章进一步探讨了与激光雷达、相机的多模态时空对齐与融合策略,并指导如何构建用于自动驾驶感知训练的多模态标注数据集,为相关算法工程师提供了从理论到实践的完整指南。

weixin_29161719的博客 365

婚姻匹配问题的 C++ 算法实现与解析

假设有n位男性和n位女性,每位男性对所有女性有一个偏好排序,每位女性对所有男性也有一个偏好排序。完备性:所有男性和女性都被匹配;稳定性:不存在一对未匹配的男女(m, w),使得m更偏好w而非当前配偶,且w也更偏好m而非当前配偶(这种情况称为 “不稳定对”)。稳定婚姻问题是算法领域的经典问题,Gale-Shapley 算法以其简洁、高效的特性成为解决该问题的核心方案。本文通过 C++ 实现了基础的稳定婚姻匹配,并解析了算法原理、特性与扩展场景。

ibpuai的博客 1125

告别纯代码:用Visual Studio为LabVIEW封装一个‘即插即用’的海康VisionMaster控件

本文介绍如何利用Visual Studio为LabVIEW封装一个‘即插即用’的海康VisionMaster控件,解决传统集成方式中的代码臃肿和维护困难问题。通过.NET控件封装核心功能,实现LabVIEW与VisionMaster的高效对接,显著提升工业自动化开发效率。

weixin_33744854的博客 504

基于STM32L4XX、HAL库的RTL8201F 以太网收发器(PHY)驱动程序设计

define PHY_RESET_DELAY 1000 // PHY复位延迟(ms)#define PHY_AUTONEGO_DELAY 3000 // 自动协商延迟(ms)/* 检查PHY ID (RTL8201F的ID为0x001CC816) *//* 系统时钟配置,确保ETH有50MHz时钟 *//* 初始化CPU, AHB和APB总线时钟 */

zhusl6688的博客 803

[FWD]引言 什么是算法 如何寻找稳定的婚姻搭配

系统中国 1180

使用R语言实战:构建Logistic回归模型

Logistic回归是一种基于概率的分类算法,它用于预测离散的结果变量(也称为响应变量或因变量)。与线性回归不同,Logistic回归的输出是一个概率值,通常在0和1之间。这使得它非常适合处理二分类问题。市场营销:预测客户是否会购买某个产品。医学研究:预测疾病的发生与否。信用风险评估:预测个人申请贷款的违约风险。社会科学:预测个人对某个政策的态度。

2301_79331230的博客 1139

稳定婚姻问题和Gale-Shapley算法

什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚。如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心中的排名,你应该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”。这虽然很完美,但绝大多数情况下都不可能实现。比方说,男1号最喜欢的是女1号,而

技术拾遗 2413

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1629

使用 PLS 回归进行近红外光谱的异常值检测

在光谱数据中,并非每个数据点都是有效的,因此,在构建模型时找到与大部分数据不符合的数据点是一种必要的操作。这些数据我们称之为。在这篇文章中,我们将使用PLS回归进行红外光谱数据的异常值检测。

qq_44204759的博客 1422

开源AI助手接口模块设计:双龙虾架构实战

在AI应用开发中,随着功能增多,直接调用模型接口会导致代码耦合严重、维护困难。通过抽象统一的接口模块,将认证、超时、重试、错误映射等通用逻辑封装起来,是提升工程化水平的关键。本文以开源AI助手项目为例,介绍如何设计一个“双通道、统一底座”的接口适配层,代号“双龙虾”,对接枫云AI服务。模块采用配置驱动,将API密钥、模型参数等与代码分离;内部实现文本与文件双通道,支持请求重试、统一异常处理、并发控制和日志追踪。这种设计能极大减少上游接口变更对业务代码的冲击,适用于需要灵活接入多家AI服务的项目。文章给出完整

weixin_33861800的博客 619

duilib入门基础一 容器之 BOX、VBOX、HBOX布局及其子控件align排列方式

序 容器 duilib有以下主要布局容器 Box(自由布局容器) VBox(垂直布局容器) HBox(水平布局容器) TabBox(多标签布局容器) TileBox(格子布局容器) ChildBox(子布局容器) ScrollableBox(可滚动容器) 一、Box容器布局 Box容器及其扩展VBox HBox是其中最常用的容器。 相对Box来说,HBox, VBox更好理解些 1.1 VBox HBox VBox下的各个控件垂...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 3082

Gale-Shapley算法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33884611的博客 549

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

婚姻匹配问题设计——基于 Gale - Shapley 算法

问题描述:有N男N女,每个人都按照他对异性的喜欢程度排名。现在需要写出一个算法安排这N个男的、N个女的结婚,要求两个人的婚姻应该是稳定的。何为稳定?有两对夫妻M1 F2,M2 F1。M1心目中更喜欢F1,但是他和F2结婚了,M2心目中更喜欢F2,但是命运却让他和F1结婚了,显然这样的婚姻是不稳定的,随时都可能发生M1和F1私奔或者M2和F2私奔的情况。所以在做出匹配选择的时候(也就是结婚的时候),我们需要做出稳定的选择,以防这种情况的发生。

2301_80688700的博客 2310

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【稳定婚姻问题】【HDU1435】【Stable Match】

2015/7/1 19:48

学习之路 3340

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

稳定婚姻问题

假如你是一个快看小说网媒人,有若干个单身男子登门求助,还有同样多的烈火军校单身女子也前来征婚。如果你已经知道这些女孩在每个男人心目中的排名,以及男孩们在每个女孩心中的排名(1),你应该怎样为他们牵线配对呢?最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”。这虽然很完美,但绝大多数情况下都不可能实现。比方说,男 1 号的最爱是女 1 号,而女 1 号的最爱不是男 1 号,这两...

217

【转】稳定婚姻问题和Gale-Shapley算法

稳定婚姻问题和Gale-Shapley算法 作者: 顾森 来源: 程序员 发布时间: 2014-12-24 13:21 阅读: 5572 次 推荐: 3 原文链接 [收藏]   什么是算法?每当有人问作者这样的问题时,他总会引用这个例子:假如你是一个媒人,有若干个单身男子登门求助,还有同样多的单身女子也前来征婚。如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女...

chi's blog 483

图论算法:稳定婚姻问题,如何找到最适合自己的另一半

什么是算法? 每当有人问我这样的问题,我总会引用下面这个例子。 假如你是一个媒人,有若干名单身男子登门求助,还有同样多的单身 女子也来征婚。如果你已经知道这些女孩儿在每个男孩儿心目中的排名,以及男孩儿们在每个女孩儿心目中的排名,那么你该怎样为他们牵线配对呢? 最好的配对方案当然是,每个人的另一半正好都是自己的“第一选择”。 这当然很完美,但绝大多数情况下都不可能实现。 比方说,男 1 号的最爱是女 1 号,而女 1 号的最爱不是男 1 号,这两个人的最佳选择就不可能被同时满足。如果出现了好几位男士的最爱是同

博文视点(北京)官方博客 801
上一篇: 交易员的胖手指导致美股暴跌
下一篇: 居然是真的
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值