【问题标题】:Randomized Algorithm随机算法
【发布时间】:2014-07-15 06:08:39
【问题描述】:

我遇到了一个随机问题。 :)

A,一种随机算法,判断输入 x 是否为素数。

该算法的工作方式如下:

1- 如果 x 是素数,则 A 输出 YES

2- 如果 x 不是素数,则 A 以 3/4 的概率输出 NO。

如果我们想让算法 A 以至少 1- (1/k) 的概率输出 NO,我们至少应该运行 A 多少次?

注意:一个“否”的答案意味着给定的输入 x 不是素数。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    所以,如果你想达到1-(1/k),你实际上是在寻找概率最高为1/kFalse Positive,而从上面我们想要:

    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 &gt;= 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,因此最小的n 使得n &gt;= log_2(100)/2n==4
    意思是,你需要重复算法4次才能达到99%。

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

    1. 先检查概率确实大于99%:1-(1/4)^4 = 1-(1/256) ~= 0.996 &gt;= 0.99,所以概率没问题。
    2. 检查对于较小的整数 (n==3),我们得到的正确答案会低于 99%:1-(1/4)^3 = 1-1/64 ~= 0.984 &lt; 0.99 - 所以我们会因n==3 而失败。

    【讨论】:

    • log k 还是 (log k) / 2 次?如果提供一个例子,我认为你的答案会更好。谢谢。
    • @user3670084 n &gt;=[log(k)]/2,添加了一个例子。
    • 所以我们可以说它是 O(lg k) 的顺序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多