力扣1227.飞机座位分配概率--数学递推

1227. 飞机座位分配概率 - 力扣(LeetCode)

考虑只有两人的情况,我们称为a和b吧!此时很明显,只要a坐到了正确的位置,那么b也能坐到正确的位置,概率是0.5.

考虑三人的情况。我们称为a,b和c三个人。此时,对a来说,有三种选择:

1.坐到了第一个位置,此时是正确的位置,所有人都可以坐到正确的位置,这种情况发生的概率是1/3

2.坐到了第三个位置,此时,对c来说,绝对不可能再坐到自己的位置上了,这种情况发生的概率是1/3

至此,我们可以明确,c在正确的位置上的概率为1/3到2/3之间,接下来看第三种情况:

3.坐到了第二个位置。此时就剩下两个位置了,对于b来说,他所面临的情况是:

第一、现在座位只有两个。

第二、站在上帝视角,对我们来说,他的正确的位置是一号位置(因为一号位置是a的,但是a现在在二号位置,我们可以理解为把a和b的位置对调了。或者也可以理解为,只有当b坐到了一号位置,其余的所有人才都能坐到正确的位置)

第三、对他来说,他不知道自己的正确位置在哪,所以他可以随便坐位置

我们很惊喜的发现,这种情况不就是上文提到的只有两人的情况嘛!此时,b就是只有a和b情况下的a,而c就是只有a和b情况下的b。那么在这种情况下,c坐到正确位置的概率是多少?没错!上文已经给出了,是0.5.

至此,我们可以算出,在有三个人的情况下,c坐到正确的位置的概率是:\frac{1}{3}+\frac{1}{3}*0.5=0.5

接着下去呢?有四个人的话,怎么办呢?此时,我们还是继续慢慢推理,继续称呼他们是a,b,c,d:

考虑a的情况:

1.他有1/4的概率坐到了正确的位置,此时所有人都可以坐到正确的位置

2.他有1/4的概率,坐到了四号位置,此时,d绝对不可能坐到正确的位置

3.他有2/4的概率,坐到了二号和三号位置,取坐到了二号位置进行讨论:

此时对b来说,他所面临的情况是:

第一、现在座位只有三个。

第二、站在上帝视角,对我们来说,他的正确的位置是一号位置

第三、对他来说,他不知道自己的正确位置在哪,所以他可以随便坐位置

还是一样的,把b当a,把c当b,把d当c,此时,就是只有a,b,c三个人的 情况下,c能坐到正确的位置的概率,这个概率不就是我们已经计算过的1/2嘛!

所以,我们可以得到,四个人的情况下,d能坐到四号位置的概率是:\frac{1}{4}+\frac{2}{4}*0.5=0.5

至此,你已经发现概率了,假设p(n)表示n个人的情况下,第n个人能坐到第n号位置的概率。那么,可以写出递推公式:p(n)=\frac{1}{n}+\frac{n-2}{n}*p(n-1).,其中,当n=1时,p(n)=1。当n=2时,p(n)=0.5

c++AC代码:

class Solution {
public:
    double nthPersonGetsNthSeat(int n) {
        if(n==1) return 1;
        auto dfs=[&](auto&& dfs,int n)->double{
            if(n==1) return 1;
            if(n==2) return 0.5;
            return (double)1/n+((double)(n-2)/n)*dfs(dfs,n-1);
        };
        return dfs(dfs,n);
    }
};

当然,你会发现,好像只要n大于等于2,得到的就是0.5,那么代码改成下面这样也是可以过的:

class Solution {
public:
    double nthPersonGetsNthSeat(int n) {
        return n==1?1:0/5;
    }
};

不过笔者确实无法得到一个非常准确无误的只要n>=2,那么p(n)就是0.5的结论,如果有大佬知道如何通过准确的推理得到这个结论,欢迎留言私信,感谢不尽!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值