一切福田,不離方寸,從心而覓,感無不通。

随机物品权重算法设计

1、前言 在游戏开发中很多功能按权重随机给东西,比如:掉落、奖励、抽奖等等….. 2、功能 *)支持多个权重进行随机 *)能屏蔽指定权重,防止再次随机到 3、实现 [java] view plaincopy public int weightRandom(BitSet exclude, int… weights) {         if (weights == null) {             //安全性验证         }         int length = weights.length;         if (length == 0) {             return –1;         }         if (len == 1) {             int w = weights[0];             if (w < 0) {                 //安全性验证             } else if (w == 0) {                 return –1;             } else {                 return 0;             }         }         int total = 0;         for (int i = 0; i < len; i++) {             if (exclude != null && exclude.get(i)) {                 continue;             }             int w = weights[i];             total += w;         }         if (total <= 0) {             return –1;         }         int randomNum = random(1, total), hitIndex = –1, partNum = 0;         for (int i = 0; i < len; i++) {             if (exclude != null && exclude.get(i)) {                 continue;             }             int w = weights[i];             partNum += w;             if (partNum >= randomNum) {                 hitIndex = i;                 break;             }         }         return hitIndex; } from:http://blog.csdn.net/zeus_9i/article/details/11900015

龙生   10 Oct 2015
View Details

Java实现按权重随机数

一、问题定义: 问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数?? 例如: 复制代码代码如下: 权重: 8  2  11  79 权重返回的值: 0  1  2   3 二、分析问题: 思路一:创建一个数组数组大小为权重和的大小,如值0的权重是8,则放入8个0值,值1的权重是2,则放入2个1值,依次类推。 然后用用一个权重和大小的随机数,产生随机数,即可。缺点要占用过多的内存。 思路二: 权重和数组 w[i]存储的是[0,i]元素的所有元素的权重和  时间复杂度O(n) 空间复杂度O(n) 随机[0,W[399]] 看随机数 落在哪个Wi 内就选哪个  时间复杂度 O(longn) 所以总的时间复杂度时间复杂度O(n) 空间复杂度O(n) 伪代码: 轮盘赌 并不是一种特别好的选择算子,但它容易实现。 首先要明白一点,由于交叉、变异等算子,并不能控制进化方向,所以进化的重任落在选择算子上。 如果明白了这一点,就好办了。 轮盘赌,就是积累概率来实现的,通常适应度大的被选择的几率较高。 假如:fit为适应度数组,共m个 复制代码代码如下: for i=1 to m '先求和 sum=sum+fit(i) next i For i = 1 To n ‘n-是要生成多少个个体 temp = temp + fit(i) If rnd <= temp / sum Then 输出 i 就是结果 Exit Function End If Next i 三、解决问题: 复制代码代码如下: package datastruct; import java.util.HashMap; import java.util.Map; /** 权重随机数: 如              权重:8  2  11  […]

龙生   10 Oct 2015
View Details