什么是备胎算法?_备胎怎么解释

什么是备胎算法?_备胎怎么解释什么是备胎算法?

大家好,又见面了,我是你们的朋友全栈君。

假设有三男(分别是 A ,B ,C )和三女(分别是 x,y ,z ),他(她)们对异性的心仪程度如对话框所示。

比如对于男 A 来说,心仪对象排名为 x 排第一,y 排第二,z 排第三。

今天是特殊节日,你化身为丘比特,来设计一个算法分配对象。

立即接受算法

下面以男生主动追求对象为例来讲解 立即接受算法

一开始男生们都去追求自己 心仪的女生,而女生们面对追求者们立刻做出决定确定对象(如果有多个追求者则选择他们之前心仪程度更高的那个,只有一个的话那就只能选他)。

然后,被拒绝的男生们马上再去追求第二心仪的女生,以此类推,直到配对完毕,如动图所示。

这样做法有一个很严重的问题:当你被你的 No.1拒绝后,再去追求你的 No.2 的时候,你心中的 No.2 可能已经在第一轮中选择了其他人,比如男生 B 在第一轮去表白女生 x,表白失败后想去追求 y,但女生 y 已经和 C 在一起了,悲剧的是 y 眼中的真命天子正是一开始没来表白的男生 B。

最终的匹配情况如下图所示。

虽然现在匹配结束出结果了,每个男生和女生都有对象,但是会出现以下情况。

对于男生 B 来说,虽然他和女生 z 在一起,但其实他更期望和 y 在一起(注意 A 与 x 都是双方的挚爱,拆不开的)。

同时,对于女生 y 来说,虽然她和男生 C 在一起,但其实她更期望和 B 在一起。

即男生 B 和女生 y 都更愿意离开自己的现任对象而彼此在一起。

所以,使用立即接受算法匹配后的结果是一种不稳定的状态结果。

延迟接受算法

“盖尔-沙普利算法”(the Gale-Shapley algorithm),也被称为“延迟接受算法”(deferred-acceptance algorithm),简称“GS算法”。

目前该算法在 高中择校系统、肾脏移植 等实际应用上起到了巨大的作用,你甚至可以在 2012 年诺贝尔经济学奖中看到它的身影。

这个算法一个核心之处在于,合意的要约不会立即被接受,而只是被“抓住”(hold on to),也就是“延迟接受”。

还是以男生主动追求对象为例来讲解 延迟接受算法

首先每个男生在第一轮中向自己最心仪的女生表白,但是各位女生不用立即做决定,而是先 hold 住。

第一轮

第一轮,男生 A 和男生 B 都跟女生 x 表白,女生 x 按捺激动的心情,矜持没有表态直接选男生 A,只是把男生 A 放入考察范围

男生 C 跟女生 y 表白,女生 y 略显失望,但把男生 C 放入了考察范围。

第二轮

第二轮,每个男生再向心中的 No.2 示爱。并且从第二轮开始,每位女生们只保留自己到现在为止所收获的最心仪的男生(但是不用答应他,只hold在心里),而拒绝其他所有人。

而被拒绝的男生(也就是现在尚没有女生 hold 你的男生)则继续在下一轮中向心中排名的下一个女生表白。

以此类推,一轮轮继续下去,直到所有想示爱的男生都示完为止。

最后,每个女生手里都有 hold 的对象。

使用 延迟接受算法 后,最终 A – x ,B – y ,C – z 在一起,并且在这 6 人中,你不可能找到一男一女符合以下条件:他(她)们都更愿意抛弃已有的对象而与彼此在一起。

使用 延迟接受算法 匹配后的结果是一种稳定的状态结果。

结尾语

最后回到标题,对于爱情问题,上面的盖尔-沙普利算法告诉我们一点:

主动追求比被动等待更有希望获得幸福

所以,如果你无法让表白成为你胜利的号角,那倒在进攻的冲锋号上也未尝不可。

如果你觉得该文章不错,不妨

1、点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)

2、关注我,让我们成为长期关系

3、关注公众号「五分钟学算法」,里面已有 100 多篇算法类原创文章,欢迎各位的关注,第一时间阅读我的文章。

转载于:https://juejin.im/post/5ce1fa666fb9a07ecd3d2d2f

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106815.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python面试基础知识_python自学需要哪些基础知识

    Python面试基础知识_python自学需要哪些基础知识python基础知识1.python的常用的数据结构有哪些?2.python的常用的数据类型?3.python生成随机数random(0,10)可以生成包含0~10的随机数吗?4.python反转列表,reverse5.python中有没有用过装饰器、用装饰器的场景,理解装饰器中的逻辑吗?插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML

    2022年8月31日
    2
  • Centos7安装MySQL详细步骤

    Centos7安装MySQL详细步骤Centos7安装MySQL详细步骤首先在虚拟机中安装一个Centos7(VM虚拟机安装Centos7)1.1MySQL安装1.1.1下载wget命令yum-yinstallwget1.1.2在线下载mysql安装包wgethttps://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm1.1.3安装MySQLrpm-ivhmysql57-community-release-el7-8.noar

    2022年6月13日
    25
  • 英伟达,老版本显卡查询接口

    英伟达,老版本显卡查询接口英伟达显卡 老版本显卡驱动查询接口 支持分页 https gfwsl geforce com services toolkit services com nvidia services AjaxDriverSe php func DriverManual amp psid 101 amp pfid 817 amp osID 19 amp languageCode 2052 amp beta 0 amp isWHQL 1 amp dltype 1 amp dch 0 amp u

    2025年8月28日
    1
  • java开发常用工具

    java开发常用工具

    2021年7月10日
    85
  • oracle10g在win10上的安装

    oracle10g在win10上的安装一、下载官网下载地址: https://www.oracle.com/downloads/index.html#menu-downloads或者:链接:http://pan.baidu.com/s/1cGr3PW密码:oz8n下载解压后得到:三个安装包:PL/SQLDe

    2022年10月9日
    2
  • java字符串类型引用与字符类型引用的面试案例

    java字符串类型引用与字符类型引用的面试案例

    2021年7月16日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号