计算代码块的O表示法

时间:2018-01-24 07:30:46

标签: c++ data-structures

code of calculating O notation

作为顺序循环添加,因此它应该是n log(n)+ n  但由于只保留了最大的术语,所以其他所有术语都被删除了  Ñ的log(n)  那么块n log(n)+ n或n log(n)的符号是什么

这是代码

{
    for(int m = 0; m < 2*n; m++) //O(n)
       {
           cout << m << endl;

        }
    for(int i = 0; i < n; i++)//O(n*log(n))
       { 
           for(int j = 1; j < n; j *= 2){

             //do_constant time stuff;

        }

     }
 }

1 个答案:

答案 0 :(得分:0)

要解决此问题,您需要了解big-O表示法的实际含义。如果函数f(n)O(g(n)),则表示存在c常量,从某个n0开始,f(n) < c*g(n)

在编程中,所讨论的功能通常是程序的时间(或空间)复杂性。

从定义中,您可以证明,当您的时间复杂度为O(n*log(n) + n)时,它也是O(n*log(n)),因为f(n) = n * log(n) + nO(n * log(n))。证明:

定义f(n) = n * log(n) + n。让我们分析一下所需的不平等:

n * log(n) + n < c * n * log(n)

               n < (c - 1) * n * log(n)

n > 2log(n) > 1。因此,如果我们选择c > 2n > 2,则右侧包含n乘以两个大于1的项,因此它比n大得多

因此,每个函数O(n * log(n) + n)也是O(n * log(n))。 big-O表示法的标准形式是删除不必要的术语,因此代码的复杂性为O(n * log(n))