zoukankan      html  css  js  c++  java
  • (数学)波斯公主选驸马

    题目:

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

      任务是,给公主设计选择方法,让她有最高概率选到百人中最英俊的男子为驸马。​​

    思路:

      说明一点是,没有任何选择方法能够保证公主一定选择到最帅的帅哥。对于任何选择方法,总存在某些出场的顺序,让公主与帅哥错过。所以,题目所问的,不是必胜的选法(因为不存在),而是概率最高的选法。

      先给出答案:先拒绝前面的100/e名男子(e为自然对数,2.718...,100/e约等于37),记住这37名男子最英俊的一个,接着在后面的男子中,找到第一个比前面37名中最英俊的还英俊的男子,即为驸马。如果没遇上,那只好选第100个男子。

      抽象为数学模型:即先拒绝掉k个人,然后在后面的人中找出更好的。

      理论推导:如何求出最优的k呢?

      对于某个固定的 k,如果最适合的人出现在了第 i 个位置(k < i ≤ n),要想让他有幸正好被 MM 选中,就必须得满足前 i-1 个人中的最好的人在前 k 个人里,这有 k/(i-1) 的可能。考虑所有可能的 i,我们便得到了试探前 k 个男生之后能选中最佳男生的总概率 P(k):


      用 x 来表示 k/n 的值,并且假设 n 充分大,则上述公式可以写成:


      对 -x · ln x 求导,并令这个导数为 0,可以解出 x 的最优值,它就是欧拉研究的神秘常数的倒数—— 1/e !

      这个结论可以通过37%法则模拟实验来测试一下有多大概率选中,有空再贴出代码。

    参考资料:

    http://www.e-future.com.cn/news_details.php?nid=1702

    http://songshuhui.net/archives/57722

      

           

  • 相关阅读:
    linq
    存储过程动态显示top条数
    js正则表达式
    WebClient异步下载文件
    C++ socket编程基础(ZT)
    Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令(转载)
    C#获取各种格式的系统时间
    C++中对sprintf()函数的说明(转)
    史上最全前端面试题(含答案)B篇
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4966209.html
Copyright © 2011-2022 走看看