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的解释很好:)