得到的概率值_伪随机值的概率

计算伪随机值的概率

耿祥义

摘  要

        通过一些熟悉的场景,为初学者讲解一些重要的知识点,利用过去没有的条件,比如微信公众号,提供一些有趣的实例作为教材的课外读物,帮助学习者提高学习效果。 一 、重要知识点          Random类以及 HashMap类。 HashMap类的对象可以存放“键值对”数据,键不可重复。即如果HashMap对象已经有键值对数据,如果再向其添加,HashMap对象将清除先前的键值对数据       算法得到的随机值称作伪随机值,生活中,例如抛扔硬币看正反面获得的值称作真随机值。java.util包中的Random类可以帮助获得随机值(伪随机值)。例如,nextInt(m)随机返回0到m-1中的某个整数(伪随机值)。如果m取值2,每次调用nextInt(2)相当于模拟抛钢镚硬币。那么我们就可以编程练习计算这样的问题: 调用nextInt(2)方法10000次(样本空间的大小是10000),nextInt(2)得到伪随机值0的概率以及nextInt(2)得到伪随机值1的概率是多少?按概率论的理论,随着样本空间的增大,二者的概率应该都接近0.5(Random类设计的算法使得伪随机值的概率符合真随机值的概率)。当然,可以计算nextInt(m)得到的伪随机值0,1,2,...m-1的概率,随着样本空间的增大,nextInt(m)得到的伪随机值0,1,2,...m-1的概率都趋近1/m。 二、程序效果图

324ad3cf5214968750f938703f1b2c86.png

三、代码下载https://share.weiyun.com/5RVf0GV  四、在线阅读

MainClass.java

import java.util.Arrays;

public class MainClass {    public static void main(String args[]){        VerificationRandom verification =                                          new Verification();        int samples = 100000;//样本空间大小        verification.setSamples(samples);        //返回0至m伪随机数的概率:        int m =10;        double probability[] =         verification.verificationRandom(m);        System.out.println        ("样本空间大小"+samples);        System.out.println        ("得到0至"+m+"伪随机数的概率");        System.out.println(Arrays.toString(probability));        double sum = 0;        for(double d:probability){           sum += d;        }        System.out.println("概率和:"+sum);        Arrays.sort(probability);        System.out.println       ("最大概率:"+probability[probability.length-1]);        System.out.println        ("最小概率:"+probability[0]);    } } 

IntegerFrequency .java

public class  IntegerFrequency {    private int number;    private int count; //number出现的次数    public void setNumber(int m){        if(m>=0)           number = m;    }    public int getNumber(){        return number;    }    public void setCount(int m){        if(m>=0)           count = m;    }    public int getCount(){        return count;    } }  VerificationRandom .java public interface VerificationRandom {     public void setSamples(int m);//设置样本空间大小     public double [] verificationRandom(int m);    //验证0至m(不包括m)出现的概率是否符合真随机数出的概率 }  VerificationRandom .java import java.util.Random; import java.util.HashMap; public class Verification implements VerificationRandom{     //存放键值对:键是String,值是IntegerFrequency:     HashMap map;     Random   random;     int samples =1000;//样本数     Verification(){        map =         new HashMap();        random = new Random();      }     public void setSamples (int m){        samples = m;     }     public double [] verificationRandom(int m){        double probability[];//存放数字出现的概率        probability = new double[m];        for(int i = 0;i           int n = random.nextInt(m);           IntegerFrequency number =           new IntegerFrequency();           number.setNumber(n);            if(map.containsKey(""+n)){              IntegerFrequency isSave =                                            map.get(""+n);              isSave.setCount(isSave.getCount()+1);            }           else {              map.put(""+n,number); //散列映射添加键值对           }        }           int k = 0;        while(k           if(map.containsKey(""+k)) {             IntegerFrequency n = map.get(""+k);             int count = n.getCount();             double frequency =                         (double)count/samples;             probability[k] = frequency;           }           k++;        }        return probability;     } } 推荐阅读
  • 枚举类型与交通信号灯

  • HashSet集合的一些特殊情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值