【问题标题】:Time complexity of probabilistic algorithm概率算法的时间复杂度
【发布时间】:2015-04-15 12:35:51
【问题描述】:

游戏很简单:一个程序必须“猜测”一些给定的 n,使得 1

示例伪代码:

n = a // we assign some positive integer value to n

N = b // we assign some positive integer value to N

check loop
{
   if rng(N) = n
      print some success message
      exit program
   else 
      back to the beginning of the check loop
}

好的,我对如何确定该算法的时间复杂度(尤其是上限)感兴趣?我有点困惑。概率方面如何影响这一点?如果我理解正确,最坏的情况(理论上)是程序永远运行?

【问题讨论】:

  • 如果我理解正确,代码只是每次随机猜测(可能重复猜测)?
  • 如果计算机可以重复,那么它肯定可以永远运行(尽管这是一个小概率事件)。

标签: time-complexity probability


【解决方案1】:

即使理论上您的程序可以永远运行,这里的复杂性也是 O(n) - 因为将 n 加倍,您在每一步中猜测特定值的概率减半,从而使步数加倍。即使程序可以在给定 n 的情况下永远运行,如果 n 大 2 倍,它将永远运行 两次

O 表示法的复杂性并不能告诉您将执行多少操作。它告诉您操作数量取决于输入大小

【讨论】:

  • 你有这方面的参考吗?我的理解是,概率算法仍然需要保证在 O(N) 步骤中完成,才能被视为 O(N)。换句话说,对于这个例子,它不需要重复猜测。
  • @mbeckish 你是对的。我假设如果对输入 n 执行至少任何给定次数的迭代的概率是 p,对于输入 2n 它是 2p 。它并不严格适用于 O 表示法定义,因为常数 c 在这里可以是无限的。如果您编辑此答案或发布您自己的答案将非常有帮助,并简要解释为什么 O 符号不能应用于任何随机算法。
  • @vdangre 如果不允许重复猜测,那肯定是 O(n)。平均情况将执行 n/2 次迭代 => O(n),最差的 n 次迭代 => O(n)。
猜你喜欢
  • 2016-09-04
  • 2019-04-27
  • 2015-02-14
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多