一个活动,n个女生手里拿着长短不一的玫瑰花,无序的排成一排,一个男生从头走到尾,试图拿更长的玫瑰花,一旦拿了一朵就不能再拿其他的,错过了就不能回头,问最好的策略

本文深入探讨了37%法则在决策问题中的应用,通过数学公式详细解释了如何计算最优停止点,以最大化选择最佳结果的概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

37%法则

题目:一个活动,n个女生手里拿着长短不一的玫瑰花,无序的排成一排,一个男生从头走到尾,试图拿更长的玫瑰花,一旦拿了一朵就不能再拿其他的,错过了就不能回头,问最好的策略?
——出自牛客网机器学习/算法工程师面试宝典
官方给出的解答是真的看不懂,没有任何解释,而网上大部分解释都是照搬官方回答或者37%法则的数学推理。
很多人看官方的回答会陷入一个误区,比如这个老哥的评论:
在这里插入图片描述
其实官方的解题思路并不是找到最优的那个数字,举个例子:
在这里插入图片描述
可以看到这里10是最大的数字,但我们根据这个策略(前3个不选,然后只要见到比8大的就选),选择的数字却是9。

解题思路是这样的:前 r r r个女生我是只看不选的,从第r+1个女生开始选。
这种策略并不保证选到最优的结果(10),但是能保证你选到一个还不错的结果,最重要的是,这种策略是可以计算的,可以用数学公式来算。因为你想,这道题给你,你能想到什么策略?只有这一种策略嘛,所以最重要的就是找到这个数,这个 r r r是几的时候,概率最大。

接下来就是数学公式了。我们用 P ( K ) P(K) P(K)来表示选到最佳结果的概率,由于 r r r是变量,所以这个概率是变化的,我们最后才可以求导取这个概率的最大值。
P ( K ) = ∑ i = r + 1 n 1 n ∗ r i − 1 P(K)=\sum_{i=r+1}^{n}\frac{1}{n}*\frac{r}{i-1} P(K)=i=r+1nn1i1r
公式的理解:
首先这个求和符号就是高中学的加法原理,把每一个数字选中的概率都算出来加一起就是最后的结果。为了方便解释,我们就用上面的例子,然后令 r r r取3,前3个不取,自然就不用加了,直接从4开始,所以我们选择的结果就是从第4个到第8个数字,每个数字被选中的概率是均等的,所以先来个 1 9 \frac{1}{9} 91
接下来就是核心了,我们用例子中的第六个数字9来说举例,要想选中9,条件就是前5个数字中,最大的数字(8)必须在前三个数字中,否则的话第4个数字来个10,直接就选第4个数字10了,就轮不到9了。这就是为什么要乘 r i − 1 \frac{r}{i-1} i1r
i − 1 i-1 i1意思是前 i − 1 i-1 i1个数字, r r r意思就是看了不选的前r个数字,每个数字的概率相等,那 r r r个数字中有最大值的概率自然就是 r r r除以总数 i − 1 i-1 i1

很多人就是把这里找最大值的过程,当做是找最优结果了。谁让官方回答来了一个《拥有最长玫瑰的女生出现在前r-1个女生中》。这种说法是不准确的,应该说《前k-1个女生中,拥有最长玫瑰的女生出现在前r-1个女生中》,这样大家就不会误解了。

理解如何得到 P ( K ) P(K) P(K)之后,下面就是求个导数。(官方回答仍然很让人费解,我是看不懂)
P ( K ) P(K) P(K)可以这样写
P ( K ) = 1 n ∑ i = r + 1 n r i − 1 P(K)=\frac{1}{n}\sum_{i=r+1}^{n}\frac{r}{i-1} P(K)=n1i=r+1ni1r
就是把 1 n \frac{1}{n} n1放到前面去,只有 i i i是不能提出来的,其他字母都可以提出来。我们的变量只有一个 r r r
x = r n x=\frac{r}{n} x=nr
P ( K ) P(K) P(K)就可以写为: (如果这一步不懂,可以先跳过,下面有解释,用到了微积分中的求和公式转积分的知识)
P ( K ) = x ∫ x 1 1 t d t = − x l n x P(K)=x\int_x^1\frac{1}{t}dt=-xlnx P(K)=xx1t1dt=xlnx
求导,
P ′ ( K ) = − ( l n x + 1 ) P^\prime(K)=-(lnx+1) P(K)=(lnx+1)
P ′ ( K ) = 0 P^\prime(K)=0 P(K)=0
x = 1 e x=\frac{1}{e} x=e1
P ( K ) m a x = 1 e P(K)_{max}=\frac{1}{e} P(K)max=e1
r = n e r=\frac{n}{e} r=en

求和公式转积分

如何从 P ( K ) = 1 n ∑ i = r + 1 n r i − 1 P(K)=\frac{1}{n}\sum_{i=r+1}^{n}\frac{r}{i-1} P(K)=n1i=r+1ni1r变到 P ( K ) = x ∫ x 1 1 t d t = − x l n x P(K)=x\int_x^1\frac{1}{t}dt=-xlnx P(K)=xx1t1dt=xlnx
这里要用到微积分的知识。首先回顾一下积分求和公式:
∫ 0 1 f ( x ) d x = lim ⁡ n → + ∞ 1 n ∑ i = 1 n f ( i n ) \int_0^1f(x)dx=\lim_{n \to +\infty}\frac{1}{n}\sum_{i=1}^nf(\frac{i}{n}) 01f(x)dx=n+limn1i=1nf(ni)
求和公式转成积分,不是特别直观,我们采用的方法是尽量还原成积分求和公式右边的这种形式
我们把 P ( K ) P(K) P(K)公式的下标变换一下:
P ( K ) = 1 n ∑ i = r n r i P(K)=\frac{1}{n}\sum_{i=r}^{n}\frac{r}{i} P(K)=n1i=rnir
然后把 r r r提出来
P ( K ) = r n ∑ i = r n 1 i P(K)=\frac{r}{n}\sum_{i=r}^{n}\frac{1}{i} P(K)=nri=rni1
接下来就是凑,往标准公式右边凑,已经有 1 n \frac{1}{n} n1了,不用凑了,但我们是 1 i \frac{1}{i} i1,别人是 i n \frac{i}{n} ni,那可以乘个 n n n
再取倒数,就变成了
P ( K ) = r n ∗ 1 n ∑ i = r n 1 i n P(K)=\frac{r}{n}*\frac{1}{n}\sum^n_{i=r}\frac{1}{\frac{i}{n}} P(K)=nrn1i=rnni1
我们令 x = r n x=\frac{r}{n} x=nr
直接把 i n \frac{i}{n} ni换成变量 t t t就行了,上限是当 i i i取到 n n n时,即1,下限是当 i i i r r r时,即 r n \frac{r}{n} nr,也就是 x x x
所以 P ( K ) = x ∫ x 1 1 t d t P(K)=x\int_x^1\frac{1}{t}dt P(K)=xx1t1dt

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值