【问题标题】:How to maximize the total probability?如何最大化总概率?
【发布时间】:2019-06-27 11:20:51
【问题描述】:

我想最大化在随机选择游戏中获胜的总概率,如下所示,

我有n张彩票,其中只有1张是幸运票,现在我有2个选项,要么抽一张,要么让主人从总票中删除一些X个不幸的票,X必须是的倍数k(可用)和 X 必须小于票的总数。

如果我抽到一个倒霉的票,主人会在一堆票中添加k张倒霉的票。

我们最多可以玩 m 个动作,每个动作都是以下之一

  1. 我们要么开票
  2. 我们要么要求 master 移除 X 个票证(X 是 k 的倍数)

我想最大化概率。

并将总概率 P/Q 输出为 P*Q^(-1),其中 Q 是 Q 的模逆。

观察和玩游戏后,我认为只有按照以下方式玩游戏时,总概率才会最大

  1. 第一步,我们开一张票,中奖概率为 1/n。

  2. 如果我们在第一步中抽到一张不幸的票,则添加 k 票,我们可以要求大师在第二步中删除 k 票。

  3. 在第三步中,我们再次抽奖,现在中奖的概率是
    ((n-1)/n)*(1/n) .

类似地,如果有 m 个动作,我们可以得出结论,获胜的总概率为 (1-((n-1)/n)^r),其中我们可以找到 r 的值

n

例如: n = 3 k = 20 m = 3

总概率为 1-(2/3)^2 = 5/9

n = 5 k = 7 m = 1

总中奖概率=1/5

最终输出:

5*(9)^(-1) % 1000000007 = 555555560

1*(5)^(-1) % 1000000007 = 400000003

如果这个游戏中有其他获胜策略,请提供证据,我也没有我的策略的证据,所以如果你能证明我的策略,我会很高兴拥有它以及伪代码会有所帮助我继续。

我们再次将我们选择的票再次放入桩中,因此在抽错后我们有n+k而不是n+k-1,并且还有n

编辑:我的策略证明

我们采取的每一步都有两种可能性

要么获得 1/n*(n-1)/n,要么获得 (n-1)/n*(1/n+k) + (n-1/n)( (n+k-1)/n+k)(1/n+2*k)

现在求解两边后,我们得到方程 1/n 左侧和右侧是 (2*n+3*k-1)/((n+2*k)*(n+k) 和我发现 RHS 总是小于或等于 RHS

所以在进一步求解后,我得到 L.H.S 为 2*(k^2) 和 R.H.S 为 n^2-n 并且给定 n

因此证明。

请为证明提供反馈。

【问题讨论】:

  • 请向我们展示您迄今为止尝试过的代码,并解释为什么它没有达到您的预期。

标签: c++ math random probability maximize


【解决方案1】:

你的策略不正确。在抽到一张倒霉的票后,你会要求主人移除 k 票,但如果你开始在完全相同的状态下玩,你就会选择一张票。这没有任何意义,因为游戏不记得你以前的动作,因此目前的情况应该总是决定最好的选择。

P(n,m,k) 是用 n 票、最多 m 个动作和 获胜的概率k,具有最优策略。

如果你选一张票,那么概率是1/n + P(n+k-1, m-1, k)*(n-1)/n

如果你不这样做,那么概率是 P(n-k, m-1, k)

最佳选择是概率最大的选择,因此:

P(n,m,k) = max( 1/n + P(n+k-1, m-1, k)*(n-1)/n , P(nk, m- 1, k))

您可以使用记忆化递归计算,因为可能存在重叠的子问题,即使用动态规划。

【讨论】:

  • 我的解决方案也是正确的,请查看我在最近编辑中的证明并感谢 DP 方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2018-10-26
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多