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