规则

单身妹妹到了适婚年龄,要选对象。候选男子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教你找到最心仪的对象的更多相关文章

  1. Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归

    Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 目录 Python函数03/函数名的第一类对象及使用/f 格式化/迭代器/递归 内容纲要 1.函数名的第一类对象及使用 2.f ...

  2. python核心高级学习总结6------面向对象进阶之元类

    元类引入 在多数语言中,类就是一组用来描述如何生成对象的代码段,在python中同样如此,但是在python中把类也称为类对象,是的,你没听错,在这里你只要使用class关键字定义了类,其解释器在执行 ...

  3. Python源码剖析——01内建对象

    <Python源码剖析>笔记 第一章:对象初识 对象是Python中的核心概念,面向对象中的"类"和"对象"在Python中的概念都为对象,具体分为 ...

  4. 『流畅的Python』第9章笔记_对象

    一.Python风格 以一个二元素向量对象为例 import math from array import array class Vector2d: typecode = 'd' def __ini ...

  5. Python自动化之django orm之Q对象

    Python自动化之django orm之Q对象 什么是Q对象? Encapsulates filters as objects that can then be combined logically ...

  6. python中的is判断引用的对象是否一致,==判断值是否相等

    python中的is判断引用的对象是否一致,==判断值是否相等 a = 10 b = 20 list = [1,2,3,4,5] print(a in list) print(b not in lis ...

  7. Python帮助函数调试函数 用于获取对象的属性及属性值

    Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...

  8. Python比较操作符、变量赋值、对象拷贝

    Python比较操作符.变量赋值.对象拷贝 目录 Python比较操作符.变量赋值.对象拷贝 1. 比较操作符 == 和 is 1.1 区别 1.2 实例 2. 变量及其赋值 2.1 概念和逻辑关系 ...

  9. Python 为什么会有个奇怪的“...”对象?

    本文出自"Python为什么"系列,请查看全部文章 在写上一篇<Python 为什么要有 pass 语句?>时,我想到一种特别的写法,很多人会把它当成 pass 语句的 ...

随机推荐

  1. python中eval函数作用

    eval函数就是实现list.dict.tuple与str之间的转化str函数把list,dict,tuple转为为字符串 一.字符串转换成列表 a = "[[1,2], [3,4], [5 ...

  2. R绘图 第九篇:绘制散点图和气泡图(ggplot2)

    绘制散点图(scatterplots)使用geom_point()函数,气泡图(bubblechart)也是一个散点图,只不过点的大小由一个变量(size)来控制.散点图潜在的最大问题是过度绘图:当一 ...

  3. LeetCode Search for a Range (二分查找)

    题意 Given a sorted array of integers, find the starting and ending position of a given target value. ...

  4. 基于.NET Standard的分布式自增ID算法--Snowflake代码实现

    概述 上篇文章介绍了3种常见的Id生成算法,本篇主要介绍如何使用C#实现Snowflake. 基础字段 /// <summary> /// 工作节点Id(长度为5位) /// </s ...

  5. 批处理修改Hosts文件

    @echo off set stHosts=127.0.0.1 www.XXX.com FOR /F "eol=# tokens=1 delims=" %%i in (%Syste ...

  6. Unity3D Shader 学习笔记(一):初识Shader

    第一节:图形处理器简史 GPU发展简史 GPU英文全称Graphic Procssing Unit. T&L变换和光照流水线 可编程GPU GPU的优点和缺点 第二节:Unity Shader ...

  7. Python中的字典详解

    https://www.cnblogs.com/yjd_hycf_space/p/6880026.html

  8. Linux内核第一节

    存储程序计算机工作模型 存储程序计算机——冯诺依曼体系结构 IP:寄存器,总是指向内存的代码段.IP(16位) 32位(EIP) 64位(RIP). 内存:保存数据和指令. CPU:CPU从IP指向的 ...

  9. 实现文字左右滚动 javascript

    参考链接:http://www.86y.org/art_detail.aspx?id=587 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  10. 使用Visual Studio 2013进行单元测试

    使用Visual Studio 2013进行单元测试 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测 ...