微信红包算法遐想
来源:互联网 发布:微软程序员 编辑:程序博客网 时间:2024/05/14 08:48
private final AtomicLong seed; private static final long multiplier = 0x5DEECE66DL; private static final long addend = 0xBL; private static final long mask = (1L << 48) - 1; /** * Creates a new random number generator. This constructor sets * the seed of the random number generator to a value very likely * to be distinct from any other invocation of this constructor. */ public Random() { this(seedUniquifier() ^ System.nanoTime()); }
闲来无事,想如果自己设计微信红包,怎么设计呢?
因为我不是微信红包的开发人员,所以以下内容纯属虚构
先说下我的算法,每人随机一个数,然后把所有人的加起来成为分母,每个人的数是分子,分子除以分母,就是这个人占用红包的额度。
直接看代码
public class Haobao {public static List<Integer> buildFen(int fen,int i){if(fen<=i){return null;}List<Integer> ins=new ArrayList<Integer>(i);List<Integer> cns=new ArrayList<Integer>(i);//Random r=ThreadLocalRandom.current();Random r=new Random();int total=0;for(int j=0;j<i;j++){int c=r.nextInt(i*10)+1;total=total+c;ins.add(c);}BigDecimal t=new BigDecimal(total);BigDecimal f=new BigDecimal(fen);BigDecimal s=f.divide(t,4,BigDecimal.ROUND_DOWN);for(int j=0;j<i-1;j++){int c=s.multiply(new BigDecimal(ins.get(j))).intValue();if(c==0||(fen-c)<(i-j)){c=1;}fen=fen-c;cns.add(c);}cns.add(fen);return cns; } public static void main(String[] args){for(int k=0;k<10;k++){long begin=System.currentTimeMillis();for(int i=0;i<10*10000;i++){List<Integer> s=buildFen(2245, 100);//System.out.println(s.toString());}System.out.println("time:"+(System.currentTimeMillis()-begin));}}}
Random VS ThreadLocalRandom
有人说ThreadLocalRandom 性能比Random高,有人说Random线程不安全。
今天就看下源码,本人看的是JDK 1.7的
先看Random的,关键是seed因子
private final AtomicLong seed; private static final long multiplier = 0x5DEECE66DL; private static final long addend = 0xBL; private static final long mask = (1L << 48) - 1; /** * Creates a new random number generator. This constructor sets * the seed of the random number generator to a value very likely * to be distinct from any other invocation of this constructor. */ public Random() { this(seedUniquifier() ^ System.nanoTime()); }
再看下ThreadLocalRandom ,首先ThreadLocalRandom 继承了Random,仔细看接口,一些方法都是重用父类的。
用TheadLocal 实现的线程安全。
private static final ThreadLocal<ThreadLocalRandom> localRandom = new ThreadLocal<ThreadLocalRandom>() { protected ThreadLocalRandom initialValue() { return new ThreadLocalRandom(); } };
0 0
- 微信红包算法遐想
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法
- 微信红包算法?
- [算法] -- 微信红包算法
- 微信红包算法探讨
- 微信红包算法探究
- 微信红包算法讨论
- 微信随机红包算法
- 微信红包的算法
- 微信红包算法研究
- 微信红包算法研究
- 模拟微信红包算法
- 参考微信红包的抢红包算法
- 老员工辞职原因
- 评分超过9.0评价人数超过1000的书籍
- ros节点/话题/服务...管理工具multimaster_fkie的安装和简单使用
- acm sdut refresh的停车场
- springmvc+mybatis jar包
- 微信红包算法遐想
- ios 开发 navigationbar上私有属性的获取
- 异常问题解决方案经验总结
- android显示gif图
- 模拟实现进度条
- java中常用的算法,android中常用的算法(冒泡排序算法、希尔排序算法等)
- IOS 沙盒与清除缓存
- UVA 442 Matrix Chain Multiplication (矩阵链乘)
- FunDA(11)- 数据库操作的并行运算:Parallel data processing