今天听说一个玄学算法,写了一下,确实玄学?

2022-10-03 00:55:35 +08:00
 estk

假设有 3 个门编号分别为 0 ,1 ,2 ,其中只有 1 个门后面有奖品 主持人先打开一个不存在奖品的门,剩下两个门你随机打开一个,中奖概率是多少? 答案不是 50% 算法写的也确实不是,是写得不对吗?

(async ()=>{
  let gotTimes = 0
  let missTimes = 0
  let failTimes = 0
  let testTimes = 100000
  while( --testTimes > 0) {
    const targetGateNo = parseInt(Math.random()*10**10)%3 // 0/1/2
    let gates = []
    for (let i=0; i<2; i++) {
      gates.push(i===targetGateNo)
    }
    const randomNo = parseInt(Math.random()*10**10)%3 // 0/1/2
    if (gates[randomNo]) {
      failTimes++
      continue
    }
    let randomNo2 = parseInt(Math.random()*10**10)%3
    while(randomNo2===randomNo) {
      randomNo2 = parseInt(Math.random()*10**10)%3
    }
    if (gates[randomNo2]) {
      gotTimes ++
      continue
    }
    missTimes ++
  }
  console.log(gotTimes/(gotTimes+missTimes), gotTimes, missTimes)
})()

剩下两个选一个,下意识觉得概率应该 50%才对,但是执行后是 0.28 左右

7339 次点击
所在节点    程序员
46 条回复
gstqc
2022-10-03 00:59:57 +08:00
因为你代码写错了
前面打开一个不存在奖品的们,和后面再打开一个,两者是独立事件
edis0n0
2022-10-03 01:01:39 +08:00
先打开一个不存在奖品的门,剩下两个门你随机打开一个
剩下两个门你随机打开一个
两个门你随机打开一个
两个门 随机
两个门
parseInt(Math.random()*10**10)%3 // 0/1/2
Math.random()*10**10)%3
%3
???
houshuu
2022-10-03 01:03:59 +08:00
三门问题应该是这个吧
https://zhuanlan.zhihu.com/p/37669145
xyfan
2022-10-03 01:04:48 +08:00
你这问题可能是听(记)错了。我听到的版本是,你先选择一扇门,之后主持人打开一扇没有奖品的门,如果你不换选择,中奖概率是 1/3 ,如果你换选择,中奖概率是 2/3 。
arch9999
2022-10-03 01:10:38 +08:00
你设置的前提,只能是 50%
estk
2022-10-03 01:14:46 +08:00
@xyfan #4
直觉上不应该是 0.5 吗?
2/3 数学上可证明?
estk
2022-10-03 01:15:28 +08:00
@xyfan #4
明白了
跟我讲述的人讲玄了
Tink
2022-10-03 01:27:29 +08:00
本来就不是 50‘
akira
2022-10-03 01:34:08 +08:00
3 门问题啊,你描述的有遗漏。
而且这就是个概率问题
crab
2022-10-03 02:38:18 +08:00
<amp-youtube data-videoid="eYmSDnVFxT4" layout="responsive" width="480" height="270"></amp-youtube>
leafin
2022-10-03 03:14:34 +08:00
其实不难理解,3 扇门分别是 abc ,1 真 2 假,先随机选定一扇门,假设是 a ,那么 a 是真门的概率是 33%没错吧,这时候主持人打开一定是假门的门 c ,剩下 ab ,1 真 1 假,然后再打开 b ,最后打开 a 。那么 a 是真门的概率是多少呢,当然是 33%,打开顺序不会影响概率,因为一开始就选定 a 了。那让我们回到剩下 ab 的时候,c 是真门的概率是 0%(主持人保证 c 一定是假门),而 a 是 33%,那么 b 一定是 67%。
Chad0000
2022-10-03 04:32:04 +08:00
@estk
这个确实不容易打破直觉。

简单描述就是 abc 选其中一个,如果你选的是 a ,那么如果你选择换其实相当于你同时选了 bc (主持人帮你过滤掉无效的)。a 命中和 bc 命中是 1/3 和 2/3 的关系。
Chad0000
2022-10-03 04:38:53 +08:00
@Chad0000
再精简一下:
abc 你选 a ,命中率 1/3 ;
你换的话,bc 只要有一个中你就中,概率 1/3+1/3 ;
goophy
2022-10-03 08:04:36 +08:00
如果是 100 扇门,选一个,再排除 98 扇,这时候换不换,选中的概率不同,就容易理解了
dlsflh
2022-10-03 08:48:39 +08:00
3 门问题换成一百门问题容易理解。
yehoshua
2022-10-03 08:51:29 +08:00
这不是概率论问题吗?条件概率和独立事件。基础的概率论问题。
yehoshua
2022-10-03 09:01:56 +08:00
个人认为这是个典型的概率论问题。
这个问题 OP 的设定(不管经典三门问题怎么设定,而是 OP 的设定)答案是 50%。

经典的三门问题比这个复杂一些。不过我认为也是 50%。
yehoshua
2022-10-03 09:09:03 +08:00
@yehoshua 经典三门问题我并不了解,刚去检索了,三门问题的原始阐述,有个特殊的限制。这个限制存在让三门不是简单的 50%。67%才是对的。
heavymetals
2022-10-03 10:48:03 +08:00
我也用 python 写过这种算法,答案不对肯定就是理解错了,因为在写的过程应该就已经知道答案了....

https://gist.githubusercontent.com/Cristina269/c89739f2c7885f306ec7fa6b28c10a4e/raw/f353e22c700653353529711dbc23c536163cb9b3/%25E4%25B8%2589%25E7%2590%2583%25E9%2597%25AE%25E9%25A2%2598_python
heavymetals
2022-10-03 10:52:27 +08:00
@heavymetals 链接格式好像贴的不太对...v2ex 不能连续发链接,就这样吧

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

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

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

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

© 2021 V2EX