Robin_Liu_ 2019-01-16 10:07 采纳率: 100%
浏览 453
已采纳

根据离散概率返回int值的算法的疑惑

图片说明

这是在《算法》这本书上看到的一题,我没能想通左边期望的结果与右边算法的关系。

现假设a[]有5个元素,每个元素的值都为0.2。如果按照左边期望出现的结果,右边的算法当到a[3]出现i的概率为sum=0.8,但是i=3出现的概率应为a[3]=0.2。是我没理解期望结果(离散概率随机)的意思还是算法没有想清楚?

麻烦大家给解答,谢谢。

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-01-17 00:16
    关注

    很简单,比如随机生成一个学生的成绩。为简化起见,学生的成绩用5分制吧。可以得 1 2 3 4 5 分。
    显然,得某个分数的概率是不同的,假设分别是 0.05 0.15 0.4 0.3 0.1 (也就是说5%的人得到1分,15%的人得到 2 分 ...)
    现在要按照这个分布率随机生成一个成绩,怎么做呢,首先生成一个0~1的随机数,比如生成了0.4710234 (我随便写的)
    让这个值=r
    把 0 0.05 0.15 0.4 0.3 0.1 放入a,因为数组下标从0开始,但是实际上没有0分,我们在数组前补一个0.
    然后循环了。
    sum = 0
    先和a[0]的累加,sum = 0,判断是否大于r,也就是0.4710234,显然没有,继续
    然后和1分的累加,sum = 0.05,判断是否大于r,没有,继续
    和2分的累加 sum = 0.3 继续
    和3分的累加 sum = 0.7,超过了 r,所以,返回当前下标 3
    也就是说,根据随机数0.4710234,我们生成了一个学生的分数 3
    因为随机数r是均匀分布在0~1之间的,所以根据数组a,我们生成1 2 3 4 5分的概率正好就是我们要的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog