要求是:将100元红包分给10个人,最后被领取的总金额是100元
在时间点上的思路有两种:
1、在拆红包的时候,实时计算每个人的金额。
2、在发红包的时候,预先分配好指定份数的红包。
这里介绍两种算法:
1、网上有介绍这种算法,总的思路是,将随机金额控制在平均值的两倍以内。
如:上面的例子。100元分给10个人,每个人的随机范围为:0.1~剩余红包金额/剩余人数*2。那么第一个人的随机范围是0.1~100/10*2 得出随机范围为0.1~20,。第二个人的随机范围为:0.1~剩余金额/剩余人数9*2。以此类推。
该算法的优点是:
业务上:每个人的金额波动不会不会大于平均金额的2倍,不会有大金额出现。
技术上:可以实时计算,即:可以在点击开红包的时候,通过后台实时计算,不占用内存。而不用预先分好红包金额(这种在大数据量的情况下,会占用大量内存)。
2、总的思路同发行股票差不多,有10个人分100元红包,每个人在1~100之间随机抽取自己的股票数量personStock。最后将抽出来的股票总数计算出来(用totalStocks表示),那么每个人的金额 = 每股的价值*自己抽中的股票数量。每股的价值=总红包金额/总的股票数量。最终公式为:100/totalStocks*personStock。
优点是:
1、有比较大的随机性。但是总的是趋于平均
2、可以作为在发红包阶段,预先分好红包阶段的算法。