Java教程

算法题:1~5随机数函数转化成1~7的随机函数(等概率)

本文主要是介绍算法题:1~5随机数函数转化成1~7的随机函数(等概率),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、1~5随机函数

  public static int sourceFunc() {
        return (int) (Math.random() * 5) + 1;
    }

2、将原函数转化为[0,1]返回值的函数

    public static int tmpFunc() {
        int i = sourceFunc();
        if (i < 3) {
            return 0;
        } else if (i > 3) {
            return 1;
        } else {
            return tmpFunc();
        }
    }

3、目标函数(二进制算法,000为0,111为7,所以0~7是三个二进制位)

    public static int targetFunc() {
        return (tmpFunc() << 2) + (tmpFunc() << 1) + tmpFunc();
    }

4、证明是等概率的

     public static void main(String[] args) {
        int size = 1000000;
        for (int i = 0; i < 7; i++) {
            int count = 0;
            for (int j = 0; j < size; j++) {
                if (targetFunc() == i) count++;
            }
            System.out.println("出现" + i + "的概率为:" + (count * 1d / size));
        }
    }

  控制台:

出现0的概率为:0.125118
出现1的概率为:0.125029
出现2的概率为:0.124792
出现3的概率为:0.125041
出现4的概率为:0.125122
出现5的概率为:0.124823
出现6的概率为:0.12527

 

这篇关于算法题:1~5随机数函数转化成1~7的随机函数(等概率)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!