题目:一个函数foo可以返回概率为3:2的0,1,现要求写一个fun2,要求返回等概率的0,1
看到百度有个面试题是这样说的
有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为1/4,返回1的概率为3/4。(如果返回0的概率为0.3而返回1的概率为0.7呢)
在网上看到有同学的回答,写的很好http://www.haogongju.net/art/1665092
解法思想:
0,1随机生成,可以理解成2进制
a = fun() * 2^4 + fun() * 2^3 + fun() * 2^2 + fun() * 2^1 + fun() 等概率生成0-31的所有数
去掉30和31之后,在0-29之间进行一个%3 输出
其实就是分配这30个数使得一个占3份一个占7份,按照那个同学的算法:30个数中,对3取模,为0的有10个,非0的20个,这样比例是1:2,还差一点,应该是9:21化简后是3:7,所以模为0需要给对方一个,索性把0归到对方,可以产生3:7.
返回1:3相对更简单了,就弄四个值0-3,为0的返回0,1,2,3都返回1就可以了。这种方法比较直接。
回到我们的问题中,0,1此处foo中返回的概率不等,如何求解。