一个简单的权重百分比算法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 一个简单的权重百分比算法

一个简单的权重百分比算法

 2017/7/31 18:38:48  j2ee_yohn  程序员俱乐部  我要评论(0)
  • 摘要:importjava.util.Arrays;publicclassWeightALG{publicstaticvoidmain(String[]args){int[]ary=newint[]{7,7,7,7,10};for(inti=0;i<100000;i++)algoWeight(ary);}/***权重百分比算法*@paramorginData计算原始数据*@return返回命中数据的索引*/publicstaticintalgoWeight(int[]orginData){if
  • 标签:一个 权重 算法
class="java">import java.util.Arrays;

public class WeightALG {
	public static void main(String[] args) {
			int[] ary=new int[]{7,7,7,7,10};
			for(int i=0;i<100000;i++)
				algoWeight(ary);
		}
	
	
	/**
	 * 权重百分比算法
	 * @param orginData 计算原始数据
	 * @return 返回命中数据的索引
	 */
	public static int algoWeight(int[] orginData)
	{
		if(orginData==null || orginData.length==0){
			throw new IllegalArgumentException("orginData不能为空、并且长度不能为0");
		}

		final int total=Arrays.stream(orginData).sum();
		final double[] weights=Arrays.stream(orginData).mapToDouble((input)->(0.00D+input)/total).toArray();
		
		double weight=Math.random();
		double start=0;
		double end=weights[0];
		for(int idx=1;idx<=weights.length;idx++)
		{
			if(start<=weight && end>weight)
			{
				return idx-1;
			}
			start=end;
			end=start+weights[idx];
		}
		return -1;//如果返回-1是程序bug
	}
}


当orgiData数据比较大的时候可以考虑使用红黑树数据结构来做。
发表评论
用户名: 匿名