Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何获得无限循环算法的预期执行时间和最坏情况?_Algorithm_Time Complexity_Big O_Infinite Loop_Execution Time - Fatal编程技术网

Algorithm 如何获得无限循环算法的预期执行时间和最坏情况?

Algorithm 如何获得无限循环算法的预期执行时间和最坏情况?,algorithm,time-complexity,big-o,infinite-loop,execution-time,Algorithm,Time Complexity,Big O,Infinite Loop,Execution Time,我对算法的预期执行时间和最坏情况下的执行时间有一个疑问,我认为这是一个简单的算法,但它包含一个无限循环,我不知道如何解释预期执行时间?。我总是可以用停止条件来确定到达算法的时间 这是我的例子(我只知道,超过n/2可以给出正确的答案): 这似乎取决于最终决定是否属实的可能性。 所以在这种情况下,决策需要n个步骤。 这意味着运行时是O(n), 现在我们假设决策为真的概率为50%,这意味着在平均值上,每个循环需要2n步(求和(prob^x*n),x=0..无穷大,prob=0.5)。 即使O随决策概率

我对算法的预期执行时间和最坏情况下的执行时间有一个疑问,我认为这是一个简单的算法,但它包含一个无限循环,我不知道如何解释预期执行时间?。我总是可以用停止条件来确定到达算法的时间

这是我的例子(我只知道,超过n/2可以给出正确的答案):


这似乎取决于最终决定是否属实的可能性。 所以在这种情况下,决策需要n个步骤。 这意味着运行时是O(n), 现在我们假设决策为真的概率为50%,这意味着在平均值上,每个循环需要2n步(求和(prob^x*n),x=0..无穷大,prob=0.5)。
即使O随决策概率增加,乘法仍然与“决策”为真的变化成线性关系,因此仍然为O(n)。

预期执行时间为O(n)

概率
p>=1/2
,第一个
i
将给出
decision(i)==true
,因此循环将在调用
decision
一次后终止

让q=1-p
为未发生的概率。
然后,使用概率
q*p
,第二个
i
将给出
decision(i)=true
,因此循环将在两次调用
decision
后终止

类似地,使用概率
q^2*p
,第三个
i
将给出
decision(i)=true
,因此循环将在调用
decision
三次后终止,依此类推

通过求和,我们将调用
decision
的预期次数计算为
1+q+q^2+q^3+…

我不清楚你在问什么。你想做出什么样的解释?让我感到困惑的一个原因是,你把这个贴上了“big-o”的标签,但在帖子中没有提到复杂性。更确切地说,帖子处理的是执行时间,这是一个非常实用的概念,而不是渐进缩放限制。决策是概率的吗?它返回真值的可能性有多大?是否有某些值是正确的?在当前表单中,您不能对预期的运行时说任何话。@Prune,您好,您好,请在文本中添加更多内容。我知道最坏的情况是指大(O)符号,但我对执行时间和渐近符号感到困惑,它们之间有什么关系?@Skam,是的,你是对的,但我不确定概率。我只知道,超过n/2可以给出正确的结果。随机是否意味着你是均匀随机抽样的?很容易精确求解:迭代次数E满足E=1+(1-p)E,因此E=1/p。@PaulHankin是的,这将是一个很好的答案!但我没有想到,因为我对这个问题的阅读不知何故建议我应该坚持基本原则。你从哪里得到的想法是,
决策
的概率为1/2?OP没有说明
决策
将返回true的条件。@JimMischel在评论中解释了“我只知道,超过n/2可以给出true”这句话。如果你有更好的词组(我敢打赌),请考虑把它编辑成问题。这不是我解释那个句子的方式。
while (true)
{
  int i = random(0,n-1);
  bool e = decision(i); //Θ(n)
  if (e==true)
     return i;
}