Javascript 确定带断点的循环的大O

Javascript 确定带断点的循环的大O,javascript,big-o,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; } 函数查找素数(数字){ var=false; 对于(变量i=0;i

给定这样一个函数来求素数:

function find_the_prime(number) {
  var found = false;
  for(var i = 0; i < number; i++) {
    if(number%i == 0) {
      found = true; 
      break;
    }
  }  
  return found;
}
函数查找素数(数字){
var=false;
对于(变量i=0;i
在没有中断的情况下,函数在最佳情况下为O(1),在最坏情况下为O(n),在一般情况下为O(n)

你能解释一下断裂是如何影响大o的吗?真的吗

这仍然是O(N),即使这是最坏的情况,O(N)是指这个算法。其生长速率仍依赖于氮

(如果您修复了以下错误)

您的代码是O(1),原因很简单,因为它总是在第二个循环中退出,因为数字%1==0

如果将代码更正为:

for(var i = 2; i < number; i++) {
for(变量i=2;i
那么它将是O(n),原因与@zmf所说的相同

在没有中断的情况下,即使对于“最佳情况”,它也会被更正确地称为
O(n)
,因为它仍然随着输入进行缩放。最小的输入不是“最佳情况”,否则所有算法都会是微不足道的最佳情况
O(1)


因此,不带断点的是
O(n)
,带断点的是
O(n)
,但这并不意味着带断点的不是明显的更好更快。big-O表示法是关于一个算法如何随着输入的大小进行缩放,而不是(一定)它有多快。有时
O(n)
算法可能比
O更快(logn)
特定输入的算法。

事实上,有趣的是,你的答案是O(1)。无论你输入什么数字(只要它大于0),它总是在1处中断。

这不是家庭作业,顺便说一句,这只是一个好奇的工程师,他想用大O做得更好。我认为这是大O最糟糕的情况。
O(n)
.number%0?除以零错误:(这个问题似乎是离题的,因为它是关于计算机科学的,并且是关于计算机的。那么它不就是O(3)吗?@Kith:No.
O(1)中的
1
指的是恒定时间,它不是循环次数的计数。如果你循环10次,不管输入的大小,你仍然是
O(1)
@Kith:No。因为n的值越大,循环的次数就越多。最好的情况是偶数,并且提前退出,最坏的情况是你必须尝试n-1的每个值。OP使用的算法不是很好,因为它会进行测试,例如
2
4
,即使它不能被
2
整除,也不能被
2整除
4
。别介意。我没有很好地阅读函数。谢谢。我只是假设函数在0到N的范围内查找小素数。)@Kith当你想到O表示法时,N的大小是不相关的。N的大小可能会有其他性能问题,但在讨论O时,请记住说的是O(N)表示执行此函数所需的处理量将线性增长。O(1)算法将基于N保持不变,O(N^2)表示每增加N,函数将花费两倍的时间!