Time complexity 固定环的Big-O
在一次采访中,我讨论了一些代码,但我认为我没有很好地表达我的代码块 我知道(高级)我们学习了两个for循环==O(n^2),但是当你在工作中做出一些断言,将所做的工作限制在一个恒定的数量时,会发生什么呢 我想出的代码是这样的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
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)
,这肯定不是真的——它可以是任何东西,这实际上取决于循环条件和循环内部的内容。