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;
}
}
}
答案 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) + n
是O(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 > 2
和n > 2
,则右侧包含n
乘以两个大于1的项,因此它比n
大得多
因此,每个函数O(n * log(n) + n)
也是O(n * log(n))
。 big-O表示法的标准形式是删除不必要的术语,因此代码的复杂性为O(n * log(n))
。