.·.·. 发表于 2019-5-23 00:36:47

看到了一道神奇的问题

https://www.zhihu.com/question/25339267
沿着同一方向每隔1s射出一颗子弹,子弹的速度服从0到1之间的均匀随机分布。当任意两颗子弹相遇后,这两颗子弹便消失。问射击2n发子弹后,最终所有子弹消失的概率。结果为(1*3*5*7*...*2n-1)/(2*4*6*8*...*2n)。求证明过程

这个话题下给了一堆不知所云但work的方案……我仔细看了看,如果work,那么,这道题其实跟分布没关系,只要子弹速度是正数,服从什么连续分布都没关系——甚至说,服从某几个速度的置换也是可以的:
于是我写了一个n=4时候的验证程序(python 3)
from itertools import permutations as perm
OK=0
def test(speed,time):
if max(speed)==speed:return False # speed(第一颗子弹)速度最快
if len(speed)<=2 : return True       # 如果只剩两颗子弹且第一颗子弹速度不是最快的。
t=                     # 做标记,这样如果t.index(min(t))==0,我们就知道,这种情况不可行。
for i in range(1,len(speed)):      # 计算相邻两颗子弹相遇时间,time=0为第一发子弹出发时间。
    t.append( (time-time)*speed/(speed-speed)+time if speed>speed else float("inf"))
ind=t.index(min(t))                  # 下面用del speed切掉speed的第ind-1与第ind个元素
if ind==0: return False            # 如果t.index(min(t))==0,我们就知道,这种情况不可行。
del speed[(ind-1):(ind+1)]
del time[(ind-1):(ind+1)]
return test(speed,time)

for i in perm():
OK+=test(,)

OK/24
发现似乎没问题,虽然如果加debug会在更改perm里面的参数(也就是几颗子弹的速度)的时候,汇报OK的结果会有所不同(有些permutation并不会一直返回True或False,而是会根据输入数据发生改变,哪怕我是按顺序输入数据的。)
比较好奇,究竟是什么保证了像(1*3*5*7*...*2n-1)/(2*4*6*8*...*2n)这样神奇的结果

BeerRabbit 发表于 2020-5-26 14:51:02

“比较好奇,究竟是什么保证了像(1*3*5*7*...*2n-1)/(2*4*6*8*...*2n)这样神奇的结果”

这个问题的根源是子弹速度同分布,也就是说:
页: [1]
查看完整版本: 看到了一道神奇的问题