Time complexity 概率算法的时间复杂度

Time complexity 概率算法的时间复杂度,time-complexity,probability,Time Complexity,Probability,游戏很简单:一个程序必须“猜测”给定的n,使1O(n)。

游戏很简单:一个程序必须“猜测”给定的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
}

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

即使理论上你的程序可以永远运行,这里的复杂性是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)。