栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java随机数生成具体实现代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java随机数生成具体实现代码

本文实例为大家分享了java随机数生成代码,供大家参考,具体内容如下

package com.gonvan.common.utils;
 
import java.util.*;
 

public final class LotteryAliasMethod {
 
  
  private final Random  random;
 
  
  private final int[]   alias;
 
  
  private final double[] probability;
 
  
  public LotteryAliasMethod(List probabilities) {
    this(probabilities, new Random());
  }
 
  
  public LotteryAliasMethod(List probabilities, Random random) {
    
    if (probabilities == null || random == null)
      throw new NullPointerException();
    if (probabilities.size() == 0)
      throw new IllegalArgumentException("Probability vector must be nonempty.");
 
    
    probability = new double[probabilities.size()];
    alias = new int[probabilities.size()];
 
    
    this.random = random;
 
    
    final double average = 1.0 / probabilities.size();
 
    
    probabilities = new ArrayList(probabilities);
 
    
    Deque small = new ArrayDeque();
    Deque large = new ArrayDeque();
 
    
    for (int i = 0; i < probabilities.size(); ++i) {
      
      if (probabilities.get(i) >= average)
 large.add(i);
      else
 small.add(i);
    }
 
    
    while (!small.isEmpty() && !large.isEmpty()) {
      
      int less = small.removeLast();
      int more = large.removeLast();
 
      
      probability[less] = probabilities.get(less) * probabilities.size();
      alias[less] = more;
 
      
      probabilities.set(more, (probabilities.get(more) + probabilities.get(less)) - average);
 
      
      if (probabilities.get(more) >= 1.0 / probabilities.size())
 large.add(more);
      else
 small.add(more);
    }
 
    
    while (!small.isEmpty())
      probability[small.removeLast()] = 1.0;
    while (!large.isEmpty())
      probability[large.removeLast()] = 1.0;
  }
 
  
  public int next() {
    
    int column = random.nextInt(probability.length);
 
    
    boolean coinToss = random.nextDouble() < probability[column];
 
    
    return coinToss ? column : alias[column];
  }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/150239.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号