• 【转】Algorithms 离散概率值(discrete)和重置、洗牌(shuffle)算法及代码


    离散概率值(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<a.length; i++)  
    18             {  
    19                 sum += a[i];  
    20                 if(sum >= 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<N; ++i)  
    30             {  
    31                 int r = i + StdRandom.uniform(N-i); //"[ )"不能达到N-i, 最大N-i-1  将a[i]和a[i..N-1]中任意一个元素交换
    32                 double temp = a[i];  
    33                 a[i] = a[r];  
    34                 a[r] = temp;  
    35             }  
    36         }  
    37           
    38         public static void main(String[] args)   
    39         {  
    40             double[] a = {0.1, 0.4, 0.3, 0.2};  
    41             StdOut.println("discrete value = " + discrete(a));  
    42             shuffle(a);  
    43             for(int i=0; i<a.length; ++i){  
    44                 StdOut.print(a[i] + " ");  
    45             }  
    46             StdOut.println();  
    47         }  
    48     }  

    输出:

    1 [plain] view plain copy
    2 
    3     discrete value = 2  
    4     shuffle : 0.3 0.2 0.4 0.1   
  • 相关阅读:
    ORACLE批量更新四种方法比较
    ra_customer_trx_lines_all 应收发票行
    Toad for Oracle –> Debug by APPS
    应收帐款汇总
    spring3.0.5的rmi集成使用
    java synchronized详解
    用spirng和hessian构建分布式应用(远程接口)的方法(2)
    memcached——分布式内存对象缓存系统
    用spirng和hessian构建分布式应用(远程接口)的方法(1)
    如何在Spring中集成Hessian框架
  • 原文地址:https://www.cnblogs.com/sggggr/p/9143833.html
Copyright © 2020-2023  润新知