具有条件的嵌套循环的时间复杂度

时间:2018-04-29 13:29:56

标签: time-complexity big-o

我需要帮助的问题是:

i

我理解j public boolean isPalindrome(String input) { char[] inputChars = input.toCharArray(); int inputLength = inputChars.length; int inputMid = inputLength / 2; for (int i = 0; i <= inputMid; i++) { if (inputChars[i] != inputChars[inputLength - i - 1]) { return false; } } return true; } 循环是如何O(n ^ 4)。但是,从if语句开始,我不知道剩余代码片段的大O是什么。如果我在课堂上正确地复制了答案,则O(n ^ 4)是整个代码片段的运行时间。因此,从if开始的运行时间似乎可以忽略不计。那么,我仍然想了解它是什么以及为什么我把答案变为O(n ^ 5)。

2 个答案:

答案 0 :(得分:0)

代码的整体复杂性实际上是O(n^4),而不是O(n^5)。条件i == j将针对ij中两个外部循环范围内的每个值发生一次。由于每个循环中都有n^2个可能的值,i == j将发生n^2次。每次发生这种情况时,k中会有第三个循环,它会迭代n次。因此,每次i == j发生时,都会有O(n)惩罚。总的来说,这表现为O(n^3)事件,它使两个外环的O(n^4)性能相形见绌。

因此,尽管有O(n^4)条件,但您的代码段的行为仍为i == j

答案 1 :(得分:0)

O(n ^ 4)是正确的答案。前两个循环具有O(n ^ 4)时间复杂度。部分代码从&#39; if&#39;开始陈述,复杂性是O(n ^ 3),因为&#39; i&#39;和&#39; j&#39;恰好等于n * n次,并且存在另一个for循环,其将时间复杂度增加到O(n ^ 3)。 因此,O(n ^ 4)+ O(n ^ 3)= O(n ^ 4)