Processing math: 100%

趣味题——寻找最优者

寻找最优者:不可逆的做出选择,如何使得选到最优者的概率最大


题目描述

  • 由于无人知道缘分何时到来,假设人的一生会遇到100个异性,这100个人参差不齐,其中有个人是最好的,100人随机的排着队出现,而我们对每个人必须决定是否接受,而且一旦决定后不能修改,那么用什么策略选择更有机会选到最好的那一个呢?

解决方案

策略设想

  • 拒绝前k个人,然后从第k+1个开始,只要优于前面的所有人,则接受
  • k值的设定比较难,太小了容易找到不好的,太多了容易错过最好的

证明

  • 假设最优者出现在第i(k<in)个(事件A),那么最优者被选中(事件B)的概率为前i-1个中的最优者在前k个人中的概率
    P(B|A)=ki1

    • P(B|A)=P(|i)
  • 最优者出现在第i个的概率为
    P(B)=1n

  • 最优者被选中的概率为

  • 接下来的证明用到了调和级数的和,详情参考调和级数的和
    ni=11i=ln(n)+γ+ϵn

    • γ为欧拉-马歇罗尼常数,近似值为γ≈0.57721,下面的推导都不需要精确解的,所以可以使用该公式
    • ϵn约等于12n,随着n的不断增大,ϵn趋于0
      P(B)=AP(B,A)=AP(B|A)P(A)=ni=k+1ki11n=ni=k+1kn1i1=knni=k+11i1=knn1i=k1i=kn(n1i=11ik1i=11i)kn((ln(n1)+C)(ln(k1)+C))=knln(n1k1)
  • 当n和k足够大时有

    • (不能证明k也会足够大,但是直觉上n足够大k也会足够大,因为n足够大时往往需要拒绝更多的人)
      n1k1=nk
  • x=kn,则有
    f(x)=xln1xf(x)=ln(1x)+(1x2xx)=ln(1x)1

  • f(x)的最大值,令f(x)=0
    ln(1x)1=0

  • 解方程得
    x=1e

  • 也就是说当kn=1e时,找到最优者的概率最大

策略描述

  • 拒绝前ne个人(也就是拒绝前37%的人),然后从第ne+1个开始,只要优于前面的所有人,则接受
  • 这种方式可以保证我们有最大的概率找到最优者