【问题标题】:Probabilistic algorithm概率算法
【发布时间】:2022-01-11 03:12:52
【问题描述】:

我们得到一个包含 n 个零floor(n/2) 个零ceiling(n/2) 个 的二进制数组>.

我们要判断数组是否包含一。

问。建议一个时间复杂度为 O(1) 并以至少 3/4 的概率给出正确答案的随机算法。该算法可以给出错误的答案,但不会超过 1/4 的可能输入。

我想知道如何解决这个问题。

【问题讨论】:

  • 输入数组中包含 1 的比例是多少?一半的数组都是零吗?三分之一? 90%?

标签: algorithm probability


【解决方案1】:

检查数组中的随机项:

  1. 如果item == 0 返回第一种可能性(n 个零
  2. 如果 item == 1 返回第二种可能性(n/2 个零和 n/2 个1

让我们看看发生了什么:给出错误答案的唯一可能性是当我们有第二种可能性时, 但我们得到item == 0 并且答案是第一种可能性。条件(第二种可能性)概率为

p = 1/2

如果我们检查两个随机项目

p = 1/4 (two items are zeroes)

如果我们检查三个随机项目

p = 1/8 (three items are zeroes)

现在,让我们计算错误答案的贝叶斯概率,让

P0 - probability of the 1st (all zeroes) outcome
P1 - probability of the 2nd (half zeroes, half ones) outcome

Perror = P1 * p / (P0 + P1) <= 1/4

或者

P1 * p / (P0 + P1) <= 1/4

p <= (P0 + P1) / 4 / P1

p <= P0 / (4 * P1) + 1/4

最坏的情况P0 = 0 (P1 = 1) 我们得到p 的条件:

p <= 1/4

到目前为止一切顺利,我们应该检查两个随机数组的项目,然后

  • 如果两个项都是0,我们回答“全零大小写”
  • 如果 any 项目是 1,我们会回答“半零,半一”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多