V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qinjiannet
V2EX  ›  程序员

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

  •  
  •   qinjiannet · 2016-11-14 21:48:54 +08:00 · 7919 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前一直认为将 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
    第 1 条附言  ·  2016-11-14 22:33:59 +08:00
    如果将题面换成:

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

    “任取两点”的定义是否明确?
    第 2 条附言  ·  2016-11-14 23:53:36 +08:00
    第一种分配方法 3 份水的期望是: 1/2 , 1/4 , 1/4

    第二种分配方法 3 份水的期望是: 1/3 , 1/3 , 1/3
    第 3 条附言  ·  2016-11-15 14:31:33 +08:00
    受小伙伴回答的启发,新增了这个贴子: https://www.v2ex.com/t/320661
    57 条回复    2016-11-16 00:00:08 +08:00
    banixc
        1
    banixc  
       2016-11-14 22:04:43 +08:00   ❤️ 1
    所以什么叫做“随机分成 3 份”。
    这里“随机”的定义是什么?
    DiamondbacK
        2
    DiamondbacK  
       2016-11-14 22:05:59 +08:00   ❤️ 5
    正确的做法是:
    先给出「随机分成 3 份」的操作性定义,再执行这个操作。

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

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

    SUM = A + B + C

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

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

    如果将题面换成:

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

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

    没人告诉你期望是 1/3 如果要 1/3 的随机数题面要给明的
    lecher
        15
    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
        16
    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
        17
    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
        18
    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
        19
    Quaintjade  
       2016-11-14 23:24:34 +08:00
    @qinjiannet
    “在线段上随机取一点”一般不会有歧义,通常默认为连续均匀分布的概率。
    “在线段上任取两点”通常默认为取两点是相互独立的。

    但请注意以上只是习惯上默认,严格来说你应该用数学语言限定“随机”这个概念,否则就像 2 楼提到的「贝特朗悖论」那样,“在圆上随机取弦”就会导致歧义。
    Quaintjade
        20
    Quaintjade  
       2016-11-14 23:31:37 +08:00   ❤️ 1
    @banixc 去问折棒太郎
    qinjiannet
        21
    qinjiannet  
    OP
       2016-11-14 23:55:32 +08:00
    @murmur 第二种分配方法的期望的确是 1/3 , 1/3 , 1/3
    ProkillerJ
        22
    ProkillerJ  
       2016-11-15 00:07:39 +08:00 via iPhone
    蒙提霍尔悖论?
    Quaintjade
        23
    Quaintjade  
       2016-11-15 00:09:10 +08:00
    DiamondbacK
        24
    DiamondbacK  
       2016-11-15 00:18:57 +08:00   ❤️ 1
    @qinjiannet
    「任意」和「随机」的含义是不同的。
    在概率论中,「随机取样」和「随机样本」惯例上蕴含「等概率」条件,但「任意」这个词没有任何关于随机变量的分布函数的信息。

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

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

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

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

    把 random 定小一点?
    xcatliu
        36
    xcatliu  
       2016-11-15 09:57:46 +08:00 via iPhone
    如果随机的含义是,期望应该为 1/3 ,那么仍然有无数种分配方式。
    akstrom
        37
    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
        38
    angusdwhite  
       2016-11-15 11:09:45 +08:00
    @SuujonH random 期望是 0 就可以了
    RqPS6rhmP3Nyn3Tm
        39
    RqPS6rhmP3Nyn3Tm  
       2016-11-15 11:09:47 +08:00 via iPad
    给一个尺度,强行普朗克常数好了,然后 combination 一下就能算出概率
    qian19876025
        40
    qian19876025  
       2016-11-15 12:26:53 +08:00
    @Quaintjade 额 我感觉这保证了 随机性
    angusdwhite
        41
    angusdwhite  
       2016-11-15 12:56:55 +08:00
    X >= 0; Y >= 0; X + Y <= 1;

    给出此区域上的一个分布,不就完了吗。这样的分布很多的,所以三杯水的期望不确定。
    joying
        42
    joying  
       2016-11-15 13:36:47 +08:00
    生成一个[0,1]的随机数 X ,再生成一个[0,1]的随机数 Y',这样三份水就是: X , Y=Y'*(1-X), Z=1-X-Y
    joying
        43
    joying  
       2016-11-15 13:40:07 +08:00
    @joying 不对,这样似乎也是 1/2 , 1/4 , 1/4 。还是三楼的解法比较好,楼主的解法有需要重复的可能,感觉有点蛋疼。
    waytoexplorer
        44
    waytoexplorer  
       2016-11-15 13:54:33 +08:00 via iPhone
    零到一取两个随机数, a < b ,三份水就是, a , b-a , 1-a-b 。这样似乎就没问题了吧?
    cxl008
        45
    cxl008  
       2016-11-15 14:19:43 +08:00
    抽签问题呢? 按顺序抽 每个人概率不是一样么。。。。
    angusdwhite
        46
    angusdwhite  
       2016-11-15 14:38:58 +08:00
    @cxl008 不一样,这是连续模型,概率空间都不一样
    menc
        47
    menc  
       2016-11-15 15:46:53 +08:00
    @murmur 随机的定义是要等可能的,要服从均匀分布,不要钦定一个大自然常见的分布
    murmur
        48
    murmur  
       2016-11-15 15:53:47 +08:00
    @menc 不要钦定均匀分布哈 random 这个词从来就没有均匀的定义
    abcsuperman
        49
    abcsuperman  
       2016-11-15 15:57:43 +08:00 via Android
    随机的定义是要等可能的。。。高斯分布都偏到姥姥家了…不过话说回来,要是大自然绝大部分服从均匀分布…太惨烈了…被淘汰掉的哗哗的…
    murmur
        50
    murmur  
       2016-11-15 16:07:58 +08:00
    @abcsuperman 如果随机的定义是等可能,就不会有随机过程这本书了
    不要拿一般去拼理论好么。。概率这是个严谨的东西,论坛上最容易撕的就是概率和物理,而且物理比这简单的多,一个浮力就能撕出几百楼来
    概率你还得上条件概率
    CloudnuY
        51
    CloudnuY  
       2016-11-15 17:00:09 +08:00
    问题等于:怎样将一份红包随机分为(发放个数)份?……
    Quaintjade
        52
    Quaintjade  
       2016-11-15 17:01:48 +08:00
    @murmur
    居然有人认为 1 升水能浮起 2 公斤木头,容我做个 doge 的表情
    ZRS
        53
    ZRS  
       2016-11-15 20:08:09 +08:00
    @Quaintjade 我是🐟
    Hieast
        54
    Hieast  
       2016-11-15 20:38:06 +08:00
    @lecher 这个思路最简单
    henneko
        55
    henneko  
       2016-11-15 21:10:40 +08:00 via iPhone
    1/2*1/3+1/4*2/3=1/3
    Adven
        56
    Adven  
       2016-11-15 22:29:43 +08:00
    随机生成三个随机数 x1,x2,x3,然后取 x1/( x1+x2+x3 )、 x2/( x1+x2+x3 )、 x3/( x1+x2+x3 )不可以么?
    abcsuperman
        57
    abcsuperman  
       2016-11-16 00:00:08 +08:00 via Android
    @murmur 你说的对…我是说楼上的大哥 对随机理解有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1096 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 19:21 · PVG 03:21 · LAX 11:21 · JFK 14:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.