Algorithm 在分析算法的时间复杂度时,为什么我们要降低最大次数项的常数

Algorithm 在分析算法的时间复杂度时,为什么我们要降低最大次数项的常数,algorithm,big-o,Algorithm,Big O,假设我有以下等式:T(n)=5n^2+2n 它的非对称紧界是θn^2。我想了解放弃5的原因。我理解为什么我们忽略低阶项。常量被删除,因为它不影响函数所属的复杂度类别 如果你有两个函数f(n)=c1*n^2和g(n)=c2*n^3,其中c1和c2是常数,不管c1有多大,c2有多小,g(n)总是会在n的某个值超过并超过f(n)。我们回到“磁阶”的概念上来。考虑到 5n^2+2n 你认为5是有意义的,但是当你把它分解并考虑数字时,常数真的不重要(用图表表示出来,你就会明白为什么)。例如假设n是50 5

假设我有以下等式:T(n)=5n^2+2n
它的非对称紧界是θn^2。我想了解放弃5的原因。我理解为什么我们忽略低阶项。

常量被删除,因为它不影响函数所属的复杂度类别


如果你有两个函数f(n)=c1*n^2和g(n)=c2*n^3,其中c1和c2是常数,不管c1有多大,c2有多小,g(n)总是会在n的某个值超过并超过f(n)。

我们回到“磁阶”的概念上来。考虑到

5n^2+2n

你认为5是有意义的,但是当你把它分解并考虑数字时,常数真的不重要(用图表表示出来,你就会明白为什么)。例如假设n是50

5*50^2+2*50-->5*2500+2*50-->12600

正如您所提到的,与n^2相比,2*n是微不足道的。同样的概念也适用于查看常量。。。你可能会认为2500对125000是一个很大的区别;然而,如果算法是N ^ 3…你现在看到的是12600对625100


因此,对算法成本影响最大的因素是n^2。

请参考big-O的定义

保持简单[*],让我们定义一个函数g是O(f),如果存在常数C和M,对于n>M,0 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),因为它是最简单的表达式,另外两个在逻辑上是等价的。如果我们想要比较不同函数的复杂性,那么我们想要使用简单的表达式

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


[*]为了让事情变得不那么简单,我们使用limsup而不是简单的限制来处理负数。我上面的定义实际上是充分的,但不是必要的。

可能与@ybungalobill重复:我知道“渐进”是什么意思。根据定义,渐近意味着分析大N的算法。函数f(N)的渐近紧界是一个函数g(N),使得f(N)属于O(g(N),f(N)属于ω(g(N))。f(N)以与g(N)相同的速率增长@ybungalobill:当然不属于mathoverflow,这不是数学中的研究级问题。@ybungalobill“与算法无关”?真的吗?