我有一个任务,我不确定;我要计算下面的代码的时间复杂度:用大O计算时间复杂度
int a[][] = new int[m][n]; //O(1)
int w = 0; //O(1)
for (int i = 0; i < m; i++) //O(n)
for (int j = 0; j <n; j++) //O(n)
if (a[i] [j] % 2 == 0) //O(logn)
w++; //O(1)
从我Ø估计
所以我把它们加起来:
O(1)+ O(1)+ O(N)*(O (n)*(O(logn)+ O(1)/ 2)
O(1)+ O(1)+ O(n)*(O(nlogn)+ O(n)/ 2)
O(1)+ O(1)+(O(N 2 logn)时间+ O(N 2 )/ 2)
= O(N 2 logn)时间
我不确定我的思路是否正确,有人可以帮忙吗?
该日志是错误的。完整的复杂性只是二次的。 (假设模数不变,if就是一个常量运算) – sascha
@sascha它不是二次的。 – xenteros
@sascha哦,我明白了......我在笔记里的某个地方讲过我的讲师,因为变量有可能是%2,并且出于某种原因它是o(logn)。由于 – RVER12321312