红包随机算法

要求是:将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、可以作为在发红包阶段,预先分好红包阶段的算法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值