Time 时间复杂性回顾

Time 时间复杂性回顾,time,big-o,time-complexity,Time,Big O,Time Complexity,以下代码段的时间复杂度是多少 int[][] A = new int [n][]; for (int i=0; i<n; i++) { if (i % 2 == 0) // i is a multiple of 2 A[i] = new int [n]; else A[i] = new int [1]; } for (int i=0; i<A.length; i++) for (int j=0; j<A[i].lengt

以下代码段的时间复杂度是多少

int[][] A = new int [n][];
for (int i=0; i<n; i++) {
    if (i % 2 == 0) // i is a multiple of 2
        A[i] = new int [n];
    else
        A[i] = new int [1];
}

for (int i=0; i<A.length; i++)
    for (int j=0; j<A[i].length; j++)
        sum = sum + A[i][j];
int[]A=新的int[n][];

对于(int i=0;iYes),复杂度为O(n2)


怎么做?

  • 一半的时间(即n/2次),您将迭代n个元素=(n/2)*n=n2/2
  • 有一半的时间(同样是n/2次),您将只有一个元素需要迭代=(n/2)*1=n/2
  • 因此,总体复杂度=O(n2/2+n/2)=O(n2)

首先,让我们用术语来决定。例如,让我们把每一个操作都设为等于
1
。让我们用你的代码(为了保持一致-我们将调用此方法)逐行进行

int[][] A = new int [n][];
这将等于
1

for (int i=0; i<n; i++) {  
上述操作可分别计算为
1

for (int i=0; i<A.length; i++) 
内部循环是相同的
n

    if (i % 2 == 0) // 1
        A[i] = new int [n]; // 1
    else
        A[i] = new int [1]; // 1
}
        sum = sum + A[i][j];
这同样等于
1

for (int i=0; i<n; i++) {  

内部循环是相乘的,所以你是正确的,但是要考虑到这将是大O符号O(n2)。

太棒了!谢谢你确认:)关于大O的解释很好:)