Algorithms - 离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码
来源:互联网 发布:少儿编程培训 编辑:程序博客网 时间:2024/06/06 06:59
离散概率值(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<a.length; i++){sum += a[i];if(sum >= r) return i;}return -1;}//重置(洗牌), 把数组值的顺序打乱public static void shuffle(double[] a){int N = a.length;for(int i=0; i<N; ++i){int r = i + StdRandom.uniform(N-i); //"[ )"不能达到N-i, 最大N-i-1double temp = a[i];a[i] = a[r];a[r] = temp;}}public static void main(String[] args) {double[] a = {0.1, 0.4, 0.3, 0.2};StdOut.println("discrete value = " + discrete(a));shuffle(a);for(int i=0; i<a.length; ++i){StdOut.print(a[i] + " ");}StdOut.println();}}
输出:
discrete value = 2shuffle : 0.3 0.2 0.4 0.1
- Algorithms - 离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码
- shuffle算法(洗牌算法)
- 洗牌算法(shuffle)
- 洗牌算法shuffle
- 洗牌算法shuffle
- 概率算法 -- 洗牌
- 等概率洗牌算法
- 洗牌算法之Knuth Shuffle
- perfect shuffle 完美洗牌算法
- 洗牌算法-Shuffle an Array
- 等概率随机洗牌算法
- 洗牌算法Fisher–Yates shuffle
- 经典洗牌算法(Knuth-Durstenfeld Shuffle)
- 洗牌算法Fisher–Yates shuffle
- 优化洗牌(shuffle)和排序阶段
- 代码笔记 | 洗牌算法
- 洗牌算法及证明
- POJ-2417 Discrete Logging (BSGS算法,离散对数)
- android的TextView使用Html(图片显示)格式。。。。。。
- 利用monkeyrunner对android模拟器截图的python脚本
- Java keytool配置https双向认证
- CSS中的一些小方法
- 子查询解嵌套in改写为exists
- Algorithms - 离散概率值(discrete) 和 重置\洗牌(shuffle) 算法 及 代码
- platform_driver_probe与platform_driver_register的区别
- TWO-WIRE INTERFACE CONTROLLER(TWI控制器)
- tomcat get提交乱码
- JSON语法跟JS语法一致的,JSON转JS很容易
- 面对一切,我们要坦然
- QT 5.1 中文问题 乱码 方框
- 疯狂java java实现网页验证码
- sys通过授予select_catalog_role角色给用户,使用户有权限查询数据字典。