随机算法

时间:2014-05-26 12:51:26

标签: algorithm random statistics complexity-theory amortized-analysis

我在一个随机问题中遇到麻烦:)

例如一个随机算法A,想确定输入X是否为正数?

首次运行

  
    
      

1-如果x是素数 - >算法A回答“是”

             

2-如果x不是素数 - >算法A的概率为3/4,答案为NO。

    
  

我们应该运行多少次A(最小运行次数),如果我们想保证在第二状态(2)算法A答案NO的概率至少为1-(1 / k)?

注意:一个没有答案意味着输入X不是素数。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果数字x不是素数,则产生“是”的概率为“0”。在n重复的算法中(1/4)^n = 4^(-n) = 2^(-2n)

所以,如果你想要实现1-(1/k),你实际上是在寻找误判,概率最多为1/k,并且从上面我们想要:

2^(-2n) <= 1/k   //log_2 on both sides:
-2n <= log(1/k) = log(1)-log(k) = 0 - log(k)
2n >= log(k)
n >= log(k)/2

因此,您希望选择n这样的最小整数n >= log(k)/2,以保证 True Negative 的概率为1-1/k

(注意:所有log()都有基数2)。

示例:
如果你想在99%的时间内保持正确,那么你实际上正在寻找1-1/k=0.99,所以1/k=1/100k=100

现在,根据上面的公式,请注意log_2(100) ~= 6.64,因此最小nn >= log_2(100)/2n==4
意思是,你需要重复算法4次才能达到99%。

让我们检查一下是否正确:

  1. 首先检查概率确实大于99%:1-(1/4)^4 = 1-(1/256) ~= 0.996 >= 0.99,所以概率很好。
  2. 检查是否有一个较小的整数(n == 3),我们的正确答案会低于99%1-(1/4)^3 = 1-1/64 ~= 0.984 < 0.99 - 所以我们会因n==3而失败。