Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何使用动态规划找到最大概率?_Algorithm_Probability - Fatal编程技术网

Algorithm 如何使用动态规划找到最大概率?

Algorithm 如何使用动态规划找到最大概率?,algorithm,probability,Algorithm,Probability,为了更好地理解此问题,您可以查看:- (一) 约翰正在和一个魔术师玩一个游戏。在这个游戏中,他面前最初有N个完全相同的盒子,其中一个盒子里有一颗神奇的药丸——吃了这颗药丸后,他就长生不老了 他必须确定哪个盒子里装着药丸。他最多可以表演“M”步。在每个动作中,他可以执行以下操作之一: (一) 随机选择他面前的一个盒子,猜这个盒子里装的是药丸。如果猜对了,游戏结束,他得到了药丸。否则,在这个猜测之后,魔术师在他面前添加了K个空盒子,这样约翰就无法确定添加了哪些盒子;他猜到的盒子也留在他面前,在随后的

为了更好地理解此问题,您可以查看:-

(一)

约翰正在和一个魔术师玩一个游戏。在这个游戏中,他面前最初有N个完全相同的盒子,其中一个盒子里有一颗神奇的药丸——吃了这颗药丸后,他就长生不老了

他必须确定哪个盒子里装着药丸。他最多可以表演“M”步。在每个动作中,他可以执行以下操作之一:

(一)

随机选择他面前的一个盒子,猜这个盒子里装的是药丸。如果猜对了,游戏结束,他得到了药丸。否则,在这个猜测之后,魔术师在他面前添加了K个空盒子,这样约翰就无法确定添加了哪些盒子;他猜到的盒子也留在他面前,在随后的动作中,他也无法区分这个盒子和其他盒子

2) 选择一个数字X,使X是K的正倍数,但严格小于John前面的当前框数。然后魔术师移除X个空盒子。当然,如果当前的框数为,John不得执行此移动≤K

如果约翰打得很好,他服用避孕药的最大可能性是多少?”N总是小于K

示例:-设M=3,因此允许3次移动。K=20,N=3

在他的第一步中,约翰选择了一个概率为x=1/3的盒子,(20个盒子被添加(20+3==23),然后在第二步中,他再次选择了一个盒子,这次概率为y=1/23*(2/3)。这里,2/3表示第一步失败的概率

在第三步中,他用概率做同样的事情,z=1/43*(22/23)*(2/3)

所以总概率是=x+y+z=l1

比方说,在上面的例子中,在第二步中,他选择移除20个盒子而不做任何其他事情,那么新的最终概率是=1/3+0(第二步中没有做任何事情!)+2/3*(1/3)=l2。现在,由于l2>l1,所以“l2”是我们问题的答案

基本上,我们必须确定哪一系列的动作会产生最大的概率

p(获胜)=p(游戏以第一步结束)+p(游戏以第二步结束)+p(游戏以第三步结束)=(1/3)+0+(2/3)*(1/3)=5/9

给定N,K,M,我们怎样才能求出最大概率? 我们必须应用动态规划吗?

假设p(N,K,M)是John的概率,如果他发挥最佳。我们有以下递归关系:

  • p(N,K,0)=0
    • 如果没有剩余的动作,他就输了
  • 如果M>0且N
  • 如果至少还有一个剩余动作,并且选项2不允许,那么他获胜的概率是他在这一轮猜对的概率,加上他在这一轮猜错但在下一轮获胜的概率
  • 如果M>0且N≥ 十、 那么p(N,K,M)是这两者中的较大者:
    • 1/N+(N−1) /N·p(N+K,K,M)−1)
      • 如果他选择了选项1,那么这与他被迫选择选项1的情况相同
    • p(N%K,K,M)−1) ,其中“%”是“余数”或“模数”运算符
      • 如果他选择了选项2,那么他肯定不会在这一步中获胜,因此他的获胜概率等于他在下一轮中获胜的概率
      • 注意,我们只需要考虑N%K,因为他当然应该选择他允许的最大X值。
  • 动态编程,或递归加记忆,非常适合于此;您可以直接应用上述递归关系

    请注意,K永远不会改变,因此不需要数组维度;而N只通过添加或减去K的整数倍来改变,因此最好使用数组索引N,使N=(N0%K)+nK


    此外,请注意,M在每一轮中正好减少1,因此如果您使用动态规划方法,并且您只需要最终概率,那么您不需要保留M的所有值的概率;相反,在为给定的M值构建数组时,您只需要保留M的数组−1.

    我对动态规划非常陌生,你能告诉我如何编写这方面的代码吗?+感谢你为编写这些答案付出的所有努力,这是一个巨大的挑战。有和O(logM)吗可能的解决方案?就像非常快速的解决方案。你说,两者中的较大者,但我如何知道哪一个更大?有没有可能的非dp解决方案?我如何知道“X”的值?