Time complexity 固定环的Big-O

Time complexity 固定环的Big-O,time-complexity,big-o,Time Complexity,Big O,在一次采访中,我讨论了一些代码,但我认为我没有很好地表达我的代码块 我知道(高级)我们学习了两个for循环==O(n^2),但是当你在工作中做出一些断言,将所做的工作限制在一个恒定的数量时,会发生什么呢 我想出的代码是这样的 String[] someVal = new String[]{'a','b','c','d'} ;// this was really - some other computation if(someVal != 4) { return false; } for(i

在一次采访中,我讨论了一些代码,但我认为我没有很好地表达我的代码块

我知道(高级)我们学习了两个for循环==O(n^2),但是当你在工作中做出一些断言,将所做的工作限制在一个恒定的数量时,会发生什么呢

我想出的代码是这样的

String[] someVal = new String[]{'a','b','c','d'} ;// this was really - some other computation
if(someVal != 4) {
  return false;
}

for(int i=0; i < someVal; i++){
  String subString = someVal[i];
  if(subString.length() != 8){
    return false;
  }
  for(int j = 0; j < subString.length(); j++){
    // do some other stuff
  }
}
String[]someVal=新字符串[]{'a'、'b'、'c'、'd'};//这真的是另一种计算
如果(someVal!=4){
返回false;
}
for(int i=0;i
因此有两个for循环,但由于继续之前的长度检查,迭代次数变得固定

for(int i=0; i < **4**; i++){
  String subString = someVal[i];
  if(subString.length() != 8){ return false }

  for(int j = 0; j < **8**; j++){
    // do some other stuff
  }
}
for(int i=0;i<**4**;i++){
String subString=someVal[i];
如果(subString.length()!=8){返回false}
对于(int j=0;j<**8**;j++){
//做些别的事情
}
}
我试图证明这一点,使它保持不变,但没有做得很好。
我是完全错了还是偏离了基准?

for循环中的早期退出条件是
if(subString.length()!=8)
,因此,如果长度正好为8,则可以随时执行第二个for循环。这实际上使第二个for循环的复杂性保持不变,因为它不取决于输入大小。但是在第一个for循环之前,您有另一个提前退出条件
if(someVal!=4)
使第一个for循环也保持不变

是的,我会遵循你的论点,完整函数具有恒定的大O时间复杂度。也许在解释中重复一下,big-O总是描述一个上界复杂度,它永远不会被交叉,常数时间因子可以减少到1

但请记住,基于真实世界输入的恒定复杂性在执行时间上可能仍然比基于
n
大小的
O(n)
复杂性更长。如果已知的先决条件是
n
不会增长超过(低)给定的数字,我不会争论Big-O复杂性,而是争论总体预期运行时间,其中循环的第二个常量可能比Big-O复杂性分析所预期的影响更大。

确定这是
O(1)
。但是两个嵌套的for循环通常都是
O(n^2)
,这肯定不是真的——它可以是任何东西,这实际上取决于循环条件和循环内部的内容。