游戏Algorithm----抽奖算法----奖品有权重的情况探讨
来源:互联网 发布:js sdk fail 编辑:程序博客网 时间:2024/06/11 00:32
这么考虑的
相当于一个盒子里有好几个颜色的小球,每种颜色的小球有多个,每次取完,小球放回盒子内
/** * 每次取完放回盒内 * @param count 抽奖次数 * @param oddsMap 权值表 * @return */public static <T> List<T> getLuckyDrawPutBack(int count,Map<T,Integer> oddsMap){List<T> list = Lists.newArrayList();SecureRandom rand = new SecureRandom();Map<T,Integer> factorMap = Maps.newHashMap();factorMap.putAll(oddsMap);if(null == factorMap || 0 == factorMap.size()){return list;}int sum = 0 ;for(Integer value : factorMap.values()){sum += value;}if(0 == sum){ return list;}for(int i =0; i<count ;i++){int random = rand.nextInt(sum)+1;//均匀的产生1到SUMint overlapCount = 0; for(Map.Entry<T, Integer> entry:factorMap.entrySet()){T key = entry.getKey() ;int value = entry.getValue() ;if((overlapCount < random) && (random <= (overlapCount+ value))){list.add(key);break;}overlapCount += value;}//for}return list;}
每次取完不放回盒内的情况
/** * 每次取完不放回盒内 * 抽取必有奖,奖可重复 * @param count 抽奖次数 * @param oddsMap * @return */public static <T> List<T> getLuckyDrawNobBack(int count,Map<T,Integer> oddsMap){List<T> list = Lists.newArrayList();SecureRandom rand = new SecureRandom();Map<T,Integer> factorMap = Maps.newHashMap();factorMap.putAll(oddsMap);if(null == factorMap || 0 == factorMap.size()){return list;}int sum = 0 ;for(Integer value : factorMap.values()){sum += value;}if(0 == sum){ return list;}for(int i =0; i<count ;i++){int random = rand.nextInt(sum)+1;//均匀的产生1到SUMint overlapCount = 0; for(Iterator<Map.Entry<T, Integer>> it = factorMap.entrySet().iterator();it.hasNext();){Map.Entry<T, Integer> entry = it.next();T key = entry.getKey() ;int value = entry.getValue() ;if((overlapCount < random) && (random <= (overlapCount+ value))){list.add(key);/* * 要取得不重复结果的方法 * it.remove(); * sum -= value; */sum -= 1; //不放回盒内,个数减一entry.setValue(value-1);//break;}overlapCount += value;}//for}return list;}
0 0
- 游戏Algorithm----抽奖算法----奖品有权重的情况探讨
- 游戏Algorithm----洗牌算法----探讨
- 随机选取算法 (有权重的记录中选取)
- 随机选取算法 (有权重的记录中选取)
- 随机选取算法 (有权重的记录中选取)
- jquery实现转盘抽奖--基于奖品转动的转盘
- “有权查看使用情况的应用”
- Bellman-ford算法应对有向图中有权值为负的情况下求最短路径
- 三点让你的网站有权重
- js 计算奖品概率抽奖
- Java实现游戏抽奖算法
- 微信平台抽奖算法总结-再也不用怕奖品被提前抢光
- Java根据概率、剩余奖品数量动态抽奖算法实现,概率总和可以不为100%
- 有权图的单源最短路算法
- android 什么是"有权查看使用情况的应用程序"
- 抽奖的概率算法。
- 抽奖算法的实现
- Python-- 有权重的随机选择, Weighted Random Choice
- Android Performance(5) 模拟屏幕
- 通过指纹识别模块验证用户,解锁手机
- 什么是字符串常量池?
- Hive shell 常用命令
- 创建对象时总说找不到符号,请帮帮解决下
- 游戏Algorithm----抽奖算法----奖品有权重的情况探讨
- 字符指针初始化方式与字符串存储位置之间的关系
- MFC可停靠菜单栏的创建过程
- 数据规范中的归一化与标准化:
- ORACLE10g新特性——全局HASH分区索引
- 基于davinci6467的DSP算法移植
- 一步一步学调试——gdb命令小结
- Shared XDM Definitions(共享XDM的定义)
- Directx 纹理贴图 模仿地面效果