Data structures 大O符号?那是O(n)吗?

Data structures 大O符号?那是O(n)吗?,data-structures,Data Structures,什么是大O和大Omega符号? int temp = 0 for (i =0; i < 100000000; i++) for (j = 0; j < N; j++) temp = 0 while(temp < j) { temp++; } int-tem

什么是大O和大Omega符号?

int temp = 0
for (i =0; i < 100000000; i++)
         for (j = 0; j < N; j++)
                   temp = 0
                   while(temp < j)
                   {
                           temp++;
                   }
int-temp=0
对于(i=0;i<100000000;i++)
对于(j=0;j
假设最外层循环中的1亿值实际上为n,则该算法的总体时间复杂度将为O(n^3)


最外层的循环将迭代n次。对于每个迭代,第一个内部循环迭代n次。对于该内循环的每次迭代,第二个内循环在最坏情况下迭代n次,平均n/2次。因此,时间复杂度的顺序是n x n x n=n^3。

整个算法使用了较大的欧米茄

  • 第一个循环将执行
    100000000次
    ,这是一个常量值

  • 第二个循环将执行
    N次

  • 第三个循环最多执行
    N次
    。(0,1,2,3,…,N)

  • 最大的欧米茄是
    O(100000000)*O(N)*O(N)=(100000000*N*((N+1)/2))=O(N^2)


    该算法将具有二次时间复杂度。

    这是O(n^2),最里面的时间从0到
    j
    ,谁的上界是
    n

    此算法的运行时复杂性为
    O(n^2)

    外循环重复恒定次数(即使常数很大,它仍然是一个常数。在这方面,10^5与10^100没有区别)

    复杂性由两个内部循环决定。最里面的循环重复j次,j从0到N

    0+1+2+3++N=N(N+1)/2=>复杂度函数f(N)=10^9*N(N+1)/2=>O((f(N))=N^2。

    这也是ω(N^2),这意味着这个算法最终是θ(N^2)

    请记住,大O和大Omega符号是关于渐近极限的,这意味着您只需要找到一些随机值,在这些值之后f(n)=c2h(n)(用于下限)。对于g(n)=h(n)=n^2,应该很容易找到这些值


    最后,您可以挤压f(n)(如上所述)在两个具有不同乘法器的c*n ^ 2函数之间,这个代码甚至不会用我知道的任何语言来编译。你是从白板上复制的吗?如果是这样,它会丢失一些东西吗?只需考虑第二个循环在第一个内部,第第三个循环在第二个内部。请编辑你的问题至少使它成为有效的伪代码。;不要让我们猜测。对于第一个循环,它是O(1),对于第二个循环,它是O(n)。对于第三个循环,它会是什么?是O(1)还是O(n)?这让我很困惑。在所有的时间里,第三个循环运行的平均迭代次数是0.5 x n。因为0.5是一个常数因子,你可以去掉它,最终得到O(n)第三个循环的时间复杂度。其思想是,第一次循环0次,最后一次循环n次,因此(0+n)/2=平均0.5n次。然后第二次循环1次,第二次循环n-1次,给出(1+(n-1))/2=0.5n次…这将继续给出平均0.5n次的迭代次数。为什么说第三个循环从未执行过?如果j==1000,它在温度达到j之前不是运行了1000次吗?这个问题还询问了big OmegaI正在更正并且比你的解释得更多。@blindy“假设最外层循环中的1亿值实际上是N。”但事实并非如此;它是1亿。我完全理解。我的假设是基于原始海报的伪代码质量很差,甚至没有编译,而且他/她在被多个用户指出后也懒得编辑。我认为他/她实际上是指N,而不是100万,而复制粘贴的定义是伪CODe不应编译。