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

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

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

假设有三男(分别是 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据归一化处理transforms.Normalize()

    数据归一化处理transforms.Normalize()数据归一化处理transforms.Normalize()1.图像预处理Transforms(主要讲解数据标准化)1.1理解torchvisiontransforms属于torchvision模块的方法,它是常见的图像预处理的方法在这里贴上别人整理的transforms运行机制:可以看出torchvision工具包中包含三个主要模块,主要讲解学习transformstorchvision.transforms:常用的数据预处理方法,提升泛化能力包括:数据中心化、数据标准化、缩放、裁剪、旋

    2022年6月23日
    119
  • 未将对象引用设置到对象的实例–可能出现的问题总结

    未将对象引用设置到对象的实例–可能出现的问题总结

    2021年11月23日
    44
  • docker镜像操作_docker 运行镜像

    docker镜像操作_docker 运行镜像前言Docker的三大核心概念:镜像、容器、仓库。初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似我们可以把镜像看作类,把容器看作类实例化后的对象。|

    2022年7月31日
    5
  • 阿里面试失败后,一气之下我图解了Java中18把锁「建议收藏」

    目录乐观锁和悲观锁独占锁和共享锁互斥锁和读写锁公平锁和非公平锁可重入锁自旋锁分段锁锁升级(无锁|偏向锁|轻量级锁|重量级锁)锁优化技术(锁粗化、锁消除)乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往坏的方向发展。举个生活中的例子,假设厕所只有一个坑位了,悲观锁上厕所会第一时间把门反锁上,这样其他人上厕所只能在门外等候,这种状态就是「阻塞」了。回到代码世界中,一个共享数据加了悲观锁,那线程每次想操作这个数据前都会假设其他线程.

    2022年4月18日
    39
  • pytest怎么安装_pytest安装

    pytest怎么安装_pytest安装pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月30日
    18
  • seata saga模式_lua状态机

    seata saga模式_lua状态机全网首发:SeataSaga状态机设计器实战。带你从0开始搭建一个基于springboot+seata的可执行Saga分布式事务demo,并避开状态机设计器中的各自坑

    2025年12月9日
    4

发表回复

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

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