如果N * C *(logN + N)表示算法1的计算时间步长而N * C *(logN + N * C)表示算法2的计算时间步长,那么说两者都有正确O(N ^ 2)的计算复杂度
*其中C是常数值
答案 0 :(得分:1)
是的,这是我的逻辑:
O(Cn(log n + Cn))
删除常量
= O(n(log n + n))
拆分乘法
= O(n * log n + n^2)
删除较小的术语
= O(n^2)
如果C
“非常大”并不重要,我们只关心Big-O表示法中的n
,因为它是不断增长的术语。当n变得足够大(例如接近无穷大)时,C
将变得毫无意义。在实践中C
可能会产生巨大影响,但这在Big-O中被抽象出来。
答案 1 :(得分:1)
是的,这是正确的,因为f \ element O(g)( Landau -Notation)意味着您的算法 f 增长慢于 g 。由于你的算法增长速度都慢于n ^ 2,你的假设是正确的。
常数 - 让我描绘一下:)
说明复杂性是 O(n ^ 2)意味着您可以从nlog(n)到n ^ 2看到的整个平面。这就是你忽略常数的地方。所以你的算法a可以比算法b好得多,但仍然保持相同的Landau复杂度,因为它只给出了一个上限。
答案 2 :(得分:0)
是的,将步数乘以常数对复杂的Big-Oh符号没有影响。
此外,当N变大时,N 2 项在N log(N)上占主导地位,这就是Big-Oh表示法的目的。
答案 3 :(得分:-1)
要记住的一件事...... c值起着重要作用。
假设算法在数组上运行大约32次。
因此算法的复杂性为32 * n = C * n = O(n)
让我们尝试在30的数组大小上运行算法。因此它的32 * 30.这是n ^ 2次操作。
我们通常为大集合计算大O分析。真的很大。所以它有意义
来到你的问题。
只要你的常数C具有可比性,它们都在O(n ^ 2)中运行。所以这取决于算法