最坏情况下使用Java算法的大O

最坏情况下使用Java算法的大O,java,algorithm,big-o,Java,Algorithm,Big O,一, (i=0;i

一,

(i=0;i<3;i++)的
{
对于(j=0;j<10;j++){
打印i+j;
}
}
我假设大O是30,因为最多的次数是3*10

二,

(i=0;i{ 对于(j=0;j 会是O是n*m吗

三,

(i=0;i{ 对于(j=0;j n*m*对数基数2(1000)大O在nlog(n)时间内

四,

(i=0;i{ 对于(j=0;j 五,

(i=0;i{ 印刷品一; } //n和m是一些整数 对于(j=1;j
如果你知道Big O,有人能帮我一下吗?我看着这些,茫然不知所措。我希望我张贴在正确的位置,我发现这些问题很困难。谢谢你的帮助

任何常数因子都可以忽略
O(30)
等于
O(1)
,这是人们通常会说的1)

2) 就这样

3) 在
O(n*m*log_2(1000))
中,
log_2(1000)
是常数,所以它是
O(n*m)

4)
O(n-10)
O(n)
相同
O(m/2)
O(m)
相同。因此,
O(n*m)
再次出现

5) 琐碎地
O(n)


6)
O(log_2(m))

我认为重要的是要指出,大O表示法是关于函数的,给定一个任意常数,在某个点上会被认为是上界

  • O(1)

    这是因为每个循环的迭代时间是恒定的。我们将其称为O(1)而不是O(30),因为作为上界的函数是1,具有任意常数>=30

  • O(n*m)

    因为我们必须循环
    m
    iterations
    n

  • O(n*m)

    <>这和前一个一样,只是我们在中间抛出另一个循环。现在你可以注意到这个循环,类似于第一个问题,只是一个常数时间。因此,你甚至不需要花时间去计算它循环的频率,因为它总是恒定的——它是O(1),可以解释为O(n*m*1),我们可以简单地称之为O(n*m)

  • O(n*m)

    对于外部循环,不要陷入
    。-10
    并意识到我们可以说循环在O(n)中运行。我们可以忽略这一点10
    出于同样的原因,我们忽略了第一个问题中的精确值;常数其实并不重要。同样的原理也适用于
    m/2
    ,因为你可以想象
    m
    只是被
    1/2
    的常数操纵。所以我们可以称之为O(n*m)

  • T(n)=O(n)+O(lgm)=>O(n+lgm)

    所以这里有两个部分我们要看;第一个循环和第二个循环。第一个循环显然是O(n),所以这没有问题。现在第二个循环有点棘手。基本上,您可以注意到迭代器
    j
    呈指数增长(特别是2的幂),因此循环将以指数(对数)的倒数运行。所以这个函数在O(n+lgm)中运行


  • 大O是30
    它是O(1),因为3和10都是非常小的数字。如果它们可以任意大,那就是O(N平方),好的,大O等于1是有意义的。我想30岁也是对的,但不是大会。谢谢你,我感谢你的帮助。我大部分时间都在正确的轨道上,有几次不见了。我给了你一票。@ringø:原来的格式真的很糟糕;我假设它们是两段独立的代码。好的,5更有意义。在你发表这篇文章之前,我给了你最好的评价。我真的很感激你给我的回答。
    for(i = 0; i < 3; i++){
        for(j = 0; j < 10; j++){
            print i+j;
        }
    }
    
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++){
            print i+j;
        }
    }
    
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++){
            for(int k = 1; k < 1000; k *= 2){
                print i+j+k;
            }
        }
    }
    
    for(i = 0; i < n - 10; i++){
        for(j = 0; j < m/2; j++){
            print i+j;
        }
    }
    
    for(i = 0; i < n; i++){
       print i;
    }
    //n and m are some integers
    for(j = 1; j < m; j *= 2){
       print j;
    }