查看: 4587|回复: 16

[已经过期] 有两个关于随机数几率的问题

[复制链接]
梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
回帖
384
发表于 2014-11-26 08:12:22 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 stella 于 2014-11-26 08:16 编辑

1):是rand(301)得到300的几率大,还是rand(101)+rand(101)+rand(101)得到300的几率大?

2):是rand(101)+rand(101)+rand(101)得到300的几率大,还是rand(101)*3得到300的几率大?
星尘泪 该用户已被删除
发表于 2014-11-26 08:30:50 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
回帖
384
 楼主| 发表于 2014-11-26 08:36:03 | 显示全部楼层
星尘泪 发表于 2014-11-26 08:30
根据概率学
1.rand(301)
2.rand(301)*3

能不能得出概率小的那一种算法算出300的概率是多少?

点评

lx已说明  发表于 2014-11-26 09:44
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-11-26 09:35:30 | 显示全部楼层
本帖最后由 myownroc 于 2014-11-26 11:50 编辑

rand(301)要等于300概率为1/301
3个rand(101)相加要是想等于300,必须要求3个数都是100
得到100的概率是1/101,故这种方法的概率是1/101的三次方。

然后rand(101)*3概率是1/101

点评

@p叔 手抖……  发表于 2014-11-26 11:47
好吧,是我自己搞错了,我以为rand(301)是1~301,结果发现是0~300  发表于 2014-11-26 10:06
3个rand(101)相加要是想等于300未必是要都100啊,别误导人……  发表于 2014-11-26 10:05
1/101的三次方  发表于 2014-11-26 09:41
(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
0
星屑
34463
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2014-11-26 09:50:55 | 显示全部楼层

1):LS

2):rand(101)*3得到300的几率大。
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
回帖
3309
发表于 2014-11-26 10:12:04 | 显示全部楼层
本帖最后由 金圭子 于 2014-11-26 10:18 编辑

概率啥的我最喜欢了,不过好久不摸ruby了,差点忘了rand(301)是0~300了……结果4楼那里写了个错误的点评,在此致歉。

说一个简单点的情况,把100变成10,把3变成2,这样看起来好理解一点:
假设现在是rand(10),也就是0~9,那0和9的几率都是1/10。
那rand(20)的几率就是0~19,各1/20。
而rand(10)*2呢,是0、2、4、6、8、10、12、14、16、18的几率各为1/10
而rand(10)+rand(10)呢,0和18的几率都是1/100,因为必须是都是0和9的时候才能得到0和18,那一个为0的几率是1/10,另一个也是1/10,最后就是1/100。
下来1和17的话是2倍的0和18,因为1的话是0+1或者1+0,每个是1/100,一共是2/100。
同理,2和16是3/100,3和15是4/100……最后9是10/100。

如果还是不理解,可以看这个图:

QQ截图20141126102021.png
最近好多想到PM的问题……不会嫌我烦了吧……
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-11-26 10:59:34 | 显示全部楼层
前来解答作死:
设Xi是独立同分布(independent identical distributed)的随机变量,P(Xi=k) = p(k),(1<=i<=n)
在这个问题里面(第一个问题的第二种情况),n=3,k=0,1,2,3,...,100,p(k) = 1/101,对于任意的k
考察X1的概率母函数g(s):
1.png
由于Xi是独立同分布的,所以Y的概率母函数是g(s)的n次方(这里n=3)
2.png
则利用概率母函数的性质,P(Y=300)为s^300前的系数:
P(Y=300)=(302C2+201C2+100C2)/(101^3)=1/(101^3)

PS:其实这种方法不是作死,用这种方法,求任意P(Y=k)都是比较容易的(相比于穷举而言)
回复

使用道具 举报

梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2014-11-26 12:03:48 | 显示全部楼层
本帖最后由 myownroc 于 2014-11-26 12:09 编辑

不过我还想说的是编程中的随机数是伪随机数,样本数量一大会有规律的……
于是单纯的rand(x)规律比较明显,而n个rand(x/n)相加却能有所改善
以下是VB的结果

随机生成(x, y)以(x, y)为坐标绘制点。
rand(x) rnd.png [pre lang="VB" line="1"]Private Sub Command1_Click()
  Me.Cls
  Dim x As Single, y As Single
  Dim i As Integer
  Me.DrawWidth = 2
  For i = 1 To 5000
    Randomize
    x = Rnd * 5000
    Randomize
    y = Rnd * 5000
    Me.PSet (x, y)
  Next
End Sub[/pre]

rand(x/n) rand.png [pre lang="VB" line="1"]Private Sub Command3_Click()
  Me.Cls
  Dim x As Single, y As Single
  Dim i As Integer
  Me.DrawWidth = 2
  For i = 1 To 5000
    Randomize
    x = Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000
    Randomize
    y = Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000 + Rnd * 1000
    Me.PSet (x, y)
  Next
End Sub[/pre]

地图炮:@RyanBern @金圭子 @芯☆淡茹水  

点评

我的意思是比之前的均匀了一点,样本量一大又能看出来  发表于 2014-11-26 15:09
其实我只是想说,第二种方法得到的根本不是均匀分布...  发表于 2014-11-26 14:55
此帖已经被玩坏,都怪我起的头不好  发表于 2014-11-26 14:29
初等概率论  发表于 2014-11-26 12:39
↓这些是概率论里的?  发表于 2014-11-26 12:38

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 我很赞同

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

梦石
4
星屑
4454
在线时间
6784 小时
注册时间
2014-1-6
回帖
4956

开拓者

发表于 2014-11-26 12:41:36 | 显示全部楼层
啊!!!!!我不懂数学!我不懂数学!为啥在水区出现!{:2_270:}
回复

使用道具 举报

梦石
0
星屑
50
在线时间
50 小时
注册时间
2006-11-16
回帖
3309
发表于 2014-11-26 13:51:29 | 显示全部楼层
本帖最后由 金圭子 于 2014-11-26 13:58 编辑
myownroc 发表于 2014-11-26 12:03
不过我还想说的是编程中的随机数是伪随机数,样本数量一大会有规律的……
于是单纯的rand(x)规律比较明显, ...


我擦,第一个也太明显了吧,典型的线性代数啊╮(╯o╰)╭
第二个倒是很符合指数律的。

嗯,拷贝到VB6实测了一下(我一直觉得vb6是个好东西,平时开个解密码玩配对算24点之类的直接用vb6写个程序跑下多快),
第一个点过去简直就是波浪一样的感觉(汗),
第二个倒是有点星云团的感觉(笑)。

很好奇Command2是啥……

先沉下去想想怎么写一个模拟指数律效果东东出来……

点评

@小传子:真正的随机是完全不受任何影响,但实际很难,伪随机就是比如以当时时间的微秒(百万分之一秒)为随机值这种并非真正随机。  发表于 2014-11-30 21:11
伪随机是什么,大雾  发表于 2014-11-29 14:33
采用LCG产生随机数本身就有这个问题,公式X_n = aX_n-1 + c (mod M)。为此可以采用ICG,公式为X_n = a/X_n-1 + c (mod M)  发表于 2014-11-26 14:01
所有编程语言中的随机数函数都是伪随机吧  发表于 2014-11-26 14:01
Command2是(rnd * 5000 + rnd * 5000 + rnd * 5000 + rnd * 5000 + rnd * 5000) / 5  发表于 2014-11-26 14:01
最近好多想到PM的问题……不会嫌我烦了吧……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部