我被这个大的O符号问题所困扰。此代码看起来不像O(n),但是循环转动单词时间的数量,因此它基本上不超过20 所以,如果我们说Length(line.split())是常数c,我们可以说O(c.n)= O(n)?
while (this.scannerMainText.hasNextLine()){
String line = this.scannerMainText.nextLine();
for (String word : line.split("[.!,\" ]+")) {
some statements
}
}
答案 0 :(得分:2)
是
时间复杂度仅基于算法运行的次数;算法中的步骤的实际数量/成本(c
,如你所说)不被认为是Big-O表示法。
<强>加强>
我对理论的边缘情况不太熟悉,如果所有行的长度相等,则可以将内循环的运行时间减少到常数。 通常,此算法将被视为O(mn)。
答案 1 :(得分:2)
是的,循环运行的次数对持续时间的影响可以忽略不计,因此通常在Big-O表示法中没有提到。
例如,如果O(n)循环运行20次,您会认为符号为O(20n),但由于影响很小,因此没有提到Big-O符号,因此O (20n)= O(n)。 O(20n²)= O(n²)等也一样。