寻找最大的钻石有多难

HUST微软技术俱乐部又要招新了,在准备招新工作的时候,我顺便翻阅了一下去年的笔试题,其中能力测试第一题是这样的:

  电梯问题——一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。您乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问:怎样才能拿到最大的一颗﹖(提示:没有完美的策略,合理的取舍是解决问题的必要手段)
 
这是一个经典的面试题,如题所言,这道题没有完美的策略能确保你拿到最大的钻石。我们所认可的答案有很多种。比如1-3层选出大中小的标准,4-6层验证前面的结果,7-9层做出选择,10层保底。或者1-5层确定大中小标准,6-10层选择都可以。首先要正确理解题意,一些过于发散的答案(比如走楼梯,电梯来回)不应该被接受,因为这些答案已经违背了题意,其次是一个细节问题,至少需要选择一颗宝石,哪怕1-9层都错过了第10层再小也要选择,不能空手不取。最重要的是,要能体现出你的策略,要有一个解决问题的思路,尽管它可能不一定很正确。
回到题目本身,到底有没有办法能让你有一个较大的概率得到最大的钻石呢?我们不妨来分析一下。假设按照“丢硬币”的心理,我们随便选一层楼去拿钻石(这也算是一种方案,至少它让我们不必犹豫不决,让我们把责任推给上天)。显然,这种方式我们有10%的概率拿到最大钻石,这概率确实比较小。
还有一种似乎复杂一些的策略是:我们把十层楼分成5+5的两部分,前5层均不拿钻石,通俗的话来说,在前5层,你就是抱着看一看的心理。然后到后5层的时候,你第一次见到比前5层都大的钻石,就拿走那一颗。这种情况下,我们把 最大钻石出现之前的所有钻石的最大的那一颗记作b2,只要b2位于前5层,则最后一定能得到最大的钻石。此时,我们计算得到最大钻石的概率为:
p=(1/10)* 1+(1/10)*(5/6)+(1/10)*(5/7)+(1/10)*(5/8)+ (1/10)*(5/9)
表示最大钻石出现在不同位置上(第6-10层)的时候,b2出现在前5层的概率。
这样计算出来的概率为 37.28%! 这可是一个不小的概率了!
 
  但是,还有更有效的办法么?细心的人会发现,我们为什么要将十层楼分成5+5的两部分呢?分成n+(10-n)层会不会有更优的解呢?基于前面的模型,我们很容易得出下面的事实:只要b2出现在前n层,则一定能得到最大的钻石。此时的概率为:
  p=(1/10)[(1+n/(n+1)+n/(n+2)+...+n/9)] --- (1)
  它表示当最大的钻石出现在n+1到第10层的时候,b2出现在前n层的概率。我们令(1)式对应函数f(n),用matlab来可以绘制出这个函数的大致曲线(你也可以用Excel 或者其他数学工具):
 
  当n取3的时候(n实际上只能取整数),概率取得最大值为 39.87%!这个值或许比你想象中要大了许多。也就是说当你对前三层楼的钻石持观望态度,后面一旦遇到比这前三个都大的钻石就立即取出。这样你得到最大钻石的概率为39.87%
我们还可以来看看更为一般的情况,假设这个楼并不止9层,它有X层高,我们希望得出最大概率与X的关系。那么和(1)式同样的道理,拿到最大钻石的概率由下面的式子确定:
 p=1/X[n/n+n/(n+1)+...+n/X] -- (2)
我们可以使用Matlab大致绘制出p-X的曲线:
可以看到,当X趋近正无穷大的时候,这个概率是趋近0.35到0.4之间的某个数值的(后面我们证明之),通过对(2)求极值可求出该值。令(2)式右边为G(n)为了方便求解,我们假定G(n)是个连续函数。 G(n)=n/X[1/n+1/(n+1)+...+1/(X-1)] ,中括号中是一个调和级数的一部分,无法直接用公式求解。不过,当X趋近与无穷大的时候,G(n)可以写成如下形式G(n)=n/X[ln(X-1)-ln(n)] 约等于 n/X[ln(X)-ln(n)]=-(n/X)ln(n/X) --- (3)
令(3)式右边为H(n), 易知H(n)为连续可导的凹函数,一阶导数H‘(n) = - (1+ln(n/X)), 令 H'(n) = 0,得 n=X/e,带入H(n)得H(X/e)=1/e 约为0.3679。换句话说,就算再高的楼,只要你策略选择得当,你也能有至少36.79%的概率能拿到最大钻石。
 
  你还有更好的策略吗?欢迎在留言中与我交流;-)

Freesc
  9月14日

寻找最大的钻石有多难相关推荐

  1. 6美元进公园随便挖钻石

    一对来自美国得克萨斯州的夫妇9月23日在阿肯色州的"钻石坑"州立公园挖到一颗重达6.35克拉的钻石.这是该公园自开放以来游客挖到的第八大天然钻石,也是近8年来在这里发现的最大一颗钻 ...

  2. AI模型看看视频,就学会了玩《我的世界》:砍树、造箱子、制作石镐样样不差...

    作者丨陈萍.小舟 来源丨机器之心 <我的世界>里,玩家不一定都是人类,现在 AI 也会玩了. <我的世界>是全球知名度最高的开放世界游戏.小朋友只需观看十分钟的教学视频,就能学 ...

  3. 成就你一生的100个哲理31-40

    修身养性篇31.态度决定胜负 如果老天爷不曾给你显赫的家世和出身名校的高等学历,那么,"态度"将是惟一能使你胜出的金钥匙.        1997年12月,英国报纸刊登了一张英皇 ...

  4. fc天使之翼2020修改版下载_海岛奇兵无限钻石修改版下载-海岛奇兵无限钻石修改版下载2020...

    海岛奇兵无限钻石修改版绝对是小伙伴们都在寻找的资源,修改众多资源,玩家可以解锁不同兵种建立更强大的部队啦!通过塔防与掠夺不断强化我方战力,合理运用策略至关重要,喜欢的朋友千万别错过! 修改无限钻石.金 ...

  5. python一个月能学成嘛-学过 Python 的人没有告诉你,年入百万有多难

    原标题:学过 Python 的人没有告诉你,年入百万有多难 我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的: 先从 Python 的发展历史开始,介绍 Python ...

  6. 深入super,看Python如何解决钻石继承难题

    1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object):def __init__ ...

  7. 非京籍上学有多难?从这些数据看真相

    9月,转眼又是一年开学季,从大学到小学都在有序的开学. 而每到升学季,有关非京籍孩子上学难的话题都会成为热门. 从4月底开始,北京多区对已经在京就读的非京籍学生,也提出了审核四证的要求,加之受今年疫情 ...

  8. python重点知识 钻石_python——子类对象如何访问父类的同名方法

    1. 为什么只说方法不说属性 关于"子类对象如何访问父类的同名属性"是没有意义的.因为父类的属性子类都有,子类还有父类没有的属性,在初始化时,给子类对象具体化所有的给定属性,完全没 ...

  9. java内存泄漏案例_寻找内存泄漏:一个案例研究

    java内存泄漏案例 一周前,我被要求修复一个有内存泄漏问题的webapp. 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏,我想这有多难. 但是事实证明这是一个挑战. 12小时后,我发现该应 ...

最新文章

  1. Flex实现页面多态--state对象
  2. 数据蒋堂 | 数据库的封闭性
  3. 最小哈希 minhash
  4. “jQuery风暴” 推荐及配套代码下载
  5. <马哲>商品二因素及其辩证关系2017-12-27
  6. [BZOJ 3931][CQOI2015]网络吞吐量(SPFA+网络流)
  7. java 反射 找不到方法_Java获取反射的三种方法
  8. RTKLIB的主要功能
  9. Windows10 bash 巨硬和Canonical Ltd.的PY交易
  10. 缓存与数据库的一致性
  11. jetty java 实例_java 在Jetty9中使用HttpSessionListener和Filter实例详解
  12. 一步一步asp.net_三层构架总结
  13. php 域名方法,PHP获取域名方法
  14. 数据结构实验1-线性表的顺序实现
  15. 学习笔记之《Android应用案例开发大全》(全部调试过代码)
  16. keeplive的使用
  17. 计算机常见的硬件故障及维护,计算机硬件故障原理及日常维护
  18. 【双十一精选】史上最强的宝贝详情页设计思路以及操作流程
  19. Excel中文转拼音
  20. c语言中swap表示什么意思,swap是什么意思_单片机里的SWAP A是什么意思啊?

热门文章

  1. excel时间戳‘精准’转换为日期
  2. 一步一步教你做ios推送 pem证书制作 php推送
  3. 3D图形:矩阵的行列式,矩阵的逆、正交矩阵、齐次矩阵
  4. frp实现socks5代理
  5. android充值金币功能,运营人员必读:手机游戏充值流程及问题详解
  6. 谷歌SEO的内链优化技巧
  7. 正点原子IMX6ULL开发板设置静态IP
  8. Away3D--------------关于太阳(光晕和上帝之光)的表现
  9. 谷歌浏览器,360浏览器,360极速浏览器等浏览器快捷键
  10. 优秀的产品经理需要具备的能力和素质