algorithm - 这种嵌套 for 循环算法的时间复杂度?
问题描述
我在计算这个算法的 bigO 时遇到了一些麻烦:
public void foo(int[] arr){
int count = 0;
for(int i = 0; i < arr.length; i++){
for(int j = i; j > 0; j--){
count++;
}
}
}
我知道第一个 for 循环是 O(n) 时间,但我不知道嵌套循环是什么。我在想 O(logn) 但我没有充分的理由。我确定我错过了一些非常简单的东西,但一些帮助会很好。
解决方案
让我们注意n
数组的长度。
如果你单独考虑第二个循环,它只是一个函数f(i)
,并且由于它将迭代从i
to的所有元素1
,它的复杂性将是O(i)
。既然你知道j<n
,你就可以说它是O(n)
。但是,不涉及对数,因为在最坏的情况下,即 j=n
,您将执行n
迭代。
至于评估两个循环的复杂性,观察对于 的每个值i
,第二个循环经历了 ti
次迭代,所以迭代的总数是
1+2+...+(n-1)= n*(n-1)/2=(1/2)*(n^2-n)
这是O(n^2)
。
推荐阅读
- javascript - 无法读取未定义的属性“0” - Angular 6 和 Angular 材料 - mat-radio-group [(ngModel)] 在 *ngFor 内设置动态变量
- normalization - 图的归一化
- ios - Xcode 10 svnX 问题
- java - 可能会抛出“NullPointerException”;“实体”在这里可以为空
- jquery - 从星期六到星期六的日期选择器选择
- android - 将 StorIO 与 AndroidX 和 Jetifier 一起使用
- python-3.x - 使用python从列表中查找特定项目
- scheme - 更多宏观问题
- android - Google Vision api:如何检测检测到的人脸是图像人脸还是真人脸?
- cmake - 如何将包含路径添加到 CMake?