ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法题:使得随机数出现0~X之间的概率从X变为X平方

2022-02-28 09:34:03  阅读:159  来源: 互联网

标签:平方 概率 int 算法 随机数 区间 出现 Math


1、先证明随机数出现0~X的概率是X

  

  public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            test(i / 10d);
        }
    }

    public static void test(double x) {
        int count = 0;
        int size = 10000;
        for (int i = 0; i < size; i++) {
            if (Math.random() <= x) {
                count++;
            }
        }
        System.out.println(x + "区间内出现的概率:" + (count * 1.0 / size));
    }

控制台:

0.1区间内出现的概率:0.0992
0.2区间内出现的概率:0.2015
0.3区间内出现的概率:0.3023
0.4区间内出现的概率:0.3938
0.5区间内出现的概率:0.5021
0.6区间内出现的概率:0.5979
0.7区间内出现的概率:0.6958
0.8区间内出现的概率:0.7983
0.9区间内出现的概率:0.8993

 

2、分析X平方概率的意思,首先0~1之间,前闭合后不闭(前包后不包)。所以除了0,其他都是小数。

小数的平方会比原值更小,也就是说这个概率是变小了

 

3、X的平方,相当于出现了两次随机数行为,并且两次都需要满足一定的条件

 

4、条件的区间是0~X,也就是说要使得出现两次随机数的行为,同时(&&)满足出现在区间0~X之间

 

5、反向思维,两次随机数行为都出现在区间0~X之间。即可等价为至少一次随机数行为出现在X~1之间

 

6、两个数之间至少有一个数满足一定条件,则可取MAX。相当于至少要有1次随机数大于X才满足

 

7、从结果再反推,MAX要出现在0~X区间,则必须两次随机数都在0~X区间,单次随机数出现在区间的概率是X,则两次都满足的情况下是X*X,即X的平方

 

8、代码验证

  public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            test(i / 10d);
        }
    }

    public static void test(double x) {
        int count = 0;
        int size = 10000;
        for (int i = 0; i < size; i++) {
            if (Math.max(Math.random(), Math.random()) <= x) {
                count++;
            }
        }
        System.out.println(x + "区间内出现的概率:" + (count * 1.0 / size));
    }

  控制台:

0.1区间内出现的概率:0.0112
0.2区间内出现的概率:0.0411
0.3区间内出现的概率:0.092
0.4区间内出现的概率:0.1554
0.5区间内出现的概率:0.2516
0.6区间内出现的概率:0.3593
0.7区间内出现的概率:0.4917
0.8区间内出现的概率:0.6451
0.9区间内出现的概率:0.8096

 

标签:平方,概率,int,算法,随机数,区间,出现,Math
来源: https://www.cnblogs.com/gabin/p/15944216.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有