如何计算嵌套循环的时间复杂度,其中第二个极限在第一个循环的变量处具有极限



我有一个关于在视频中发现的特定嵌套循环的问题(https://www.youtube.com/watch?v=9TlHvipP5yA分钟:2:45(

这就是嵌套循环

for(i = 0 ; i < n ; i++){
for(j = 0 ; j < i ; j++){
Code; // Takes in constant time (1)
}
}

所以我以n为例5
因此,如果n=5,则:
i=0=>j根本不执行(执行0次(
id=1=>j=0(执行1次(
i=2=>j=0;1(执行2次(
i=3=>j=0;1.2(执行3次(
i=4=>j=0;1.2.3(执行4次(
i=5=>j=0;1.2.3.4(执行5次(

因此,i重复n次,如果我们看j,它重复0+1+2+3+4+5次,即0+1+2+3+4+。。。n次,所以如果我们使用高斯公式j,则重复n(n+1(/2
因此,我们必须将代码在最后一个循环中所花费的时间(1(乘以第二个循环的重复次数,然后乘以第一个循环的反复次数
这将是1*n*(n+1(/2*n,即(n^3+n^2(/2,即O(n^3(
现在问题来了。在视频中,它计算整个过程所需的时间,作为第二个循环的时间,所以它只计算n*(n+1(/2,他说这是O(n^2(,我真的不明白
如果我错了,有人能解释一下如何计算这件事的时间复杂性,以及你是如何做到的,为什么?

此代码为O(n^2)时间。

对于O(n(运行外循环。现在,当i == n时,内部循环为O(n)运行。

因此,上述代码的总体时间复杂度为O(n^2)

相关内容

最新更新