Big o 嵌套j=i+;1回路
谁能告诉我以下代码的时间复杂度是多少Big o 嵌套j=i+;1回路,big-o,Big O,谁能告诉我以下代码的时间复杂度是多少 for (int i = 0; i < array.length - 1; i++) { for (int j = i + 1; j < array.length; j++) { // do something } } for(int i=0;i
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
// do something
}
}
for(int i=0;i
它不可能是O(n^2),因为
j=i+1
?谢谢 外循环有n-1
次迭代。在每次迭代中,内部循环迭代n-i-1
次。因此,总的来说,内部循环迭代n-1+n-2+…+1次。因此,做某事
执行的次数等于从1到n-1
的数字之和。这个总和是n*(n-1)/2
,它在θ(n^2)中,因此也在O(n^2)中。“它不可能是O(n^2),因为j=i+1”-这是一个非序列。这个链接可能提供一些更有用的信息:sepp2k,非常感谢您的解释@用户814064,谢谢你的链接,它真的很有帮助。我不明白为什么我们不把迭代的内部和与外部循环相乘<代码>n*(n*(n-1)/2)
。如果j始终从0开始得到n,我们就会这样做*n@sidoshi你不能同时做乘法和加法,无论是哪种情况。当j
从0开始时,您得到n+…+n
,等于n*n
。当j
从i+1
开始时,您得到n-1+…+1
,等于n*(n-1)/2
。在任何一种情况下,您都可以使用求和或闭合形式。你不会把封闭形式乘以n
——如果你这样做,你会得到n^3
,对于j
从0开始的情况,我现在明白了。谢谢:)