炉石概率论 学霸们答疑精灵龙世纪难题

时间:2016-02-14 11:11 作者:多玩整理 来源:果壳 手机订阅 神评论

新闻导语

如果对方场上只有一只精灵龙,那么你使用奥术飞弹打死它的概率有多大?这应该是炉石史上最经典的数学问题,被争议多年后,大家都知道了这个答案是50%。而最近,在果壳网的问答板块里,又有玩家“宇宙第一统治者”开始质疑50%这个答案的合理性,让我们来看看吧!

炉石概率论 学霸们答疑精灵龙世纪难题
炉石概率论 学霸们答疑精灵龙世纪难题

如果对方场上只有一只精灵龙,那么你使用奥术飞弹打死它的概率有多大?

这应该是炉石史上最经典的数学问题,被争议多年后,大家都知道了这个答案是50%。

而最近,在果壳网的问答板块里,又有玩家“宇宙第一统治者”开始质疑50%这个答案的合理性,让我们来看看吧!

问题原文

我觉得这题精灵龙不简单,编程得到的结果匪夷所思,接近49.93%但是不到50%。求助大神!

C++代码奉上(计算精灵龙死亡概率),编程非常渣。

#include

#include

#include

#include

int aa=30;

int bb=2;

void er();

void er()

{

int ll=rand()%2;

if(ll==0)

{

aa=aa-1;

return ;

}

if(ll==1)

{

bb=bb-1;

return ;

}

}

void sandan();

void sandan()

{

if(bb<=0)

{

aa=aa-1;

return ;

}

if(bb>0)

{

er();

return;

}

}

void main()

{

srand(time(NULL));

int ss;

int qq=0,jj=0;

while(jj<10000000)

{

fflush(stdin);

sandan();

sandan();

sandan();

if(bb==0)

{

qq=qq+1;

}

aa=30;

bb=2;

jj=jj+1;

}

printf("在10000000次试验中,精灵龙死了%d次",qq);

}

炉石概率论 学霸们答疑精灵龙世纪难题

结果图,测试结果并不是50%

回答精选

果壳网友饭小盆的回答

奥蛋每次攻击都是独立判定的,但是对于这个特定模型来说,只有一种情况下,概率会有不同。。。那就是当前两次伤害已经打死精灵龙,最后一次就只能打脸了。。。

用文字表示的话,打脸是0,精灵龙是1

A000

B001

C010

D011

E100

F101

G110

前面6种都是12.5%的概率出现,最后一种则是25%,那么统计一下出现两次1的情况,就是D、F和G,其中D和F都是12.5%的概率,G是25%,加起来一共50%

如果你采用多次迭代的方法进行统计,那么实际得到的结果跟理论计算确实会有一定的差距。。不妨试试把实验次数提高一些。。。

再附个二叉树的图,省略了根节点

炉石概率论 学霸们答疑精灵龙世纪难题

另外给你说个奇怪的事。

以前山口山5.4的PTR上进行过一个测试,武器战把精通弄成100%(精通效果是任何攻击都有几率造成一次额外伤害,伤害数值固定,精通本身不会触发精通),那么也就是说,我在一次实验中,其它伤害的攻击次数和触发的精通次数应该是一样的。。。

然而实际结果并不是这样。攻击了500多次。精通触发数量比其他攻击少了几十次。具体原因未知。

果壳网友junglerubik的回答

你们啊,一堆答案都没答到要点。

楼主其实就是进行了一次蒙特卡洛实验。

而monte carlo出来的数字是有一个置信区间的。

假设第i次随机实验得到的结果为

炉石概率论 学霸们答疑精灵龙世纪难题

(根据题意

炉石概率论 学霸们答疑精灵龙世纪难题

就是精灵龙死了没有)。

炉石概率论 学霸们答疑精灵龙世纪难题

是一个随机变量,0表示死了,1表示没死,它的分布根据其他楼的计算我们是知道的。 p(

炉石概率论 学霸们答疑精灵龙世纪难题

=0)=0.5 p(

炉石概率论 学霸们答疑精灵龙世纪难题

=1)=0.5 可以得知

炉石概率论 学霸们答疑精灵龙世纪难题

的均值是0,5,方差也是0.5。

根据大数法则,重复实验n=10000000次之后。

死亡次数百分比

炉石概率论 学霸们答疑精灵龙世纪难题

会服从正态分布,其均值为0.5,但是方差变成

炉石概率论 学霸们答疑精灵龙世纪难题

此时我们进行一个假设检验,原假设H0为y=0.5

设置信度为5%,则y有95%的可能性落在一个以0.5为中心的区间

区间的上界可以根据下式算出来

炉石概率论 学霸们答疑精灵龙世纪难题

1.96是标准正态分布0.025分位数。

下界只要把1.96换成-1.96。

最后算出来的区间是[0.49956 , 0.50044]。

所以说我们有95%的信心认为精灵龙的死亡百分比会处于以上区间。

如果把1.96换成2.58,那么我们就有99%的信心认为y会落在[0.49942,0.50058]之间。

而楼主算出来的结果是0.4993。

如果不是楼主遇到了小概率事件的话。

那么就可以有99%的信心认为原假设是错的,即y不等于0.5,

恭喜楼主,得到了1%水平上的统计显著。

当然更有可能的是,楼主程序写错了。

比如没有初始化随机seed。

果壳网友方弦与CyanoHao的回答

就是50%,除非有什么别的奇怪的分配方法。

做一次实验得到不足或者超过50%都是比较正常的,毕竟有随机性,不会正好是50%

楼主程序模拟的结果不同应该是 VC 随机库的问题。我用 GCC / Glibc 模拟的结果就更接近 50%,大于或小于 50% 都会出现。

炉石概率论 学霸们答疑精灵龙世纪难题

相关阅读:概率,学霸

全球新闻