Python教你找到最心仪的对象
规则
单身妹妹到了适婚年龄,要选对象。候选男子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模板用于产生随机数。
建模代码







End.
Python教你找到最心仪的对象的更多相关文章
- Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归
Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...
- python核心高级学习总结6------面向对象进阶之元类
元类引入 在多数语言中,类就是一组用来描述如何生成对象的代码段,在python中同样如此,但是在python中把类也称为类对象,是的,你没听错,在这里你只要使用class关键字定义了类,其解释器在执行 ...
- Python源码剖析——01内建对象
<Python源码剖析>笔记 第一章:对象初识 对象是Python中的核心概念,面向对象中的"类"和"对象"在Python中的概念都为对象,具体分为 ...
- 『流畅的Python』第9章笔记_对象
一.Python风格 以一个二元素向量对象为例 import math from array import array class Vector2d: typecode = 'd' def __ini ...
- Python自动化之django orm之Q对象
Python自动化之django orm之Q对象 什么是Q对象? Encapsulates filters as objects that can then be combined logically ...
- python中的is判断引用的对象是否一致,==判断值是否相等
python中的is判断引用的对象是否一致,==判断值是否相等 a = 10 b = 20 list = [1,2,3,4,5] print(a in list) print(b not in lis ...
- Python帮助函数调试函数 用于获取对象的属性及属性值
Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...
- Python比较操作符、变量赋值、对象拷贝
Python比较操作符.变量赋值.对象拷贝 目录 Python比较操作符.变量赋值.对象拷贝 1. 比较操作符 == 和 is 1.1 区别 1.2 实例 2. 变量及其赋值 2.1 概念和逻辑关系 ...
- Python 为什么会有个奇怪的“...”对象?
本文出自"Python为什么"系列,请查看全部文章 在写上一篇<Python 为什么要有 pass 语句?>时,我想到一种特别的写法,很多人会把它当成 pass 语句的 ...
随机推荐
- Execute SQL Task 如何返回结果数据集
Execute Sql Task的Result DataSet 主要有以下四种,当Execute Sql Task返回结果之后,需要使用SSIS Variable 来接收数据. 例子中使用的数据表代码 ...
- pandas 初识(一)
基本内容 Series: Series 是有一组数据(numpy的数据类型 numpy.ndarray)以及一组数据标签(即索引)组成,可以看成一个一个定长的有序字典(索引值到数据值的一个映射) ob ...
- Vue全家桶介绍
一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...
- 微软职位内部推荐-Software Engineer
微软近期Open的职位: Job Title: Software Engineer Work Location: Suzhou, China This is a once in a lifetime ...
- [!] CocoaPods could not find compatible versions for pod "Folly"问题举例
$ pod install 后出现下面错误: [!] CocoaPods could not find compatible versions for pod "Folly": I ...
- PAT甲题题解-1049. Counting Ones-数学问题
n位数,总共有0~10^n-1共计10^n个数那么所有数出现的总次数变为n*(10^n)个数1出现的次数便是十分之一,所以n位数中,1出现的次数为n*10^(n-1)知道这一个后,接下来就方便求了. ...
- 全局最小割StoerWagner算法详解
前言 StoerWagner算法是一个找出无向图全局最小割的算法,本文需要读者有一定的图论基础. 本文大部分内容与词汇来自参考文献(英文,需***),用兴趣的可以去读一下文献. 概念 无向图的割:有无 ...
- Linux内核分析-两种方式使用同一个系统调用
实验部分 根据系统调用表,选取一个系统调用.我选得是mkdir这个系统调用,其系统调用号为39,即0x27 由于mkdir函数的原型为 int mkdir (const char *filename, ...
- rethinking virtual network embedding..substrate support for path splitting and migration阅读笔记
1.引言 网络虚拟化, 1.支持同一个底层网络有多种网络架构,每种架构定制一个应用或用户社区. 2.也可以让多个服务提供者在共同的物理基础设施上定制端到端的服务.如Voice over IP(VoIP ...
- mark1-git
Administrator@-20131003RY MINGW64 ~ $ pwd /c/Users/Administrator Administrator@-20131003RY MINGW64 ~ ...