老坑爹游戏辅助 - 专注自动化变现

标题: 炉石概率论 学霸们答疑精灵龙世纪难题 [打印本页]

作者: 迷戀果果    时间: 2016-2-14 08:03
标题: 炉石概率论 学霸们答疑精灵龙世纪难题
炉石概率论 学霸们答疑精灵龙世纪难题

                                                                                                               
                                        在果壳网的问答板块里,玩家“宇宙第一统治者”质疑精灵龙问题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% 都会出现。

作者: Pepreerve    时间: 2016-2-14 13:11
来上茶~~~~
作者: cool88bdy    时间: 2016-2-14 15:01
不是吧
作者: 麟培清    时间: 2016-3-5 14:09
谢谢,过来支持一下
作者: 海德格    时间: 2016-3-6 01:04
谢谢,过来支持一下
作者: 火样冰冷    时间: 2016-3-6 17:09
谢谢,过来支持一下
作者: 女施主且留步    时间: 2016-3-8 12:41
谢谢,过来支持一下




欢迎光临 老坑爹游戏辅助 - 专注自动化变现 (http://lkdie.com/) Powered by Discuz! X3.2