美文网首页码农的世界
实现指定概率的随机事件

实现指定概率的随机事件

作者: QxQx | 来源:发表于2019-08-25 17:06 被阅读0次

在开发中,经常遇到一个需求,给一些事件,并指定这些事件出现的概率。例如:A:10%,B:20%, C:30%,D:40%
按照事件的概率随机选择一个其中一个事件。

实现思路:

根据大学概率论所学的知识(啥,概率论课你睡觉了,我也睡觉了。那就我吹你听吧),这是一个典型的均匀分布问题。不扯那些复杂的公式了,我的概率论知识也差不多都还给老师了,直接画图来解释一下。



图中,A,B,C,D四种颜色画出了四个事件出现的概率,也就是在[0,100]数轴上所占的长度。只要我们在[0-100]中取一个随机数,看这个随机数落在A,B,C,D哪个区间中,就取哪个事件。

用代码实现一下,现在主要写golang,先用golang实现一下:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    b := make(map[uint32]int32)
    b[0] = 10
    b[1] = 20
    b[2] = 30
    b[3] = 40
    h2 := make([]int, 4)
    for x := 0; x < 200000000; x++ {
        r := rand.Int31n(99)
        i, j := int32(0), int32(0)
        for k, v := range b {
            j = i + v - 1
            if r >= i && r <= j {
                h2[k]++
                break
            }
            i += v
        }
    }
    for _, b := range h2 {
        fmt.Print(float32(b)/2000000, " ")
    }
}

顺便统计了一下事件的概率,为了结果更真实一些,循环了2亿次,这个数据量基本可以比较真实的显示随机性了。
运行结果:



结果已经非常接近我们期待的概率了

java版:

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public class Main {
    public static void main(String[] args) {

        Map<Integer, Integer> m = new HashMap<>();
        m.put(0, 10);
        m.put(1, 20);
        m.put(2, 30);
        m.put(3, 40);
        int[] h2 = new int[4];
        for (int i = 0; i < h2.length; i++) {
            h2[i] = 1;
        }
        Random random = new Random();
        for (int x = 0; x < 200000000; x++) {
            int i = 0;
            int j = 0;
            int r = random.nextInt(99);
            for (Map.Entry<Integer, Integer> entry : m.entrySet()) {
                j = i + entry.getValue() - 1;
                if (r >= i && r <= j) {
                    h2[entry.getKey()]++;
                    break;
                }
                i += entry.getValue();
            }
        }
        for (int i : h2) {
            System.out.printf("%f   ", i / 2000000.0);
        }
    }
}

运行结果也比较接近期待值

相关文章

  • 实现指定概率的随机事件

    在开发中,经常遇到一个需求,给一些事件,并指定这些事件出现的概率。例如:A:10%,B:20%, C:30%,D:...

  • 指定概率随机数实现

    在实际开发中,经常会遇见指定概率随机数得到某一个值。比如取到某个值的概率百分之几,取到另一个值的概率百分之几。可以...

  • 概率基础

    写在前面 随机事件与概率随机试验随机事件和样本空间概率的定义概率的三大性质条件概率全概率公式与贝叶斯公式全概率公式...

  • 概率统计组队学习 之 随机事件与随机变量

    摘要:随机事件、随机变量の学习笔记涉及概念:随机事件,概率,古典概型,条件概率,全概率公式,贝叶斯公式,随机变量,...

  • 概率200527

    概率论是研究随机现象数量规律的数学分支,概率是对随机事件发生可能性大小的度量。 10.1随机事件与概率 10.1....

  • 自然语言处理——2.数学基础

    概率论基础 概率(probability) 概率亦称“或然率”。它反映随机事件出现的可能性大小的量度。随机事件是指...

  • 统计学基础:知识点

    随机事件随机事件运算律古典概率几何概型条件概率贝叶斯公式独立事件伯努利试验概率累积函数离散型随机变量两点分布二项分...

  • 统计建模与R语言

    第一章 概率统计的基本知识 1.1 随机事件 1.1.1 随机事件 1 随机事件 随机实验(random exp...

  • 统计学 学习笔记

    概率论 随机事件和概率及其分布 随机事件 变异 概率分布 数理统计 统计资料类别及其展示 统计资料类别 连续和离散...

  • 概率论与数理统计基础

    随机变量概述 随机变量与事件 随机变量的本质是一种函数(映射关系),在古典概率模型中,“事件和事件的概率”是核心概...

网友评论

    本文标题:实现指定概率的随机事件

    本文链接:https://www.haomeiwen.com/subject/jpahectx.html