由扔骰子看平均概率生成

昨天读到一个帖子,说如何通过扔骰子的方法得到7件事的平均概率情况(扔骰子只能得到6件事的均概率),其中一种解法为,扔两次,分别记为x,y,则定义计算式m=(x-1)*6+y,可得到m的范围为1-36,且m为均概率事件,则剩下要做的就很简单了,去掉36这一项,剩下的mod7即可。

通俗点说若想得到7件事的均概率,则必须能够通过计算得到m件事的均概率且m>=7,(上题m=36),然后再进行取舍。

因此,若想通过骰子得到4件事的均概率,则不需要定义新的计算式,因为掷骰子本身就是6件事的均概率(m=6且6>4),则对掷出的结果去掉5,6两项,剩下的mod4即可。

还有一种通解但是成功概率小很多的情况(本题求7的均概率成功率比较大,因为只有36这一种情况要舍弃),若需要n件事的概率,则先求得n转换为六进制数所需要的位数m,m就是转动骰子的次数(每转一次确定一位),转动m次后得到m个数字,计算得到六进制随机值p,如果p>n,则抛弃这次的投掷,否则认为是成功的投掷,但这样会大大降低得到可用解的概率,所以还需引申公式。

进而推广成为平均概率生成的问题,已知函数randM()可以等概率生成1~m的数字,试编写函数randN(),要求等概率生成1~n的数字

根据以上结论,分两种情况

1、若n<=m,则比较简单,通过取余便可得到(注意去掉多余的项数)

randN()

{

m=randM();

while(m>n)

{

m=randM();

}

return m;

}

2、若n>m,首先计算k,使得m^k>n>m^(k-1),k即为利用原函数的次数(上题即为掷骰子次数),利用掷k次骰子(用k次原函数)可得到m^k次种均概率事件且m^k>n,为方便后面讨论,记m^k=x.此时,依然有两种接法。

法一,生成概率比较低,但思路简答,将生成的x种均概率记为x种不同的情况,取其中的前n种即可(后面的舍弃)  注:此时虽然生成x种不同的均概率,但并非1~x的均概率事件

法二,生成概率较高,但需要一步运算,分别记k次利用randN()得到的数为k1,k2…kk,则通过公式k1+(k2-1)·k+(k3-1)·k^2……得到1~x的均概率,通过此种方法舍弃的情况可以减少,从而大大提高命中率

下面举一个例子,已知rand4(),要求生成1~31的均概率

rand31()

{

int x=rand4();

int y=rand4();

int z=rand4(); //因为4^3>31>4^2,所以原概率要利用3次,即k=3

int m=x+(y-1)*4+(z-1)*64; //则m为1-64的均概率

if(m>62)

重新生成x,y,z,重新计算m;

else

return   (m%31)+1;成功得到1-31的均概率,且命中率为31/32

}

解释:虽然此类解法可以生成1-m的均概率,但不能保证概率之和相加为1,因此有命中率一词,生成结果有效,不需要重新生成的概率越大,命中率越高。显然,在同样能实现1-m均概率的各种方法中,命中率应该越高越好。

转载于:https://www.cnblogs.com/yangtianxing/archive/2012/02/13/2349132.html

由扔骰子看平均概率生成相关推荐

  1. 一文看懂「生成对抗网络 - GAN」基本原理+10种典型算法+13种应用

    生成对抗网络 – Generative Adversarial Networks | GAN 文章目录 GAN的设计初衷 生成对抗网络 GAN 的基本原理 GAN的优缺点 10大典型的GAN算法 GA ...

  2. hung-yi lee_p10_分类/概率生成模型

    文章目录 研究背景 本节目的 本节要使用的例子 研究过程 把分类当成回归来算 理想做法 找到最佳函数的方法 研究成果运用 运用过程 结果 方法改进 模型总结 讨论 为什么选择正态分布模型? 关于后验概 ...

  3. GRADE:联合学习演化节点和社区表示的概率生成模型

    作者 | 李梓盟 审稿 | 董靖鑫 今天给大家介绍加拿大蒙特利尔大学的著名学者唐建等人发表的一篇文章.作者在文章中针对现有的图动力学建模方法不能明确地捕捉到时间上的社区动态这一问题,提出了通过在轨迹上 ...

  4. 用rankn()等概率生成1~m的通用方法

    之前看到一个算法题"用已有的rank7()函数生成rank10()函数",看到了各种思路,不过看到一个可以用rankn()函数生成任意rankm()的通用方法比较有意思,就实现了一 ...

  5. 通过随机数生成兑换码和概率生成随机数

    以下的方法是可以用来生成兑换码,以及按概率处理生成随机数的方法 首先是按概率生成随机数的方法,假设奖品有30000分,20000分,10000分,3000分,2000分 function get_ra ...

  6. 李宏毅机器学习课程4~~~分类:概率生成模型

    分类问题用回归来解决? 当有右图所示的点时,这些点会大幅改变分类线的位置.这时候就会导致整体的回归结果变差.当把多分类当成回归问题,类别分别为1,2,3,4--,因为回归的问题是预测具体的值,这样定义 ...

  7. 【李宏毅机器学习】05:概率生成模型Probabilistic Generative Model

    李宏毅机器学习05:概率生成模型 Probabilistic Generative Model 文章目录 李宏毅机器学习05:概率生成模型 Probabilistic Generative Model ...

  8. 概率生成模型:GDA和Navie Bayes

    1.线性分类软输出模型包含概率判别模型和概率生成模型 2.概率判别模型对条件概率建模,概率生成模型对联合概率建模 3.逻辑回归是经典的概率判别模型,GDA和朴素贝叶斯是生成模型 4.GDA三个假设,目 ...

  9. Java 按指定概率生成由字母、数字、特殊符号组成的密码

    package com.demo.uitls;import java.util.Random;/*** 按一定的概率生成一个随机的N位(N>=3)密码,必须由字母数字特殊符号组成,三者缺一不可* ...

最新文章

  1. 4kyu Sum by Factors
  2. 聚焦实战,架构升级!
  3. mac系统升级 brew 是用不了_MAC平台10款效率工具推荐
  4. 使用notebook 笔记(1)
  5. python创建员工_Python综合练习之创建员工信息表
  6. C# SQLHelper类
  7. Spss-系统聚类软件实操
  8. MacOS与Windows快捷键对照
  9. 计算机网络管理员四级理论知识试卷,2014计算机网络管理员模拟试题及答案
  10. Latex(texlive)安装配置教程(详细)
  11. C语言逻辑运算符,位运算符总结
  12. 服务器打不开网页dns错误是怎么回事,dns配置错误网页打不开
  13. 如何配置EditPlus放大、缩小字体的快捷键
  14. 学术英语理工(第二版)Unit1课文翻译
  15. js练习:筋斗云案例练习
  16. HDU 6304 Chiaki Sequence Revisited(二分+找规律)
  17. Python爬虫——爬取股票信息生成csv文件
  18. SAP PS 第13节 常用后台表总结
  19. 那些记在心里的经典诗词
  20. 海外优秀资讯抢先看6:私有应用云平台Sandstorm服务对象之开发人员

热门文章

  1. 关于PCI-E接口你要知道这些点
  2. 从字节码层面,解析 Java 布尔型的实现原理
  3. Bzoj1176:MokiaCogs1752:[BOI2007]摩基亚Mokia
  4. eclipse下使用hibernate tools实现hibernate逆向工程
  5. group by 分组
  6. 康威定律-软件之道:软件开发争议问题剖析
  7. Toolbar的困惑
  8. ElasticSearch Group by Multi Field,多字段聚合
  9. tomcat-maven-plugin 2.0版本发布
  10. OpenTURNS 不确定性、风险和统计数据开源组件