算法证明:女生遇到心动的男人一定要追!

全世界有3.14 % 的人已经关注了

数据与算法之美


我来讲恋爱中的博弈,不,我来讲恋爱中的算法,不,我来讲算法!!


有个著名的问题,叫做 stable matching。早年是一个可爱的俄罗斯老头在图论课上教我的,印象非常深刻,拿出来娱乐下大家。


因为这个算法应用太广泛了,这个算法的两位发明人 David Gale 和 Lloyd Shapley,在 2012 年因为这个算法获得诺贝尔经济学奖。


先说结论:女生遇到心动的男人一定要追!我马上就要来证明。


前方高能预警!!!含大量数学图论及计算机编程算法知识,萌妹子请直接退散。


假设,有一个平行世界,我们姑且叫这个世界,平行世界 999 号,这个世界有 n 个男人,还有 n 个女人,然后每一个男人,都有一个对喜欢的女人的排序,比如男 A,有一个排序(女 A,女 B,一直到女 N),每一个女人都有一个喜欢的男人的排序,比如女 A,有一个排序(男 A,男 B,一直到男 N)。每个男的都会试图去追求自己的排序里头排的最高的女性,每个女的都会接受自己排序里头最高的男性的追求。


再假设这个平行世界 999 号,有以下追求方法(算法):


1. 这个世界上只有男人能够追求女人,女人收到一个男人的追求,可以选择说“你做我男友吧”,或者“你滚犊子”。当女人说“你做我男友吧”的时候,这个男人和女人进入了男女朋友模式,当女人说,“你滚犊子”的时候,这个男人回复单身。


2. 每个男人只能在单身的时候追求女人,而每个女人最多只能有一个男朋友


3. 每个男人都会追求自己名单上排位最高的女人,当被拒之后,会追求排位次高的女人,被拒之后再追第三高的女人,以此类推。每个女人,如果没有男朋友,收到追求,会立刻说,“你做我男友吧”,如果有男朋友,会将现有男朋友与追求者比较,选择其中排位更高的,甩掉排位更低的。


4. 每个男人都会锲而不舍的一直把整个排序追求完,直到脱离单身状态为止。


5. 当每个男的和女的都有一个女、男朋友的时候,会所有人一起结婚。


怎样,是不是和现实很像?让我喝口水继续写!


我的结论是,这个世界里头,一定会有这么一个组合,使得,这 n 个男的,和 n 个女的,会形成一个稳定的一一对应的婚姻关系。


也就是说,这 N 个男人和女人,都合理的选择了自己名单上最高的排位的那个对象。


我说的有点乱,因为我学的是用英语学的,而我的翻译实在是不咋地,我先来简化问题:


一、假设这个世界上只有 1 个男人,1 个女人:


那不用想了,排什么排,去滚床单,裸奔,过没羞没躁的生活去吧。


二、假设这个世界上有 2 个男人(男 A,男 B),2 个女人(女 A,女 B):


这就开始复杂了,


如果,男 A 和男 B 的排序都是(女 A,女 B),女 A 和女 B 的排序都是(男 A,男 B)。


那么很简单,男 A 和男 B 一起去追女 A,男 B 迅速杯具,男 A 和女 A 在一起,男 B 和女 B 在一起,故事完结。


如果,男 A 和男 B 的排序都是(女 A,女 B),女 A 和女 B 的排序都是(男 B,男 A)。


那么也很简单,男 A 和男 B 一起去追女 A,男 A 迅速杯具,男 B 和女 A 在一起,男 A 和女 B 在一起,股市完结。


如果,男 A 的排序是 (女 A,女 B),男 B 的排序是(女 B,女 A),女 A 的排序是(男 B,男 A),女 B 的排序是(男 A,男 B)呢,那怎么办?


那么现在,男 A 会去追求女 A,女 A 会说,“你做我男友吧”,男 B 会去追求女 B,女 B 会说“你做我男友吧”。


于是大家结婚了。


所以现在的组合是,男 A 和女 A,男 B 和女 B。


但是!!!但是!!!


你们发现了问题没有???


每个男的都追求到了自己最喜欢的女士,每个女士却只赢得了自己最不喜欢的男士!!!!


这就是这个算法的一个弊端,就是追求者,有占优的可能性。


如果反过来,平行世界 999 里,只允许女人追求男人,会出现下面情况:


女 A 去追求男 B,男 B 会说,“你做我女友吧”,女 B 去追求男 A,男 A 会说“你做我女友吧”。


于是大家都结婚了。


现在的组合是男 A 和女 B,男 B 和女 A。这同样是一个稳定的匹配。


但是!!!但是!!!现在每个女士都追求到了自己最喜欢的男士,每个男士却只赢得了自己最不喜欢的女士!!!


三、推广到 N 男 N 女,也是一样的推论。


简单的说,就是因为这是一个单向筛选,每个男的都会确保会向自己的排序中最高的女性表白。


然而男性被“滚犊子”的唯二可能性,是因为这个女性有一个她心目中排序更高的男朋友,或者当了一段时间男朋友,但一个排序更高的男人向她表白。(当然现实中大家也懂,你就是没戏的了,而且是你本来就没戏)感受数学的魅力,推荐阅读《数学之旅》


因此,确保了男性一定能追求到自己喜欢的名单里头,排位最高的女性。


也就是说,在这个追求关系里头,主动的那一方更能够找到自己更喜欢的异性,而被动那一方,却没有这样的优势。


所以结论就是,妹子们,遇到喜欢的男人,一定要主动!


via:尼克余(知乎)


640?wx_fmt=png精品课程推荐:

640?wx_fmt=png

640?wx_fmt=png

选购数学科普正版读物

严选“数学思维好物”

送给孩子的益智礼物   |   办公室神器

算法工程师成长阅读   |   居家高科技

理工科男女实用型礼物精选   

640?wx_fmt=png


640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg


数据与算法之美

用数据解决不可能


640?wx_fmt=jpeg


长按扫码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php文字左右滚动代码,JavaScript

js文字横向滚动特效本文为大家分享了js文字横向滚动特效代码,具体实现内容如下:页面布局恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得 50元巨人点卡奖励恭喜793765***获得…

记一次 .NET 某教育系统 异常崩溃分析

一:背景 1. 讲故事这篇文章起源于 搬砖队大佬 的精彩文章 WinDBg定位asp.net mvc项目异常崩溃源码位置 ,写的非常好,不过美中不足的是通览全文之后,总觉得有那么一点不过瘾,就是没有把当时抛异常前的参数给找出来。。。…

Json.Net系列教程 3.Json.Net序列化和反序列化设置

上节补充首先补充一点,Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和NHibernate的.我举例说明DataTable的序列化和反序列化.创建一个DataTable对象,如下: DataTable dt new DataTable();DataColumn dcName new DataColumn("Name");DataColu…

5道谷歌面试题:即使是天才也要怀疑自己能力了(附答案)

全世界只有3.14 % 的人关注了数据与算法之美谷歌,美国的跨国科技企业,致力于互联网搜索、云计算、广告技术等领域,开发并提供大量基于互联网的产品与服务。这样一家实力雄厚前景无量的公司是众多求职者梦寐以求的地方,然而&#x…

红玫瑰数java的意思,红玫瑰的含义,玫瑰花个数的含义

导航:网站首页 >红玫瑰的含义,玫瑰花个数的含义时间:2018-2-27相关问题:匿名网友:1朵玫瑰代表——我的心中只有你ONLY YOU!2朵玫瑰代表——这世界只有我俩!3朵玫瑰代表——我爱你I LOVE YOU!4朵玫瑰代表——至死不渝…

(装载)C#中AppDomain.CurrentDomain.BaseDirectory与Application.StartupPath的区别

// 获取程序的基目录。System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径。System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。System.Environment.CurrentDirectory // 获…

[Abp vNext 源码分析] - 18. 单元测试

简介ABP vNext 框架使用 xUnit 作为单元测试组件,官方的所有模块都编写了大量的 单元/集成测试 确保功能正常。由于 ABP vNext 模块化系统的原因,开发人员在建立单元测试项目的时候需要集成 Volo.Abp.UnitTest 项目,这样在执行单元测试的时候…

php表格单元格怎么实现排序,javascript实现对表格元素进行排序操作

我们在上网中都能看到很多能够排序的,如大小、时间、价格等现在我们也试一下排序功能:排序的函数代码:里面含有点击之后排序--还原,和排升序和降序。function sortAge(){//对年龄进行排序,要先进行获得每一行对象&…

【10.29周一电商,已好】中国日历的至高境界,377张震撼级插画,美到爆!

每段时光都有属于每段时光的回忆它们是童年的纸飞机是校园时代的试卷与课本是第一次离开家乡时的兴奋与忐忑是跟某个人眼神交汇时的慌乱...回忆如此珍贵,以致于令我们频频回想,渴望着回到过去,与美好再度相逢。还记得文先生给大家推荐过的新一…

设置润乾报表鼠标移到格子上就显示提示内容

为了达到一定的交互性和易用性,我们一般喜欢将鼠标移动到格子上就能显示出一定的提示信息,比方说这个格子大小固定了但是里面内容超出格子了,这样我们希望鼠标移动过去后能自动提示所有的内容。用润乾报表可以这样设计: 比方说一个格子里面有如下内容 “这是一个很长…

ASP.NET Core 单元测试:如何Mock Url.Page()

点击上方蓝字关注“汪宇杰博客”导语在 ASP.NET Core 中,当你在 UrlHelperExtensions 类上使用扩展方法时,很难在单元测试中编写Mock。因为Moq框架不支持模拟扩展方法。问题例如,我的博客代码中使用了 Url.Page() 方法:var callba…

matlab dwt函数应用,MATLAB中关于DCT,DFT和DWT的相关函数

1. 离散傅立叶变换的 Matlab 实现Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和ifftn 则用来计算反 DFT 。这些函数的调用格式如下:A=fft(X,N,DIM)其中,X 表示输入图像&#xff1…

“甜橙金融杯”数据建模大赛发布,8万重金寻找大数据金融人才!

全世界有3.14 % 的人已经关注了数据与算法之美随着互联网概念不断发展,越来越多的商家进入这一市场。为了在竞争中拉取新用户,培养用户的消费习惯,各种类型的营销和补贴活动层出不穷。为正常用户带来福利的同时,也催生了一批“羊毛…

常用加解密工具集合|视频图片加解密方案

最近工作需要做视频加密解密,大概需求就是摄像头录制好的视频实时加密存储到本地,防止别人拔掉存储卡把视频拷贝走。大胆设想一下,假如现在很多网约车车内都有摄像头,这些对着乘客和司机的车内摄像头都是实时录制视频并存储到本地…

修炼九阴真经Windows Phone开发 (7):本地化应用程序栏Localizing an Application Bar 下...

本节介绍另一个本地化的方法: 在项目中添加资源文件:(这个文件将包含应用程序的默认语言的资源) 将要名称和值添加进去。(作为应用程序中向用户显示字符串值). 重复上面的方法,向项目中添加更多…

matlab编程数字信号,MATLAB--数字信号实验.doc

MATLAB--数字信号实验前言MATLAB 是一套功能强大的工程计算及数据处理软件,广泛应用于工业,电子,医疗和建筑等众多领域。它是一种面向对象的,交互式程序设计语言,其结构完整又优良的可移植性。它在矩阵运算&#xff0c…

统治世界的十大算法

全世界有3.14 % 的人已经关注了数据与算法之美软件正在统治世界。而软件的核心则是算法。算法千千万万,又有哪些算法属于“皇冠上的珍珠”呢?Marcos Otero 给出了他的看法。什么是算法?通俗而言,算法是一个定义明确的计算过程&…

Hosting in .NET Core

在.NET Core中,Host负责应用程序的启动和生命周期管理。除此之外,在Host中还可以设置日志(Logging)、配置(Configuration)和依赖关系注入(Dependency Injection)等。Host将一个常规的控制台应用程序(Console Application)变成了一个可以长时间运行的服务…

hilbert曲线序编码matlab,Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码

Hilbert曲线扫描矩阵的生成算法及其MATLAB程序代码王笋,徐小双(华中科技大学控制科学与工程系,武汉 430074)摘 要Hilbert曲线是一种重要的图像处理工具,在图像处理,特别是图像扫描中广泛应用.为了正确快速的生成Hilbert曲线扫描矩阵,提出了基于矩阵运算的生成Hilber…

java例程练习(一维数组)

public class Test {public static void main(String[] args) {int a[] { 3, 9, 8}; //静态初始化Date days1 [] {new Date(1, 4, 2004),new Date(2, 4, 2004),new Date(3, 4, 2004)};//动态初始化Date [] days2 new Date[3];for (int i 0; i < 3; i) {days2[i] new Da…