用中断确定循环的大O.

时间:2014-06-19 18:30:33

标签: javascript big-o

给定这样的函数来查找素数:

function find_the_prime(number) {
  var found = false;
  for(var i = 0; i < number; i++) {
    if(number%i == 0) {
      found = true; 
      break;
    }
  }  
  return found;
}

没有中断,最好的情况下的函数是O(1),最坏的情况是O(n)和一般情况O(n)。

你能解释一下这个突破对大o的影响吗?它有吗?

3 个答案:

答案 0 :(得分:5)

你的代码是O(1),因为它总是会在第二个循环上退出,因为数字%1 == 0。

如果您将代码更正为:

for(var i = 2; i < number; i++) {

然后由于@zmf所说的原因,它将是O(n)。

没有中断,即使对于“最佳情况”,也会更正确地称为O(n),因为它仍然可以根据输入进行缩放。最小的输入不是“最佳情况”,否则所有算法都将是最佳情况O(1)

所以O(n)没有休息,O(n)有休息,但这并不意味着休息时间明显更好更快。 big-O表示法是关于算法如何根据输入的大小缩放,而不是(必然)它的速度。有时,对于特定输入,O(n)算法可能比O(log n)算法更快。

答案 1 :(得分:1)

这仍然是O(N),即使这是最坏的情况,O(N)就是你如何引用这个算法。它的增长率仍然取决于N.

(如果您修复了错误)

答案 2 :(得分:0)

实际上,很有趣,你的回答是O(1)。无论你输入什么号码(只要它的数量为0),它总会在1点