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原题, 拿走不谢