问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

微信红包的随机算法是怎样实现的?

发布网友 发布时间:2022-04-21 03:28

我来回答

5个回答

热心网友 时间:2023-11-05 02:23

微信红包的随机算法是通过以下步骤实现的:

设置总金额:红包发送者设定红包的总金额。

设置红包个数:红包发送者设定红包的个数。

红包金额生成:根据发送者设定的总金额和个数,生成红包的随机金额。通常采用的是高斯分布或者均匀分布的随机算法。

红包金额分配:将生成的红包金额按照一定的规则进行分配。常见的规则有平均分配、随机分配或者根据人数性别等因素进行差异化分配。

红包领取:接收者按照规则领取红包,系统会在后台进行验证,确保一个红包只能被一个人领取。

需要注意的是,微信红包的随机算法是经过精心设计和优化的,旨在保证红包金额的公平性和随机性,避免恶意猜测和作弊行为。同时,微信也会采取一些技术措施来监测和防止不合规的红包行为。

热心网友 时间:2023-11-05 02:24

我们在一个20人的群中,自己发红包以及结合其他人发出红包的情况,整合成两轮的数据。每次金额设置都是20块并且有20个,第一轮是发了15次,第二轮是发了19次,总结成表格,然后为了避免突发的数据影响判断,我们将两轮数据杂糅从而生成了其他的三轮数据,一共是五轮数据。罗列如下表,高亮的数据为最佳手气。每一列的数据最早抢到红包的在最底端,越往上越晚抢。
从所有*的数值(最佳手气金额)可看出,所有最佳手气值都在平均值*2的前后附近(平均值=总金额/红包总个数,这里平均值=20/20=1),事实上确实如此,可通过微信红包分发算法得到验证,算法具体见后文
然后我们选取部分数据开始制作散点图。横轴为1-20,分别表示抢到红包的人的编号,随递增而越早。也就是20代表最早抢到的人。纵轴为金额。同样的形状颜色的点代表一次发红包,然后我们抓取部分数据显示为散点图,越密集代表该顺序位的用户得到的金额越稳定。散点图如下:

规律一:我们可以看到,所有红包大多数金额分布在0.5到1.5元之间,显示为图中方框所示,大部分点都分布在这个位置。然后是顺序位密集程度的对比,可以发现20、19,也就是最先抢到红包的人,小圆圈所示基本的点都集中在小范围,说明先抢红包的人得到的金额会比较稳定,但同时最佳手气的概率也比较低。大圆圈所示的是极不稳定,飘忽的金额分布,表示越晚抢红包得到的金额会飘忽不稳,但同时,抢到最佳手气等大金额的红包概率也比早抢的高。
根据上面的分析,我们又写了一个过滤计数函数,针对金额的分段的红包个数进行统计:
比如2.0-2.5
得到如下金额分布:
折线图:
规律二:绝大多数的红包的金额都集中在1-1.5,也就是说20块钱发20个红包的金额分布集中在比平均数大一点点的附近,同时较大幅超过平均数金额的红包大大少于低于于平均数的红包数量。
那我们继续扩大数据的规模,将几轮数据的均值和标准差分别做成折线图:
综合上面各个折线图的情况,我们可以得到越早抢红包的标准差越小,越晚抢红包的标准差越大,但同时,由均值和总额可以看出来,越早抢红包的均值往往要更高,红包金额得到最佳手气概率也会相对较小,越晚抢红包的人则得到最佳手气等大手气的概率更大。
为了得到更为趋近规律的曲线和规律,我们决定将两轮真实数据合并起来,然后给出幂函数的趋近线(虚线),如下图:
由于均值受极值波动影响较大,所以我们去除一些因为偶然差产生的极端点(圆圈的点)从而发现是递增的趋势。
规律三:可以很明显的看到,均值是随着抢红包的越晚而缓慢递减,标准差值同时也往上递增,这个趋势结合之前的分析,我们猜想,即标准差越大说明,领取到最大的红包和最小红包的风险越大,也就是说越晚抢标准差越大,对于冒险主义者来讲是最好的,因为他有很大概率获得最大的金额,但也大概率获得最小的红包,风险与收益并存;均值越大,说明每次都拿到一个不大不小的红包,虽然获得最小和最大金额红包的概率很小,但起码不亏本,也就是说越早抢,均值越稳定,这比较适合不喜欢冒险的人。
验证预测结果:
21:24分 发送预测结果到另一位同学微信:
           
随后开始发红包:

结果:
最佳手气为第8个人且金额为1.13
与预测结果一致,规律基本正确!
总结:
(1)最佳手气为1.13块,根据我们推导的预测公式=总额/红包总个数*2*随机数(0-2的double数), 也就是说最佳手气在总额/红包总个数*2值的前后附近。这里我们判断在0.8-1.3之间,推断正确
(2)平均值为0.5元,0.5-0.8元的红包有3个,小于0.5的红包有6个,说明大于平均值的红包个数多于小于平均值的个数。与我们的第二点预测完全正确
(3)最佳手气位置:根据我们的散点图发现,最先抢到红包的人,得到的金额会比较稳定,但同时最佳手气的概率也比较低。表示越晚抢红包得到的金额波动较大,但同时抢到最佳手气等大金额的红包概率也比早抢的高。所以我们推断,最佳手气位置在最后20%-30%之间。
微信红包随机分发算法c++模拟:
基本思路:每次抢到一个红包金额等于:红包剩余金额/红包剩余个数*2*随机数(0-1的double型),如果计算的结果小于等于0.01,则取0.01值
主要代码:
double packages[50000];
double Luckiest_money=0;
void getPackage(int remainSize,double remainMoney){
srand((unsigned)time(NULL));
for(int i=0;i

热心网友 时间:2023-11-05 02:24

当有人在微信群里发了一个 N 人的红包、总金额 M 元,后台大概的技术逻辑如下。

发红包后台操作:

1)在数据库中增加一条红包记录,存储到CKV,设置过期时间;

2)在Cache(可能是腾讯内部kv数据库,基于内存,有落地,有内核态网络处理模块,以内核模块形式提供服务))中增加一条记录,存储抢红包的人数N。

抢红包后台操作:

1)抢红包分为抢和拆:抢操作在Cache层完成,通过原子减操作进行红包数递减,到0就说明抢光了,最终实际进入后台拆操作的量不大,通过操作的分离将无效请求直接挡在Cache层外面。这里的原子减操作并不是真正意义上的原子减操作,是其Cache层提供的CAS,通过比较版本号不断尝试,存在一定程度上的冲突,冲突的用户会放行,让其进入下一步拆的操作,这也解释了为啥有用户抢到了拆开发现领完了的情况。

2)拆红包在数据库完成:通过数据库的事务操作累加已经领取的个数和金额,插入一条领取流水,入账为异步操作,这也解释了为啥在春节期间红包领取后在余额中看不到。拆的时候会实时计算金额,其金额为1分到剩余平均值2倍之间随机数,一个总金额为M元的红包,最大的红包为 M * 2 /N(且不会超过M),当拆了红包后会更新剩余金额和个数。财付通按20万笔每秒入账准备,实际只到8万每秒。

热心网友 时间:2023-11-05 02:25

比如100元,由10个人分,那么平均一个人是10元钱。然后付款后,系统开始分份儿。

第一份:系统由0~10元之间随机一个数,作为这一份的钱数,设x1。

第二份:剩下的钱(100-x1),系统由0~(100-x1)/(10-1)随机一个数,作为这份的钱数,设x2

.。。。

第n份:剩下的钱(100-x1-x2-...-xn),系统由0~(100-x1-x2-...-xn-1)/(10-n)随机一个数,作为这个份的钱数,设为xn

当用户进来拿红包的时候,系统由0~9之间随机一个数,随机到几,就取第几份红包,然后将这个数存到list里。当之后的用户抽到相同的随机数时,则将这个数+1,如遇相同再+1,直至list满,红包发完。

热心网友 时间:2023-11-05 02:25

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
多特后防四大天王是哪些 iPhoe4还原所有设置后变成语音朗读而且滑屏无法正常使用 金鱼在鱼缸里几天能不会死掉? 金鱼放鱼缸多久合适 金鱼放鱼缸的时间 想学会缅甸语请问大神昆明附近有没有好一点的班? 昆明哪里可以学缅甸语?哪里不贵,哪里有优势? 昆明哪里可以学缅甸语啊?想去学几个月。 要出去缅甸出差一段时间,请问下昆明什么地方有好的缅甸语培训?? 叔叔要去缅甸做生意,帮他找间学校学缅甸语,简单的就行了,只有两个月... 昆明学缅甸语哪里学呀??? 想学几个月,再去一次缅甸。 龙之家族最大的龙 银行卡被吞了领取流程 暗夜协奏曲的结局及最后十回的简介,谢谢 SqlServer开发版与企业版有什么区别 sql数据库中的密码部分如何暗文显示? 如何从明文显示改成暗文显示,我知道用md5加密, 苹果手机的那种红色叫什么红啊,看起来亮亮的,很高级的红色,想买同色衣服不知道怎么描述 红米note/增强版怎么设置短信铃声大小 红米怎么设置手机铃声? 红米note7如何设置短信铃声 红米手机怎么设置铃声 我的是红米下载了个铃声怎么设置成短信提示音啊?? 红米短信送达铃声如何设置 红米手机短信播报功能在哪里设置? 红米note怎么设置短信铃声 红米8notepro短信铃声在哪设置 红米手机的来电与短信提示音怎样设置 红米怎么设置铃声? 红米note11pro短信提示音怎么设置 红米手机怎么设置短信提醒 红米note 9手机短信通知铃声怎么设置 工商银行卡被吞了领取流程 银行卡被吞去领需要带什么? 银行卡被吞了,怎么领回? 银行把钱和银行卡都吞掉了手续怎么办? 银行卡被吞了下一位客户可以取钱吗? 银行卡被吞了取款机出来一张纸条凭据可以领卡吗 农商银行卡被吞了领取流程 银行卡被吞了钱怎么办 银行卡被吞钱了怎么办 陌陌每月自动扣费怎么取消? 小新平板安卓10和安卓11哪个好 一加6T安卓11和安卓10怎么样 oppo为什么官网显示安卓10而我自己是11? 安卓11怎么才能降回10? 安卓11怎么降回10? oppoa53 5g安卓10能不能升级安卓11 vivox7plus是安卓10还是11 404 Not Found vivo x60安卓系统是10还是11? 我的手机上编译时间是11月10日,安卓更新时间是10...