离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码
本文地址: http://blog.csdn.net/caroline_wendy/article/details/17120687
离散概率值, 是根据离散分布的概率(归一化), 计算出一个随机的值, 概率越大, 离散值出现的可能性就越大;
原理: 随机生成一个0-1的值,顺次累加概率值, 大于等于随机值输出, 由于概率值越大, 相加之后跨度越大, 越有可能输出;
重置(洗牌)(shuffle), 是随机打乱数组的值, 保持原值不变,更换位置;
原理:遍历数组, 随机生成一个当前值, 之后的值, 即[当前值, 之后的值], 交换位置;
代码如下:
/* * Algorithms.java * * Created on: 2013.12.03 * Author: Wendy */ /*eclipse std kepler, jdk 1.7*/ public class Algorithms { //根据输入的概率数组, 随机输出离散的值 public static int discrete(double[] a) { double r = StdRandom.uniform(); double sum = 0.0; for(int i=0; i= r) return i; } return -1; } //重置(洗牌), 把数组值的顺序打乱 public static void shuffle(double[] a) { int N = a.length; for(int i=0; i
输出:
discrete value = 2 shuffle : 0.3 0.2 0.4 0.1