繁体   English   中英

算法的复杂性

[英]Complexity of an algorithm

我正在研究测试并看到了这个问题,所以我做了以下,是否正确?

while循环运行在O(log3n)。

for循环运行在大约O((n-(某些数学))* log2n)因为我有一个线性的减号,我说整个方法运行在O(nlogn),除非我错了,它是就像是

O((n-(n / log3n))* log2n)< - 不完全但非常,无法弄明白。

这里是负线性还是没有? 如果不是什么是正确的bigO?

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();
    }
}

while循环以O(logm)运行。

在while循环结束后, i <= 100,所以下一个for循环最多运行100次。

对于外循环的每次迭代,内循环将运行O(logn)次。 所以总时间是O(logm + 100*logn) = O(logm + logn)

第一个while循环在O(100*log_3(m)) 这应该很容易看到。

对于外部for循环,请注意i最多为100(因为之前的while循环),而内循环为O(100*log_2(n)) ,因此总渐近极限为O(log_3(m) + log_2(n))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM