PHP随机红包算法

简介: 2017年1月14日 14:19:14 星期六 一, 整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记录各种需要的数据 二, 红包算法  简便起见, 红包金额用整数表示, 假设每个红包里边有x个糖豆, 每个人最少一...

2017年1月14日 14:19:14 星期六

一, 整体设计

算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记录各种需要的数据

二, 红包算法 

简便起见, 红包金额用整数表示, 假设每个红包里边有x个糖豆, 每个人最少一个豆

一种: 每个红包的最大金额是: (剩余金额/剩余红包数)*2, 需要开始的时候预先分配给每个人一个豆

 1 function randBean($total_bean, $total_packet)
 2 {
 3     $min_bean = 1;
 4     $max_bean = 5000;
 5     $range = 2;
 6     
 7     $total_bean = $total_bean - $total_packet * $min_bean; //每个人预留一个最小值
 8 
 9     $list = [];
10     $min = 1;
11     while(count($list) < $total_packet){
12         $max = floor($total_bean / $total_packet) * $range;
13         $bean = rand($min, $max);
14 
15         if ($bean <= $max_bean - 1) {
16             $list[] = $bean;
17             $total_bean -= $bean;
18         }
19     }
20 
21     $list[] = $total_bean;//剩余的金豆作为最后一个红包
22 
23     //合并
24     foreach ($list as $k => $v) {
25         $list[$k] += $min_bean;
26     }
27 
28     return $list;
29 }

多次统计

 

第二种, 对其简单扩展一下, 每个红包的最大金额是: (剩余金额/剩余红包数)*3; 但是要求每次最少发2个红包

第三种, 线段法, 随机生成几个数字, 将一个直线分成几段, 每段的长度(这个波动比较大, 不是很平均, 如果限制了每个红包的大小, 会比较麻烦)

 1 function abc ($total_bean, $total_packet)
 2 {    
 3     $min = 1;
 4     $max = $total_bean -1;
 5     $list = [];
 6     
 7     $maxLength = $total_packet - 1;
 8     while(count($list) < $maxLength) {
 9         $rand = mt_rand($min, $max);
10         empty($list[$rand]) && ($list[$rand] = $rand);
11     }
12     
13     $list[0] = 0; //第一个
14     $list[$total_bean] = $total_bean; //最后一个
15     
16     sort($list); //不再保留索引
17     
18     $beans = [];
19     for ($j=1; $j<=$total_packet; $j++) {
20         $beans[] = $list[$j] - $list[$j-1];
21     }
22     
23     // return $beans;
24     echo '<pre>'; print_r($beans); echo array_sum($beans);
25 }
26 
27 abc(100000, 3);

 

第四种:

因为每人最少1个豆, 那么每次随机生成豆数的时候要预留 剩余人数*1个豆;

去掉这些必须剩余的豆数后, 以剩下的豆数的平均值为最大值进行随机生成本次豆数

目录
相关文章
|
4月前
|
存储 算法 安全
百度搜索:蓝易云【php几种常用的加密解密算法】
请注意,以上算法都有各自的特点和用途,选择合适的加密解密算法应根据具体需求和安全性要求。此外,加密只是数据保护的一部分,安全实现还应考虑其他因素,如密钥管理、访问控制和安全传输等。
59 0
|
9月前
|
存储 搜索推荐 算法
用PHP实现经典的5种排序算法
排序算法是一种将一组无序的数据元素按照某个规则(大小、字母序等)排列成有序的序列的算法。常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
|
9月前
|
存储 监控 算法
php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)
php开发实战分析(9):使用实现短地址的分享的解决方案(第三方短链接服务、数据库自增ID转换、自定义短地址生成算法、自增数字短码)
186 0
|
算法 PHP 数据库
如何使用PHP编写一个人脸识别算法?底层原理是什么?
如何使用PHP编写一个人脸识别算法?底层原理是什么?
154 0
|
算法 PHP
PHP实现微信支付签名算法(MD5版本及HMAC-SHA256版本)
PHP实现微信支付签名算法(MD5版本及HMAC-SHA256版本)
632 0
|
存储 算法 程序员
bitmap算法的PHP实现,快速去重排序,数据压缩储存
因为电路的逻辑只有0和1两个状态,这里的0和1并不是数字的0和1,0和1是表示两种不同的状态,0表示低电平,1表示高电平。因为计算机是由无数个逻辑电路组成的,只能根据0和1的无限位数和组合来表达信息。 电脑只认识0和1这两个数字,所有的数据在电脑中都是以0和1组成的编码存储的,这样的编码叫做二进制。一个0或一个1就叫做一个位 最初的计算机性能和存储容量都比较差,所以普遍采用4位BCD编码(这个编码出现比计算机还早,最早是用在打孔卡上的)。
320 0
|
算法 大数据 PHP
php hash算法类
php hash算法类
90 0
|
存储 算法 PHP
唯一ID生成原理与PHP实现-雪花算法
唯一ID生成原理与PHP实现-雪花算法
545 0
唯一ID生成原理与PHP实现-雪花算法
|
算法 PHP
php关于数组n个随机数分成x组,使每组值相近的算法
php关于数组n个随机数分成x组,使每组值相近的算法
87 0
php关于数组n个随机数分成x组,使每组值相近的算法
|
机器学习/深度学习 传感器 算法
【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码
【预测模型】基于随机蛙跳算法 SFLA优化神经网络实现数据回归预测附matlab代码