题目:
波斯公主到了适婚年龄,要选驸马。候选男子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