引子:
老东家要阵亡了,出来碰碰透透气!
1.随机算法:
问题:这么个函数a(), 返回1的概率是P,返回0的概率是1-P;如何实现一个算法,使返回1,0的概率都是50%?
解决:本体主要考察一个应变能力,和思维;其实和纯编程不是特别紧密;但是,头脑灵活的谁不想要呢!!!
先来看一个表格:解题思路就在这个表里(其实是个大家中学都学过的概率题)
取值概率对比 | 结果1 | 结果0 | |
---|---|---|---|
2次调用a()函数 | P | 1-P | |
结果1 | P | P*P | P(1-P) |
结果0 | 1-P | (1-P)*P | (1-P)*(1-P) |
解析:通过两次调用a()函数返回的概率表可以看出,共有4种结果:[1,1],[1,0],[0,1],[0,0],[1,0],[0,1]的概率一样都是(1-P)*P,这里其实和具体的P,1-P都没啥关系。因为题目要设计个算法使返回1,0的概率都是50%。这样可以利用返回结果的特性进行算法设计;即:对于两次调用a()函数这个事件,因为返回[1,0]或[0,1]的概率是50%,返回[1,1],[0,0]的概率也是50%。所以包装下接口使一种概率返回0,另一种返回1即可。
PS:
TIPS:
这题还是有扩展的,构造一个等概率的发生器
比如,条件:a()的返回1,0的概率P和1-P,设计算法,构造[1,2,3…n],返回返回各个数据概率相同=1/n?
其实套路也类似。见参考2
参考: