`
j2ee_yohn
  • 浏览: 172182 次
  • 性别: Icon_minigender_1
  • 来自: 湖南/株洲
社区版块
存档分类
最新评论

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

    博客分类:
  • 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数据比较大的时候可以考虑使用红黑树数据结构来做。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics