怎样正确地将 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 条回复
qinjiannet
2016-11-14 23:55:32 +08:00
@murmur 第二种分配方法的期望的确是 1/3 , 1/3 , 1/3
ProkillerJ
2016-11-15 00:07:39 +08:00
蒙提霍尔悖论?
Quaintjade
2016-11-15 00:09:10 +08:00
DiamondbacK
2016-11-15 00:18:57 +08:00
@qinjiannet
「任意」和「随机」的含义是不同的。
在概率论中,「随机取样」和「随机样本」惯例上蕴含「等概率」条件,但「任意」这个词没有任何关于随机变量的分布函数的信息。

总之,问题在于应当先给出操作性定义或者分布函数,然后再计算。
但是「怎样正确地将 1 升水随机分成 3 份」这个问题的表述,其实是在问「什么样的分布 /操作才算是将 1 升水随机分成 3 份?」,这是在要求为一个未定义的操作给出定义。
如果还有后续问题,在某种定义基础上可以得出确定性答案的问题,比如问「将 1 升水随机分成 3 份,那么每一份的容积服从什么分布?」那么可以通过补充定义来修正这个问题。
如果没有后续问题,即这句话已经是问题的本身 /全部,那这就是个死胡同,是个语言陷阱。
abcsuperman
2016-11-15 02:10:16 +08:00
楼上正解。
v9ox
2016-11-15 02:13:42 +08:00
同 3 楼 9 楼

直接生成 3 个[0,1]随机数, 然后除以三.

提需求的人如果说不行, 再根据需求变更方案.
tyrealgray
2016-11-15 06:37:51 +08:00
不应该是拿三个盆子,两根管子,然后用连通器原理吸上个两口就可以搞定了么?????
yidinghe
2016-11-15 07:43:47 +08:00
随机分成 N 份的意思可以理解为 0 和 1 之间出现随机不重复的 N-1 个数字。
shierji
2016-11-15 07:59:08 +08:00
我考虑过 这个其实就是微信红包问题
powergx
2016-11-15 08:02:17 +08:00
生成两个 0-1 的随机数 a 和 b, 第一份 = a, 第二份=b ,第三份 = 1-a-b
9hills
2016-11-15 08:28:27 +08:00
把水搅拌下,然后三等分。水分子随机进入三份中
qian19876025
2016-11-15 08:49:03 +08:00
额为嘛不是 1 先从 一升水的杯子里面 倒出 X 得到 第一个杯子 1-x 第二个杯子 x
2 再分别从 第一个杯子和第二个杯子 倒出 一些 给第三个 杯子呢 然后 就有了
第一个杯子 1-x -Y1 第二个杯子 里面 x -Y2 第三个杯子 Y1+ Y2
qian19876025
2016-11-15 08:57:21 +08:00
@tyrealgray 这方法额 学习了 不过好像杯子的容积 不好控制 但是比较容易操作 谢谢学习了
Quaintjade
2016-11-15 09:51:10 +08:00
@qian19876025
这样做的话,凭直觉判断,第一第二个杯子的期望是 0.25 升,第三个杯子的期望是 0.5 升
SuujonH
2016-11-15 09:56:25 +08:00
你这期望居然是给定的...

r1 = SUM/3 + random
r2 = SUM/3 + random
r3 = SUM - r1 - r2

把 random 定小一点?
xcatliu
2016-11-15 09:57:46 +08:00
如果随机的含义是,期望应该为 1/3 ,那么仍然有无数种分配方式。
akstrom
2016-11-15 10:11:33 +08:00
不是应该吗?如果要求都不为 0,就如下(所谓随机,只能是 1 跟 2 是随机,3 是被逼的...............)
1.x=rand(1,8);
2.10-x=y;rand(1,y-1);
3.10-x-y
angusdwhite
2016-11-15 11:09:45 +08:00
@SuujonH random 期望是 0 就可以了
RqPS6rhmP3Nyn3Tm
2016-11-15 11:09:47 +08:00
给一个尺度,强行普朗克常数好了,然后 combination 一下就能算出概率
qian19876025
2016-11-15 12:26:53 +08:00
@Quaintjade 额 我感觉这保证了 随机性

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

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

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

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

© 2021 V2EX