f能随机产生[0,5]的整数,如何利用f随机产生[0,1…

f能随机产生[0,5]的整数,如何利用f随机产生[0,13]的整数

马岱:连续使用两次这个函数

马岱:注意等可能

程序猿.孙乾:m

程序猿.因陀罗天:构建最小公倍数63长度数组,13个f函数执行得到一个值,若0-12,则输出0,13-25输出1

程序猿.因陀罗天:后面依次类推

温实初:连续使用7次f,然后把7次f的值相加,最后模14

楼主:但是最小公倍数65吧,[坏笑]

百度员工:不行吧,均匀分布累加后不是均匀分布

尼古拉斯赵四:经典面试题,搜一下就有了

程序猿.孙乾[2]:相加肯定不对

程序猿.孙乾[2]:比如两个骰子,相加为2的概率是1/36,但相加为6的概率是5/36

楼主:确实,想加后每个数出现概率不一样,有其它思路么

楼主:刚看到一种思路用5的幂,每一位随机生成0-5,找一个合适的均分13段

字节跳动员工:算三次,得到abc。按六进制计算x=a*36+b*6+c,x均匀分布在0-215之间。向209截断,然后取14的模即可。

程序猿.枫叶007:F*13/5转整数

程序猿.枫叶007:f×13/5%13

前进吧种年:M

小米员工:所有的数选中概率一样就行了吧?比如按照长度为3定一段,0-2,3-5,……,6段是〔0,17〕。然后第一次f选择哪一段,第二次选择段里面的值,这里每段三个值,一次产生6个数,那就01选第一个,23选第二个45选第三个,如果没有值就重新执行程序。这里每一个数在一次执行过程中产生的概率是1/18

快手员工:拒绝采样

百度员工[2]:其实这是个算法题,更准确的说是个数学题

北京旷视科技有限公司员工:感觉这个是靠谱的,但是想问一下后续分析,因为可以两次截断,也可以四次截断,额外的开销(无效截断)咋算

字节跳动员工:三次我觉得比较均衡,算的次数多则需要截断的概率小,相应也要付出多采样和计算的代价。

程序猿.邓芝:https://taou.cn/ptgUl, leetcode原题, 拿走不谢

程序猿.dota2:m

宋兵乙:生成两位6进制,分14段,不在段内重取

楼主:209截断怎么来的,截断后是怎么保持均匀的

字节跳动员工:我这里截断的意思是超过209就不要了重算,因为210=14*15,所以从0-209有15组0-13,可以拿来用,多的小尾巴不均匀,扔掉。

李化云:除以5,乘13不行吗

程序猿.孙乾[2]:。。肯定不行啊,要等概率

字节跳动员工:当然不行,你这样连6都得不到。

北京旷视科技有限公司员工:有拒绝采样的概率,求生成一个数平均需要几次f函数

美团员工[2]:先造出等概率0和1就行

李化云:哦哦整数

字节跳动员工:算三次,得到abc。按六进制计算x=a*36+b*6+c,x均匀分布在0-215之间。向209截断,然后取14的模即可。

程序猿.因陀罗天:构建最小公倍数63长度数组,13个f函数执行得到一个值,若0-12,则输出0,13-25输出1

程序猿.邓芝:https://taou.cn/ptgUl, leetcode原题, 拿走不谢