我正在备考考试,看到了这个问题,所以我做了以下事情,是否正确?
while循环的时间复杂度为O(log3n)。
for循环的时间复杂度约为O((n-(某些数学))*log2n),因为有线性的减号,所以我认为整个方法的时间复杂度为O(nlogn),除非我错了,应该是类似于
O((n-(n/log3n))*log2n) <- 不完全相同但相似,真的搞不清楚。
这里的减号是线性的还是非线性的?如果不是线性的,那么正确的大O是什么?
public void foo (int n, int m)
{
int i = m;
while (i>100)
i = i/3;
for (int k=i; k>=0; k--)
{
for (int j=1; j<n; j*=2)
System.out.print(k + "\t" + j);
System.out.println();
}
}
O((n-(n/log3n))*log2n)
- mangusta