怎样正确地将 1 升水随机分成 3 份

2016-11-14 21:48:54 +08:00
 qinjiannet
之前一直认为将 1 升水随机分成3份应该这样操作:

第 1 份,从 1 升水中取出 X 升, X 是[0, 1]之间的随机数

第 2 份,从剩下的水中取出 Y 升, Y 是[0, 1 - X]之间的随机数

第 3 份,剩余的水为 1 - X - Y

但实际上这样并不等同于“随机分成3份”

(惊讶脸)

正确的做法貌似是这样的:

第 1 份,从 1 升水中取出 X 升, X 是[0, 1]之间的随机数

第 2 份,从 1 升水中取出 Y 升, Y 是[0, 1]之间的随机数,若X + Y > 1,则从第1步重新开始

第 3 份,剩余的水为 1 - X - Y
7933 次点击
所在节点    程序员
57 条回复
banixc
2016-11-14 22:04:43 +08:00
所以什么叫做“随机分成 3 份”。
这里“随机”的定义是什么?
DiamondbacK
2016-11-14 22:05:59 +08:00
正确的做法是:
先给出「随机分成 3 份」的操作性定义,再执行这个操作。

概率论民科的一大原罪就是越过定义讨论问题。
参考「贝特朗悖论」。
cgcs
2016-11-14 22:08:33 +08:00
恩,照一般逻辑理解:

随机生成三个[0,1]之间的随机数, A,B,C

SUM = A + B + C

第一份水 = A/SUM (升)
第二份水 = B/SUM (升)
第三份水 = C/SUM (升)
Quaintjade
2016-11-14 22:09:21 +08:00
不是很喜欢“从第 1 步重新开始”这种做法,因为总有倒霉蛋会重复好多次,次数的方差比较大。

抛开水这个比方,其实就是随机三分线段。更好得做法应该是,若 X+Y<=1 ,则三份水为{X,Y,1-X-Y};否则{1-X,1-Y,X+Y-1}。
murmur
2016-11-14 22:21:11 +08:00
闭着眼睛扬出去两瓢就完了
binux
2016-11-14 22:23:41 +08:00
拿 3 个大盆放地上,站三楼,把水浇下去
qinjiannet
2016-11-14 22:30:03 +08:00
@Quaintjade 感谢,学到了一种新方法!
qinjiannet
2016-11-14 22:34:40 +08:00
@banixc @DiamondbacK 新增了一条附言:

如果将题面换成:

在长度为一米的木棒上任取两点将木棒分成三段

“任取两点”的定义是否明确?
Herobs
2016-11-14 22:34:44 +08:00
取 3 个 [0-] 随机数 X , Y , Z , SUM = X + Y + Z

结果就是 X / SUM, Y / SUM, Z / SUM
Herobs
2016-11-14 22:35:54 +08:00
发现和 #3 一样。。。
NeinChn
2016-11-14 22:38:16 +08:00
结果是 X / SUM, Y / SUM, Z / SUM 的需要优化一下
浮点数都是有误差的
所以应该是 X / SUM, Y / SUM , SUM - X / SUM - Y / SUM
否则加起来不是 SUM
murmur
2016-11-14 22:42:19 +08:00
@NeinChn 与其优化你的浮点数不如找点无残留的理想容器
menc
2016-11-14 22:57:36 +08:00
你们光说不行啊,要给出形式化的证明啊,证明期望符合每桶各 1/3 的水
@cgcs
@Quaintjade
@qinjiannet
murmur
2016-11-14 23:00:46 +08:00
@menc 你这题面自始至终就没提到过 1/3 这个问题 而且按自然的说法大量的事件统计起来应该印象中是泊松分布?

没人告诉你期望是 1/3 如果要 1/3 的随机数题面要给明的
lecher
2016-11-14 23:06:57 +08:00
简化问题不过是线段内任取两点即可。
直接取两个[0-1]随机数, A1 、 A2
则 0-1 之间的距离自然就会被 A1 、 A2 分成三段,并且 A1 、 A2 满足题目要求的随机性。

剩下的就是, A1 、 A2 排个序,假设 A2 是大数,然后第二份的数量是|A2-A1|, 第三份的数量是 1-A2
lecher
2016-11-14 23:13:35 +08:00
简化成图片大致就是这个样子。
A1 、 A2 为线段上面的两个随机数,且 A2>A1 。
最终计算出来的三份线段长度就可以满足题目要求的随机性: A1 、 A2-A1 、 1-A2

0-----------A1-------------------A2------------------1
|<--A1--->|<---(A2-A1)--->|<---(1-A2)---->|
banixc
2016-11-14 23:18:17 +08:00
@qinjiannet 如果换成木棒的说法,那这个题目的回答应该是这样:
第一步:取 0 < x ,y < 1
第二步:第一份水为 x' = min(x,y) 第二份为 y'= abs(x-y) 第三份为 1-x'-y'
目前我还没有想到如何证明这种取法和原本的取法是等效的。
murmur
2016-11-14 23:19:15 +08:00
好吧,喷了半天我才明白楼主要的点是什么
( 1 )作为理工科,严谨性是第一的,在自然界均匀分布并不是那么好找的,反倒是什么泊松分布了,高斯分布了比较好找,如果是真人倒水的话,第一下绝大多数我认为会选择 1/2 以下,因为倒太多了第二次倒什么啊,理想容器这些情况也不能少,高中都知道的东西怎么在网上提问就忘了呢?
( 2 )你可以去翻翻概率论的书,这个题实际上是给定 x 的分布求 f(x)的分布(特么我也不确定了),所以说如果你不给定你“随机”的方式,没人保证最后的期望是 1/3 ,所以说高等数学有用啊,大学无用论这不就看出来么,按照你的要求,我认为 A/(A+B+C),其中 A 、 B 、 C 都是均匀分布反倒是最靠谱的答案,虽然这个也需要数学证明
Quaintjade
2016-11-14 23:24:34 +08:00
@qinjiannet
“在线段上随机取一点”一般不会有歧义,通常默认为连续均匀分布的概率。
“在线段上任取两点”通常默认为取两点是相互独立的。

但请注意以上只是习惯上默认,严格来说你应该用数学语言限定“随机”这个概念,否则就像 2 楼提到的「贝特朗悖论」那样,“在圆上随机取弦”就会导致歧义。
Quaintjade
2016-11-14 23:31:37 +08:00
@banixc 去问折棒太郎

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX