计算代码块的 O 表示法
calculating the O notation for block of code
计算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) + 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))
。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 我无法找到这些代码段的大 O 表示法
- 表示行为与复制代码块的函数参数?
- 编译器C++如何在二进制代码中表示整数
- 此代码的 Big-O 表示法是什么?
- 计算代码块的 O 表示法
- 表示分割故障的代码
- 这段代码的 Big-O 表示法是什么
- 以图形方式表示C++代码
- 用十六进制表示法编写代码有什么意义
- 将c代码的中间表示分解回c
- 移植将 32 位浮点数与使用 64 位进行比较的代码,此值表示什么
- //![0]表示在Qt c++中的示例代码
- 如何从g++生成的目标代码中去掉表示源头文件的绝对路径的字符串
- 如何将c++代码包装成具有大量浮点*(表示点)的CLI
- 以0符号表示的运行时代码
- 执行时,1D Peak表示错误导致代码停止工作