Big o 很难找到此循环的大O时间

Big o 很难找到此循环的大O时间,big-o,Big O,我试图为以下代码段找到大O运行时间: for( i = 0; i < n * n; i++ ) for( j = 0; j < i; j++ ) k++; (i=0;ii){ 某物 } } 以O(n^2)运行[最里面的循环随着n值的增加运行1,2,3…n倍,因此它总共运行1+2+3…+n=O(n^2)] 在示例代码中,让i:=1->p,其中p=O(n^2) 那么由于代码在O(p^2)中运行,它的运行时间将是O(n^4) 使用Big-O符号可以帮助您克服某些情

我试图为以下代码段找到大O运行时间:

for( i = 0; i < n * n; i++ )
    for( j = 0; j < i; j++ )
        k++;
(i=0;i 对于(j=0;j
因为n的乘法,我不确定它是O(n^3),还是仅仅是O(n^2)。请提供一些帮助:)

内部循环将精确执行0+1+…+n^2-2+n^2-1=(n^2)(n^2-1)/2次(参见),因此它实际上是O(n^4)。

表示(i:=1->n){
对于(j:=1->i){
某物
}
}

以O(n^2)运行[最里面的循环随着n值的增加运行1,2,3…n倍,因此它总共运行1+2+3…+n=O(n^2)]

在示例代码中,让i:=1->p,其中p=O(n^2) 那么由于代码在O(p^2)中运行,它的运行时间将是O(n^4)

使用Big-O符号可以帮助您克服某些情况。考虑一下: 对于(i=n/2;i 对于(j=2;j 某物
}
}

外循环运行O(n),内循环运行O(log(n))[将其视为n不断除以2:log的定义]

因此,总运行时间是:O(n(logn))

一种精确而正式的方法,用于确定算法的迭代次数:


啊,好的,我明白了。感谢您的回答:)检查
是否有(i=n/2;i
迭代
O(n)
次,而不是
O(n^2)
,可能会有所帮助。我也不明白这个例子和这个问题有什么关系。至于您的第一个代码片段是
O(n^2)
:这是真的,但我认为您需要解释为什么它是
O(n^2)
,才能让答案真正有用。@sepp2k:修复错误。thnx用于指出。我只是在计算一些复杂的嵌套循环时推广使用Big-O表示法……我认为这会有所帮助