首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >算法浅谈——我要怎么才能选到真命天子呢?

算法浅谈——我要怎么才能选到真命天子呢?

作者头像
TechFlow-承志
发布于 2020-03-05 07:53:21
发布于 2020-03-05 07:53:21
88400
代码可运行
举报
文章被收录于专栏:TechFlowTechFlow
运行总次数:0
代码可运行

点击上方蓝字,和我一起学技术。

在很久很久以前,有一个万人迷

她从18岁开始就有数不完的追求者,追她的男生一个个在她的窗前排起了长队。但是她挑来挑去,终究不觉得满意。终于,这个万人迷一天天长大,年老色衰,在她门口排队的男生也越来越少。

她开始后悔拒绝男生时的轻率,怀念起了从前的荣光。她也不知道,最后她是会向现实妥协,选择一个看起来远不是那么好的男生共度一生,还是会就这么一直等下去。

这样的故事其实并不罕见,知乎里关于剩男剩女以及婚嫁的问题屡见不鲜。选择配偶也是我们人生当中的必经之路,苏格拉底说过,人生就是一次无法重复的选择,在婚姻这个问题上尤为明显。

那么问题来了,如果我们是故事中的万人迷,我们应该如何选择配偶呢?

即使是真的万人迷,她可以选择的配偶也一定是有限的。我们可以做一个简单的量化,假设她一年平均有30个追求者,她打算28岁结婚。那么从她18岁开始算起,假设她的魅力保持不变,她一共可以遇到300个潜在的配偶。

这个数字对于每个女生而言各有不同,但是它其实并不重要,并不会影响我们的计算过程。为了简化计算,我们就假设它为n。接着,我们再进一步简化模型,假设这n个男生排成一队,一个一个地来发起追求。我们假设女生面临每个追求者的时候只会有两个选择,一是直接拒绝,二是答应追求,从此牵手共度一生。

那么,我们如何来做一个好的决策呢?

和现实中一样,一种比较聪明的做法是,先和前面的一些男生每个人都相处一段时间,做一个了解,摸清这些男生大概的水平底细之后再认真考虑。抽象成数学模型来,就是女生会直接拒绝掉前面k个男生,从第k+1个男生开始一一和前面k个男生比对。当一个比前面k个男生都要好的男生出现的时候,她果断选择接受,从此和他共度一生。

如此一来,这就成了一个数学问题,究竟这个k应该等于多少,才可以使得女生选中所有男生当中最好的那个的概率最大呢?

所以,我们应该怎么求出这个K呢?

对于某个固定的K,我们假设最佳配偶出现在了第i的位置。想让他能被挑选中,必须要保证前面i-1个人中的最好的配偶出现在前K个人当中。这个概率不难计算,是:

。那么,我们对所有的i进行加权求和即可:

我们假设n是一个很大的值,我们可以先算后面的部分。如果n足够大,可以认为

我们令

我们对P(K)的求导,令它等于0,可以求出P(K)最大时

。这里的e就是数学当中经常出现的欧拉常数,也叫自然底数,

约等于37%。那么,算到了这个结果,这个问题也就有了答案。

如果你是一个万人迷,那么你应该拒绝掉前面37%的追求者,然后在剩下的63%的男士当中挑选一个比前面都强的作为配偶。那么你选到最佳配偶的概率达到最大值,它的概率为37%。

虽然有了答案,但是我们并不知道这个答案对不对,但是没关系,我们是程序员,可以用代码来模拟

我们就按照万人迷的配置来设定好了,假设她一生当中会面临300个追求者。我们假设这三百个追求者的好坏层次不齐,按照分数排序,可以得到一个0到299的序号。排名越靠后,说明分数越大,男生越优质,然后我们再对这些男生进行乱序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random

def generateBoys():
    boys = [i for i in range(300)]
    random.shuffle(boys)
    return boys

接着我们来编写程序的主体,其实也很简单,我们模拟进行许多次同样的配偶选择,模拟出我们通过这种策略能够选中最佳配偶的概率,代码并不难写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# iterations 是模拟择偶的次数
def simulation(iterations=10000):
    matched = 0
    for i in range(iterations):
        # 每次都创建新的追求者集合
        boys = generateBoys()
        # 最佳配偶的序号
        best = max(boys)
        maxi = 0
        partner = 0
        # 计算KK=0.37 * 追求者总数
        pickedNum = int(0.37 * len(boys))
        for j in range(pickedNum):
            maxi = max(maxi, boys[j])
        # 一旦找到比前K个最好的都要好的,就结束
        for j in range(pickedNum, len(boys)):
            if boys[j] > maxi:
                partner = boys[j]
                break
        # 判断是否找到了最佳配偶
        if partner == best:
            matched += 1
    return matched / float(iterations)

最后,我们运行代码,得出的答案是0.3629。当然这也不是一个精确值,也是一个会波动的估算结果。迭代的次数越多,这个得到的结果越逼近真实值。用大量的实验去测算某个事件发生的概率,这个也是统计学上常用的方法。

通过建模,我们把一个抽象的,无从下手的问题,简化成了一个明确的数学问题。通过建立函数求最值的方法,求出了最优解。从结果上来看,如果真有一个姑娘能有这么多追求者,通过一种方法可以拥有37%的概率挑中她的真命天子,也算是非常棒了。

但是数学模型的是理想的,现实和理想总是有些差别。现实中,我们的时间精力是有限的,我们不一定有时间来一一衡量前面追求者的优劣。而且追求者的分布也不一定是随机的,很有可能随着我们自身的变化而变化。比如我们通过自己的努力,去往了更好的学校、公司,那么我们接触到的异性也会更好。

不过尽管如此,这道算法问题对我们还是很有借鉴意义,希望能够给大家带来启发。

今天的文章就到这里,希望大家有所收获。如果喜欢本文,请顺手点个在看或者转发吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
这个问题是我学到的比较有趣的算法问题前几名了,也是当年我们ACM校队面向新生宣讲的时候选择的例题。我们觉得用找对象这种新生会比较感兴趣的问题来忽悠他们,他们上钩的可能性比较大XD。
TechFlow-承志
2020/07/24
7590
学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
波斯公主选驸马:关于算法和重大决策
大学时的一道数学题 我大学的专业是数学。有一次,教授给出了《波斯公主选驸马》题「1」,如下: 波斯公主到了适婚年龄,要选驸马。候选男子100名,都是公主没有见过的。百人以随机顺序,从公主面前逐一经过。 每当一位男子在公主面前经过时,公主要么选他为驸马,要么不选。如果选他,其余那些还没有登场的男子就都遣散回家,选驸马的活动也 over 了。如果不选,当下这名男子就离开,也就是 pass 掉此人,下一人登场。被 pass 掉的,公主不可以反悔再从选。 规则是,公主必须在这百人中选出一人做驸马。也就是说,如果前9
数据派THU
2018/01/26
2.5K1
《非诚勿扰》中的37%法则
在每期《非诚勿扰》的节目上,面对一位位男嘉宾的到来,24 位单身女生要做出不止一次“艰难的决定”:到底要不要继续亮灯?把灯灭掉意味着放弃了这一次机会,继续亮灯则有可能结束节目之旅,放弃了未来更多的选择。
Defu Li
2019/01/23
1K0
《非诚勿扰》中的37%法则
恋爱模型的简单构架
前言: 感谢微信群的各位大牛们和忆臻学长的帮助,让我能够完成这个文章。这个文章的开始是这一段时间看到我周围的小伙伴在跟很多的妹子聊天后总是无疾而终,过程虽然有所不同,但是起点和终点大致相同,联想到以前看过的炮灰模型(前半部分是炮灰模型),所以我想能不能可以用一些统计学的方法去概述这个现象并且发现这其中的规律,以便让广大的男屌丝们找到自己合适的另一半。 众所周知生活中涉及到感情的事情是很复杂的,把所有可能影响的因素都考虑到几乎是不可能的。为此我们先对现实进行简化,并做出一些合理的假设,考虑比较简单的一种情况
云时之间
2018/04/11
1.4K0
恋爱模型的简单构架
炮灰模型:女生如何选择追求者的数学模型?
今年的520撞上了周六,终于有时间可以从早嗨到晚了!不知道有多少小伙伴正在外,和亲爱的Ta一起享受温馨时光呢?没有伴儿的小伙伴们也不要灰心,今天的推送,看似烧脑,其实正是想为那些「想爱」的小伙伴们加油打气。幸福就在不远方,Fighting!朋友~ 引言: 上周我的一个朋友第N 次向女生表白遭到拒绝,作为好朋友的我除了同情之外觉得应该做点什么。之前一次聊天受到 菠菜 的启发,加上出于对数学的兴趣,我对女生“选择与拒绝”的策略试着做了一个简单的建模,并得出比较有意义的结论。 摘要 每一个女生都渴望找到自己心中
大数据文摘
2018/05/24
1.3K0
Python教你找到最心仪的对象
專 欄 ❈ Toby,Python中文社区专栏作者,目前供职于国内最大的医药大数据平台,任数据分析组长。关注自然语言处理,英文密码学,医药统计学。 博客: http://www.cnblogs.com/webRobot ❈—— 规则 单身妹妹到了适婚年龄,要选对象。候选男子100名,都是单身妹妹没有见过的。百人以随机顺序,从单身妹妹面前逐一经过。每当一位男子在单身妹妹面前经过时,单身妹妹要么选他为配偶,要么不选。如果选他,其余那些还没有登场的男子就都遣散回家,选配偶的活动也 over 了。如果不选,当下这
Python中文社区
2018/01/31
8150
Python教你找到最心仪的对象
机器学习之从极大似然估计到最大熵原理以及EM算法详解
极大似然估计是建立在极大似然原理的基础上的一个统计方法,极大似然原理的直观想法是,一个随机试验如有若干个可能的结果A,B,C,... ,若在一次试验中,结果A出现了,那么可以认为实验条件对A的出现有利,也即出现的概率P(A)较大。极大似然原理的直观想法我们用下面例子说明。设甲箱中有99个白球,1个黑球;乙箱中有1个白球.99个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球,这一黑球从乙箱抽取的概率比从甲箱抽取的概率大得多,这时我们自然更多地相信这个黑球是取自乙箱的。一般说来,事件A发生的概率与某一未知参数 \theta 有关, \theta 取值不同,则事件A发生的概率P(A|\theta )也不同,当我们在一次试验中事件A发生了,则认为此时的\theta 值应是t的一切可能取值中使P(A|\theta )达到最大的那一个,极大似然估计法就是要选取这样的t值作为参数t的估计值,使所选取的样本在被选的总体中出现的可能性为最大。
大黄大黄大黄
2018/04/01
3.2K17
机器学习之从极大似然估计到最大熵原理以及EM算法详解
妹子如何运用R语言数据分析选择心仪的对象?
前提假设 妹子们一生中可以遇到100个追求者,追求者的优秀程度符合正态分布; 每个妹子都具备判断并比较追求者优秀程度的能力; 接受或拒绝一个追求者后永远无法后悔。 那么,问题来了 男神这么多,当遇到选择困难症时,如何选择才能获得最优结果? 如果人的优秀程度符合均值为80,方差20的正态分布,随机产生100个追求者,其优秀程度分布情况见下图: p=rnorm(100,80,20) hist(p,main="追求者--统计", ylab="数量", xlab="优秀程度", col=rainbo
机器学习AI算法工程
2018/03/14
1.1K0
妹子如何运用R语言数据分析选择心仪的对象?
机器学习之从极大似然估计到最大熵原理以及EM算法详解
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/78774972
大黄大黄大黄
2018/09/14
1.5K0
机器学习之从极大似然估计到最大熵原理以及EM算法详解
大数据专家教你用数据模型来找女朋友
男生和女生分别是来自不同星球的科学事实已经众所周知的了.男生们总是认为,女生们都是迷一样的生物,他们的情感状态浮动似乎是以秒单位在变化的,难以理解,更勿论预测了!而女生们觉得男生都是没有感觉动物,完全不能理解什么叫感受-尽管已经告诉他们N次了!这种男女之间的根本差别,导致了他们之间的感情关系是受一种超级无敌复杂的系统所支配的. 不过,我们可以用一个叫隐式马尔可夫(Hidden Markov Model)的数学模型来分析这个系统。 决定性系统 首先我们来看看一种最简单的预测系统–决定性系统. 在这个系统中,如
CSDN技术头条
2018/02/09
1K0
大数据专家教你用数据模型来找女朋友
【机器学习基础】人人都能看懂的EM算法推导
估计有很多入门机器学习的同学在看到EM算法的时候会有种种疑惑:EM算法到底是个什么玩意?它能做什么?它的应用场景是什么?网上的公式推导怎么看不懂?
Ai学习的老章
2021/01/08
9240
【机器学习基础】人人都能看懂的EM算法推导
一文轻松get朴素贝叶斯算法,以及女朋友
作者 | 忆臻 来源 | 深度学习这件小事 【人工智能头条导读】朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法,是经典的机器学习算法之一,处理很多问题时直接又高效,因此在很多领域有着广泛的应用,如垃圾邮件过滤、文本分类等。也是学习研究自然语言处理问题的一个很好的切入口。朴素贝叶斯原理简单,却有着坚实的数学理论基础,对于刚开始学习算法或者数学基础差的同学们来说,还是会遇到一些困难,花费一定的时间。比如小编刚准备学习的时候,看到贝叶斯公式还是有点小害怕的,也不知道自己能不能搞定。至此,人工智能头条特
用户1737318
2018/07/20
6210
机器学习(16)——EM算法示例
算法思想:含有隐变量的极大似然估计 我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。 但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。怎么办呢?这就是EM算法可以派上用场的地方了。那么先复习一下极大似然估计。 极大似然估计(MLE) 直接举个例子: 某位同学与一位猎人一起外出打猎,一只野兔从前方窜过。只听一声枪响,野兔应声到下,如果要你推测,这一发命中的子弹是谁打
DC童生
2018/04/27
1.7K0
机器学习(16)——EM算法示例
从最大似然到EM算法浅解「建议收藏」
机器学习十大算法之一:EM算法。能评得上十大之一,让人听起来觉得挺NB的。什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题。神为什么是神,因为神能做很多人做不了的事。那么EM算法能解决什么问题呢?或者说EM算法是因为什么而来到这个世界上,还吸引了那么多世人的目光。
全栈程序员站长
2022/06/27
4680
从最大似然到EM算法浅解「建议收藏」
HMM超详细讲解+代码[通俗易懂]
#写在前面 老习惯,正文之前瞎扯一通。HMM学了很久,最初是在《统计学自然语言处理》里面就学到了相关内容,并且知道HMM CRF一直都是NLP比较底层比较基础且较为有效的算法模型(虽然感觉还是挺难的),之前仅仅局限在了解前向算法和维特比算法上。也没有去写代码,只知道个大概思路。最近从52nlpHMM系列讲解再次入手,结合多篇博客、github项目以及李航的《统计学习方法》比较全面的对HMM做了一次学习,要求对自己强制输出,所以在整体公式推导没有什么大问题之后,昨天花了一天完善了代码,今天来做一个全面的讲解,为人为己。 本文还是坚持自己的风格,讲解和公式穿插进行,数学公式永远是最精炼的语言 ^_^
全栈程序员站长
2022/11/03
2K0
机器学习之最大期望(EM)算法
最大期望(Expectation Maximum)算法是一种迭代优化算法,其计算方法是每次迭代分为期望(E)步和最大(M)步。我们先看下最大期望算法能够解决什么样的问题。
小一
2019/08/14
2.3K0
机器学习之最大期望(EM)算法
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
假设目前有100个男生和100个女生的身高,共200个数据,但是我们不知道这200个数据中哪个是男生的身高,哪个是女生的身高。假设男生、女生的身高分别服从正态分布,但每个样本从哪个分布抽取的,我们目前是不知道的。这个时候,对于每一个样本,就有两个方面需要猜测或者估计: 这个身高数据是来自于男生还是来自于女生?男生、女生身高的正态分布的参数分别是多少?EM算法要解决的问题正是这两个问题。
用户1621951
2019/10/18
2.1K0
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
如何用数学方法估算一个女生前男友的数量?
{白羊座, 金牛座, 双子座, 巨蟹座, 狮子座, 处女座, 天秤座, 天蝎座, 射手座, 摩羯座, 水瓶座, 双鱼座}
开发者技术前线
2020/11/23
5490
如何用数学方法估算一个女生前男友的数量?
一文详尽解释EM算法
EM 算法,全称 Expectation Maximization Algorithm。期望最大算法是一种迭代算法,用于含有隐变量(Hidden Variable)的概率参数模型的最大似然估计或极大后验概率估计。
石晓文
2019/11/21
8570
没有公式如何看懂EM算法?
EM(Expectation Maximization: 期望最大化)这个问题感觉真的不太好用通俗的语言去说明白,因为它很简单,又很复杂。简单在于它的思想,简单在于其仅包含了两个步骤就能完成强大的功能,复杂在于它的数学推理涉及到比较繁杂的概率公式等。如果只讲简单的,就丢失了EM算法的精髓,如果只讲数学推理,又过于枯燥和生涩,但另一方面,想把两者结合起来也不是件容易的事。 一、最大似然 扯了太多,得入正题了。假设我们遇到的是下面这样的问题: 假设我们需要调查我们学校的男生和女生的身高分布。你怎
智能算法
2018/04/03
7760
没有公式如何看懂EM算法?
推荐阅读
相关推荐
学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档