红包分配算法的实现

本文探讨了红包分配算法,包括均匀分布和正态分布两种方式。均匀分布通过java.util.Random.next()方法实现,而正态分布则利用Random.nextGaussian()方法,该方法基于极坐标法。均匀分布生成红包效率约5ms,正态分布为10ms。文章还对比了两种算法生成的红包散点图,并提供了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

  • 最近在做一个抢红包的项目,关于红包怎么分配,才能达到一个最佳效果,我做了一些调研以及对应的实现方案。
  • 关于每个红包金额的范围采用二倍均值算法[0 .01 - M/N * 2],其中M表示总金额,N表示红包个数。比如:总金额100元分为10个红包,均值:100/10=10元,每个红包金额的范围就是 [0.01 - 20],即1分到20元之间,但范围内的随机值该如何产生,接下来进行分析

2.生成随机数算法

  • 线性同余算法:生成一个均匀分布的伪随机数,例如:java.util.Random.next()方法,有规则的随机,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程,特点:在给定种(seed)的区间内随机生成数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。
  • 正态(高斯)分布:若随机变量X服从一个数学期望为 μ \mu μ 、方差为 σ 2 \sigma ^ 2 σ2 的高斯分布,记为N(μ, σ 2 \sigma ^ 2 σ2 )。其中期望值(均数) μ \mu μ 决定了位置,其标准差 σ \sigma σ 决定了分布的幅度( σ \sigma σ 越小曲线越尖峭)。N(0, 1)表示标准正态分布。可以利用正态分布近似估算二项分布和泊松分布。正态分布函数密度曲线公式如下:
    f ( x ) = 1 σ 2 π e − 1 2 ( x − μ σ   ) 2 f\relax{(x)} = \frac 1 {\sigma\sqrt{2\pi}} e ^ {- \frac 1 2 \left( \frac {x-\mu} \sigma\ \right)^2 } f(x)=σ2π 1e21(σxμ )2
    • 正态分布与其它分布的区别:正态分布是连续分布,泊松分布,二项分布都是离散分布; 二项分布的极限分布是泊松分布、泊松分布的极限分布是正态分布。正态分布符合中心极限定理:在特定条件下,大量统计独立的随机变量的平均值的分布趋于正态分布。
    • 正态分布的特点:符合68-95-99.7法则,即68.3%的面积在平均数左右的一个标准差 σ \sigma σ 范围内;95.4%两个 σ \sigma
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值