微信红包算法在知乎上面有个专题讨论,其实红包的发放的随机算法,有两种作法:java

一、预生产:

算法

无外乎是在发红包的时候,随机去把金额生成到某个容器当中,而后要用的时候,一个一个的POP;微信

二、实时随机dom

用户在抢红包的时候,根据随机算法,算出此次用户要抢到多少测试

本文讲的是第二种。优化

之因此没弄第一种,是由于咱们的研发同窗张智哥,在之前的红包发放算法里面就是用的第二种,而我在征求他的意见看是否改为预生产的时候,他想偷个懒,不想再加表、动流程啥的。我想一想也是,动流程动出问题来了,到时候仍是得哥背锅。虽然做为研发一直都有丰富的背锅经验和强大的背锅心里,可是,可以少背个仍是少背个。spa

今后,也就开始了我比较黑暗的调整算法、调整参数的过程。code

红包算法关键是要简单、迅速的找出随机值,而这个坑,什么正态分布修正、什么平方后再开方取随机数优化,我都尝试过。orm

结果很惨淡:要么是前面的拿大头的概率很大,要么是后面的拿大头的概率很大,而前面拿大头,或者后面拿大头,是咱们运营的大爷们吐槽咱们的随机算法作得不如微信好的一个重要缘由(尼玛谈需求的时候不讲,还弄了个随机数范围要在8%到74%之间作限制,以为不爽就让研发背锅)。

get

废话完了,说下个人算法:

其实很简单,两个随机数,一个随机0到2;一个随机-1到1;两个随机数之和乘以均值,就是此次跑出来的随机数。而后再作下上下限的保护就好了。

个人代码里面偷了个懒,只作了下限,没作上限的保护。由于毕竟是研究算法,不是实际生产环境代码。

public static void dispath(int total, int people, int min){

for(int i = 0; i < people - 1 ; i++ ){

int leftPeople = people - i;

double avg = Double.valueOf(total)/leftPeople;

double ratio1 = getRandom(0, 2);

double ratio2 = getRandom(-1, 1);

double ratio = ratio1+ratio2;

int cur = (int) Math.floor(ratio * avg) > min ? (int) Math.floor(ratio * avg) : min;

// 扣减总额阅点数目

total = total - cur;

System.out.format("第 %d 个红包: %d 阅点,剩下: %d 阅点\n", i + 1, cur,total);

}

// 剩余的就是最后一个用户的阅点额度

System.out.format("第 %d 个红包: %d 阅点,剩下: 0 阅点\n", people, total);

}

结果嘛,还马马虎虎,反正跑了几回测试,基本上还能够知足要求,反正最大和最小的,不会固定在某个地方出现了。

java红包金额随机数算法_实时随机数算法(微信红包分配算法)相关推荐

  1. 前端实现红包雨功能_最全解密微信红包随机算法(含代码实现)

    code小生 一个专注大前端领域的技术平台公众号回复 Android加入安卓技术群 "  1.引言 这个系列文章已经整理了10篇,但都没有涉及到具体的红包算法实现,主要有以下两方面原因.一方 ...

  2. 红包拆分算法 php,关于PHP实现微信红包金额拆分的算法

    本篇文章主要介绍了PHP实现微信红包金额拆分试玩的算法示例,内容挺不错的,现在分享给大家,也给大家做个参考. 本文介绍了PHP实现微信红包金额拆分试玩的算法示例,分享给大家,有兴趣的可以看一下: ?p ...

  3. java 路由算法_几种简单的负载均衡算法及其Java代码实现

    什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助.通过某种 负载分 ...

  4. php 红包算法,PHP语言:实现微信红包拆分算法

    本文主要向大家介绍了PHP语言:实现微信红包拆分算法,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. · 修复最后一个红包输出未保留2位数 · 修复领取的红包金额低于最小红包限制 * 红 ...

  5. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  6. etc的常见算法_谈常用的几个机器学习算法,学懂算法也可以这么简单!

    本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此类模型优缺点及选择详加讨论 主要回顾 ...

  7. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解

    提到hash,相信大多数同学都不会陌生,之前很火现在也依旧很火的技术区块链背后的底层原理之一就是hash,下面就从hash算法的原理和实际应用等几个角度,对hash算法进行一个讲解. 1.什么是Has ...

  8. 中线提取算法_综述|线结构光中心提取算法研究发展

    摘 要: 线结构光扫描是三维重建领域的关键技术.光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素.本文详细阐述了光条纹中心提取算法的理论基础及发展历程,将现有算法分为三类 ...

  9. 蝴蝶优化算法_腾讯机智团队分享--AllReduce算法的前世今生

    从事分布式深度学习相关工作的同学,应该都频繁地用到了AllReduce(规约)操作. 图1 AllReduce的示意图 但是对于训练框架中集成的AllReduce相关操作,其背后实现的原理是什么? 除 ...

最新文章

  1. MBR区、DBR区、FAT区、DIR区和DATA区的区别
  2. LeetCode OJ -Happy Number
  3. Python——如何搭建Python的环境
  4. 图解iPhone开发新手教程
  5. Fabric的6大特性
  6. C#打开文件对话框和文件夹对话框
  7. 收集 48 个 JavaScript 代码片段,仅需 30 秒就可理解(值得收藏)
  8. codeforces 264 B. Good Sequences(dp+数学的一点思想)
  9. Elasticsearch(三) 使用kibana 操作ES
  10. 买买买!!!电商促销必备的气氛PSD分层海报
  11. 微课|玩转Python轻松过二级(2.1.3节):字符串与字节串简介
  12. linux命令行改名字,使用nmcli在Linux命令行中更改或设置主机名的方法
  13. Excel函数 (使用 「index + match」代替 vlookup进行查询)
  14. C#图片处理之:Gamma校正
  15. labVIEW学习笔记(二)公式节点、数组
  16. 代码性能JavaScript性能优化总结
  17. JavaScript —— Symbol数据类型之不延伸
  18. hget和get redis_redis使用手册-hset,hget 和 hmset,hmget
  19. Vue + element 实现课程表
  20. 1236mysql_MySQL1236错误解决方法_MySQL

热门文章

  1. 如何做一份出色的竞品分析?
  2. vue滚动条事件(获取滚动条距离底部距离)
  3. 关闭 iTunes 自动同步
  4. git有很多方法根据
  5. mysql5.7新特性--官方高可用方案MGR介绍
  6. python日历库_python下的一个好用的日历库,支持农历转公历,和公历转农历等功能...
  7. MATLAB算法实战应用案例精讲-【自动驾驶】激光雷达LiDAR(补充篇)
  8. 5G 的应用场景及其性能需求
  9. C语言从键盘输入数据
  10. 转: C++ 中 ZeroMemory、memset 易内存出错