寻找最优者:不可逆的做出选择,如何使得选到最优者的概率最大
题目描述
- 由于无人知道缘分何时到来,假设人的一生会遇到100个异性,这100个人参差不齐,其中有个人是最好的,100人随机的排着队出现,而我们对每个人必须决定是否接受,而且一旦决定后不能修改,那么用什么策略选择更有机会选到最好的那一个呢?
解决方案
策略设想
- 拒绝前k个人,然后从第k+1个开始,只要优于前面的所有人,则接受
- k值的设定比较难,太小了容易找到不好的,太多了容易错过最好的
证明
假设最优者出现在第i(k<i≤n)个(事件A),那么最优者被选中(事件B)的概率为前i-1个中的最优者在前k个人中的概率
P(B|A)=ki−1- P(B|A)=P(最优者被选中|第i个为最优者)
最优者出现在第i个的概率为
P(B)=1n最优者被选中的概率为
接下来的证明用到了调和级数的和,详情参考调和级数的和
n∑i=11i=ln(n)+γ+ϵn- γ为欧拉-马歇罗尼常数,近似值为γ≈0.57721,下面的推导都不需要精确解的,所以可以使用该公式
- ϵn约等于12n,随着n的不断增大,ϵn趋于0
P(B)=∑AP(B,A)=∑AP(B|A)P(A)=n∑i=k+1ki−11n=n∑i=k+1kn1i−1=knn∑i=k+11i−1=knn−1∑i=k1i=kn(n−1∑i=11i−k−1∑i=11i)≈kn((ln(n−1)+C)−(ln(k−1)+C))=knln(n−1k−1)
当n和k足够大时有
- (不能证明k也会足够大,但是直觉上n足够大k也会足够大,因为n足够大时往往需要拒绝更多的人)
n−1k−1=nk
- (不能证明k也会足够大,但是直觉上n足够大k也会足够大,因为n足够大时往往需要拒绝更多的人)
令x=kn,则有
f(x)=xln1xf′(x)=ln(1x)+(−1x2⋅x⋅x)=ln(1x)−1求f(x)的最大值,令f′(x)=0有
ln(1x)−1=0解方程得
x=1e也就是说当kn=1e时,找到最优者的概率最大
策略描述
- 拒绝前ne个人(也就是拒绝前37%的人),然后从第ne+1个开始,只要优于前面的所有人,则接受
- 这种方式可以保证我们有最大的概率找到最优者