algorithm - 在分析算法的时间复杂度时,为什么要舍弃度数最大项的常​​量

标签 algorithm big-o

假设我有以下内容:T(n) = 5n^2 +2n 这个的渐近紧界是 theta n^2。我想了解删除 5 背后的原因。我了解为什么我们忽略低阶项。

最佳答案

引用 big-O 的定义。

为简单起见[​​],如果存在常数 C 和 M 使得 n > M,0 <= g(n) < Cf(n),那么我们定义函数 g 为 O(f)。

在F中存在正常乘数不会影响这一点,只需适本地选择c即可。通过选择大于 5 的 C 值和足够大的 M 值,+2n 无关紧要,您的示例 T 为 O(n^2)。例如,对于 n > 2,事实是 5n^2 + 2n < 6n^2(因为 n^2 > 2n),因此对于 C= 6 和 M = 2,我们看到 T(n) 是 O(n ^2).

所以 T(n) 确实是 O(n^2),也是 O(5n^2) 和 O(5n^2 + 2n)。这些事实中最有趣 是它的复杂度为 O(n^2),因为它是最简单的表达式,而其他两个在逻辑上是等价的。如果我们要比较不同函数的复杂度,那么我们要使用简单的表达式。

对于 big-Theta,请注意,当 f 和 g 反过来时,我们可以玩同样的把戏。 “g是Theta(f)”这个关系是一个等价关系,那么我们要选择什么作为T的等价类的代表成员呢?最简单的。

[*] 为了让事情不那么简单,我们通过使用 limsup 而不是简单的限制来处理负数。我上面的定义其实已经足够了,但不是必须的。

关于algorithm - 在分析算法的时间复杂度时,为什么要舍弃度数最大项的常​​量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768732/

相关文章:

algorithm - 证明logn是O(2^sqrt(logn))

algorithm - 循环迭代分析第 2 部分

string - 将 trie 转换为反向 trie?

algorithm - 如何在不使用内置函数的情况下计算数字的平方根?

algorithm - 计算几何点集算法

c++ - 在 C++ 中比较两个大型数据列表的有效算法是什么?

algorithm - 针对以下问题提出 O(logm) 算法

python - 如何将列表划分为相似的平均子集

java - 有人向我解释了这个 Java Big O 代码的几个步骤

algorithm - 使用迭代法求复杂度 T(n) = 4T(n/2) + (n^2)*logn