Python教你找到最心仪的对象

專 欄

Toby,Python中文社区专栏作者,目前供职于国内最大的医药大数据平台,任数据分析组长。关注自然语言处理,英文密码学,医药统计学。

博客:

http://www.cnblogs.com/webRobot

——

规则

单身妹妹到了适婚年龄,要选对象。候选男子100名,都是单身妹妹没有见过的。百人以随机顺序,从单身妹妹面前逐一经过。每当一位男子在单身妹妹面前经过时,单身妹妹要么选他为配偶,要么不选。如果选他,其余那些还没有登场的男子就都遣散回家,选配偶的活动也 over 了。如果不选,当下这名男子就离开,也就是 pass 掉此人,下一人登场。被pass 掉的,单身妹妹不可以反悔再从选。规则是,单身妹妹必须在这百人中选出一人做配偶,也就是说,如果前99人单身妹妹都看不中的话,她必须选择第100名男子为配偶,不管他有多么丑陋。任务

给单身妹妹设计选择方法,让她有最高概率选到百人中最英俊的男子为配偶。说明一点是,没有任何选择方法能够保证单身妹妹一定选择到最帅的帅哥。对于任何选择方法,总存在某些出场的顺序,让单身妹妹与帅哥错过。所以,题目所问的,不是必胜的选法(因为不存在),而是概率最高的选法。

算法 因为并不是要讨论数学,我这里就直接给出答案了:最佳选法是 pass 掉最开始的 100/e 名男子(e = 2.718… 是自然对数,即 100/e 约等于 37)。但是记录下这 37 名男子中最英俊者。之后鱼贯而来的男子中,出现的第一位英俊程度超越所有前 37 人者,即为配偶。如果人都走光了,也没出现这么一位 Mr. Right,那么就只好选择第 100 位男子。

如果你是这百名男子中的一名,并且你能够决定自己出场的名次,你会选择在什么时候出场,以最大提高自己被选的概率?

答案是第 38 名。你不会选择在38名之前,因为你被选的概率是零(假设我们的单身妹妹学过高等数学,知道最佳选法)。你也不会选择后于38,因为你前面每多一个人,就意味着多了一分单身妹妹选上他的机会。

如果你有一位意中人,你当然要努力去追求幸福,但你可能也要想一下,这是否是最好的时机?

37% 法则“实测”! 37% 法则的效果究竟如何呢?我们在计算机上编写程序模拟了当 n = 30 时利用 37% 法则进行选择的过程(如果MM始终未接受求爱者,则自动选择最后一名求爱者)。编号越小的男生越次,编号为 30 的男生则表示最佳选择。程序运行 10000 次之后,竟然有大约 4000 次选中最佳男生,可见 37% 法则确实有效啊。

建模测试图 变了几个参数试验次数n,number配偶人数,但结果相同,最优秀的30号配偶被选中概率最高。

e确实是宇宙数,e无所不在。。。

我们用python来建模,以下是全部代码。这里要导入numpy,math模块用于数学计算。Pylab用于数据可视化。Random模板用于产生随机数。

建模代码

本文分享自微信公众号 - Python中文社区(python-china)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

Python深入05 装饰器

装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,比如在Py...

238100
来自专栏Vamei实验室

Python标准库10 多进程初步 (multiprocessing包)

我们已经见过了使用subprocess包来创建子进程,但这个包有两个很大的局限性:1) 我们总是让subprocess运行外部的程序,而不是运行一个Python...

22670
来自专栏Vamei实验室

Python标准库12 数学与随机数 (math包,random包)

我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考虑选择标准库之外的n...

30480
来自专栏Vamei实验室

Python标准库09 当前进程信息 (os包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 我们在Linux的概念与体系,多次提及进程...

23980
来自专栏Vamei实验室

Python深入03 对象的属性

Python一切皆对象(object),每个对象都可能有多个属性(attribute)。Python的属性有一套统一的管理方案。 属性的__dict__系统 对...

21470
来自专栏Vamei实验室

Python补充05 字符串格式化 (%操作符)

在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。Python中内置有对字符串进行格式化的操作%。 模板 格式化字符串时...

25690
来自专栏Vamei实验室

Python标准库08 多线程与同步 (threading包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Python主要通过标准库中的thread...

29150
来自专栏Vamei实验室

Python应用02 Python服务器进化

**注意,在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包...

24260
来自专栏Vamei实验室

Python标准库11 多进程探索 (multiprocessing包)

在初步了解Python多进程之后,我们可以继续探索multiprocessing包中更加高级的工具。这些工具可以让我们更加便利地实现多进程。 进程池 进程池 (...

22350
来自专栏Vamei实验室

Python深入04 闭包

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 闭包(closure)是函数式编程的重要的...

224100

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励