计算代码块的 O 表示法

calculating the O notation for block of code

本文关键字:表示 代码 计算      更新时间:2023-10-16

计算O表示法的代码

因为添加了顺序循环,所以它应该是 nlog(n(+n 但由于只保留了最大的术语,因此删除了所有其他术语,因此可能是 n 日志(n( 那么块 n log(n(+n 或 n log(n(的 O 表示法是什么

这是代码

{
    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;
        }
     }
 }

要解决此问题,您需要了解 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 > 2时,log(n) > 1 .因此,如果我们取 c > 2n > 2 ,右侧包含n乘以大于 1 的两个项,因此它比 n 大得多。

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