数据结构与算法-随机函数

随机函数

在 Java 中的随机函数是 Math.random()。该函数会等概率的随机返回一个[0,1) 的数。在数学中,等概率是不可能的,但是在计算机中,小数是有精度的,数学中是没有的。验证如下:

/**
 * 验证 Math.random() 的等概率
 */
public class MathRandomDemo {
    public static void main(String[] args) {
        int count = 0;
        int loopCount = 1000;
        for (int i=0; i

输出结果:

0.275
0 出现了103 次
1 出现了107 次
2 出现了126 次
3 出现了117 次
4 出现了115 次
5 出现了106 次
6 出现了107 次
7 出现了108 次
8 出现了111 次

根据输出结果可以看到,[0,8] 出现的次数基本差不太多。由此可以得出,[0,x],x出现的概率就是 x,那此时想让 [0,x] ,x 出现的概率是 x^2,怎么处理?

/**
 * Math.random 的取值为[0,1)
 * x 属于 [0,1),如何将 x 在 [0,1) 出现的概率由 x 调整为 x^2
 */
public class MathPowerRandom {

    public static void main(String[] args) {
        int count = 0;
        int loopCount = 10000;
        
        double x = 0.17;
        for (int i=0; i

输出结果

0.0044
0.004913000000000001

结果很相近。

那么用 Math.min()怎么处理呢?

首先确定得到 x 的概率是 x,那么没有得到 x 的概率就是 1-x,那么得不到 x^2 的概率就是 (1-x)^2, 那么 x^2 的概率就是 1 - (1-x)^2。所以:

public class MathPowerRandom {

    public static void main(String[] args) {
        int count = 0;
        int loopCount = 10000;
        
        double x = 0.17;
        for (int i=0; i

输出结果

0.3198
0.31110000000000004



页面更新:2024-03-22

标签:函数   数据结构   小数   概率   精度   算法   次数   独立

1 2 3 4 5

上滑加载更多 ↓
Top