牛客网常见算法思路 (十)概率

有用麻烦点个赞哦

笔试选择题,计算期望等

案例一

8支球队,三个强队,5个弱队,随机分为四组,强队相遇的概率
思路
1、算出总分组情况
第一个队有7种选择,第三个队有5种选择,第五个队有3种,第七个队1种
总方法数7531=105
2、求无两强相遇的方法数
(三个强队各选一个弱队)5
4*3=60
3、相减

案例二

三只蚂蚁从正三角形的三个顶点沿着边移动,速度相同情况下,碰头概率
思路
一只蚂蚁两个方向,只有同顺时针或同逆时针才不会相遇,减即可

案例三

某地区重男轻女,如果生到女孩就一直生,生到男孩就停,一胎只生一个的情况下,时间足够长猴,男女比例?(答案还是1:1)
思路,一胎为男女的比例均为50%
所以n/2的家庭只有一个男孩,n/2/2的家庭一男一女,n/2/2/2的家庭一男两女,如此类推
孩子总数n/2+(n/2/2)2+(n/2/2/23+(n/2/2/2/2)4+…=2n
因为每个家庭必定有一个男孩,所以男孩为n女孩也为n

案例四

给定一个等概率随机产生15的随机函数,除此之外,不能使用任何额外的随机机制,请实现等概率随机产生17的随机数
思路
1、首先先等概率产生1、2、3、4、5
2、产生的数-1得到f()->0、1、2、3、4
3、2的数*5得到f()*5->0、5、10、15、20
4、2的+3的得到f()*5+f()->0、1、2、3、4;5、6、7、8、9;…23、24
5、 如果步骤4产生的数大于20则重复进行步骤4知道产出结果在0~20之间
6、步骤五的数%7 产生结果为0~6
7、步骤六的数+1

案例五

给定一个以p概率产生0,以1-p概率产生1的随机函数f(),p是固定值,但你不知道是多少,用f()实现等概率产生0和1的随机函数
思路
1、产生0的概率P;产生1的概率1-P
2、产生01和10的概率P*(1-P) 等概率
3、所以产生01返回0,产生10返回1,否则一直调用f()

案例六

假设函数f()等概率随机返回一个在[0,1)范围上的浮点数,那么我们知道,在[0,x)区间上的数出现概率为x(0<x<=1)。请给定一个大于0的整数k,并且可以使用f()函数,请实现一个函数依然返回在[0,1)范围上的数,但是在[0,x)区间上的数出现的概率为x的k次方
思路
先看如何扒[0,x)范围上的数,从概率x调整为概率x²
作法:调用两次f(),返回较大的数
因此,只需要调用k次f(),返回较大的数即可

案例七

给定长度为N且没有重复元素的数组arr和一个整数M,实现函数等概率随机打印arr中的M个数
首先在0~N-1中随机得到一个位置a,
打印a后a和N-1的数互换
首先在0~N-2中随机得到一个位置b,
打印b后b和N-2的数互换
如此类推知道打印够M个数
这个技巧经常用

案例八

一个机器按照自然数序列方式吐球,1、2、3等。一个袋子能装k个球,除袋子以外无其他空间,一个球一旦扔掉,不可能拿回。设计一种方法,是的机器突出N号球时,袋子中球数为k,同时可以保证是1-N中的每一个,被选进袋子的概率都是K/N
思路
核心思路:蓄水池抽样算法
1、处理1-K号球时,直接放进袋子里
2、处理第i号球时,以k/i的概率决定是否将第i号球放进袋子里;如果决定不放,直接扔掉,如果放,则从袋子里K个球随机扔一个,再放进袋子里
算法证明证明略

有用麻烦点个赞哦

发布了23 篇原创文章 · 获赞 24 · 访问量 3064

猜你喜欢

转载自blog.csdn.net/weixin_44303896/article/details/104089923