您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

自己写仿微信红包的随机分配,为什么平均数差距这么大?

2026/2/9 23:15:53发布29次查看
这几天比较闲,自己研究了一下微信红包的算法。用度娘查了一下,看到了一个官方的回答:“随机,额度在0.01和(剩余平均值2)之间。”也就是说,每个人拿红包的时候,生成的金额都是即时计算,这样可以减少内存的占用,而每个红包的额度是在0.01和(剩余平均值2)之间,就是说,如果100块5个红包,第一个红包的钱会在0.01到40之间,但玩过抢红包的人都知道,这是不对的,第一个抢,拿超过剩余平均值*2是很平常的事。
而我自己在没看到这个回答之前,自己的设想是发红包后就已经将金额分配好,然后等人来打开红包。
public function index($money,$count){ if($count==1){ echo $money;exit; } $max=$money*100; if($max'; } return $data;}

我的思路是,红包总金额金额就等于一条直线的长度,然后在直线上随机放n-1个点,点与点之间的距离就等于每个红包的金额。一开始,我以为,这样会相对平均,然后我测试了100块发10个红包,测试了一万次,结果发现
而且这还是我打乱点与点长度排序后所得出来的结果,
如果没打乱之前的结果时这样,相差更大。
明显可以看出,离平均,差好远,是我的思路本来就是错误的吗?
回复内容: 这几天比较闲,自己研究了一下微信红包的算法。用度娘查了一下,看到了一个官方的回答:“随机,额度在0.01和(剩余平均值2)之间。”也就是说,每个人拿红包的时候,生成的金额都是即时计算,这样可以减少内存的占用,而每个红包的额度是在0.01和(剩余平均值2)之间,就是说,如果100块5个红包,第一个红包的钱会在0.01到40之间,但玩过抢红包的人都知道,这是不对的,第一个抢,拿超过剩余平均值*2是很平常的事。
而我自己在没看到这个回答之前,自己的设想是发红包后就已经将金额分配好,然后等人来打开红包。
public function index($money,$count){ if($count==1){ echo $money;exit; } $max=$money*100; if($max'; } return $data;}

我的思路是,红包总金额金额就等于一条直线的长度,然后在直线上随机放n-1个点,点与点之间的距离就等于每个红包的金额。一开始,我以为,这样会相对平均,然后我测试了100块发10个红包,测试了一万次,结果发现
而且这还是我打乱点与点长度排序后所得出来的结果,
如果没打乱之前的结果时这样,相差更大。
明显可以看出,离平均,差好远,是我的思路本来就是错误的吗?
看看这里的红包算法合你的要求不
https://github.com/qieangel2013/yaf
微信金额是拆的时候实时算出出来的,采用的是纯内存计算,不需要预算空间存储。采取实时计算金额的考虑:预算需要占存储,实时效率很高。
这个答案分析的不错你可以看下http://coderroc.com/article/%e6%95%b0%e5%ad%a6%e5%92%8c%e7%ae%97%e6%b3%95/%e5%be%ae%e4%bf%a1%e7%ba%a2%e5%8c%85%e9%9a%8f%e6%9c%ba%e7%ae%97%e6%b3%95%e5%88%9d%e6%8e%a2.html
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product