什么是算法中的常数因子和低阶项?

时间:2014-03-24 16:05:54

标签: big-o complexity-theory

在下面的视频中描述了一些渐近分析问题: https://class.coursera.org/algo-004/lecture/169

但我无法理解"低阶术语"和"常数因子"本身? (这是视频的第4分钟。)

合并排序为6n*log2(n)+6n。为什么6n在视频中提到的情况下为低阶词,而6为constant factor?这些术语有具体的定义吗?

3 个答案:

答案 0 :(得分:20)

低阶词:

此处的“订单”是指order of magnitude

在处理xx2等非常简单的术语时,这个概念很容易理解和解释。 x具有数量级1,因为它可以写为x1x2具有阶数2 - 数量级等于变量的幂术语。但是当你通过添加log使事情变得复杂时,事情变得更加模糊(至少对我而言)。 [1]

在某种非正式的术语中,如果f(x) g(x)趋于无穷大,则f(x) < g(x)的排序低于x

很容易看出f(n) = 6ng(n) = 6n*log2(n)更低的顺序,只需用n替换一些非常大的值(正确的方法是在数学上证明它,但是用一个大的价值往往适用于简单的术语)。

terms基本上是用加/减符号分隔的东西。

因此,低阶项是任何比其他项更低阶的项。

据推测,这与the leading-order term相反,{{3}}是具有最大数量级的术语。

[1]:我经常与big-O打交道,但是已经有一段时间了(高中?)因为我已经处理了数量级的基础知识,所以如果我可能遗漏或遗忘了某些事情,那么道歉关于那部分。

常数因素:

“因子”是乘法中的一个术语。对于6n6n是因素。

常数因子只是不依赖于输入参数的任何事物(在这种情况下为n)。

在这里,无论我们做什么n6都将始终保持6,因此它会保持不变。

答案 1 :(得分:1)

当big-O中的函数有多个术语时,你可以保留一个增长得更快的术语,因为它迟早会“隐藏”其他术语。你可以乘以任何常数。

O(6.N.Lg(N) + 6.N)O(6.N.Lg(N))O(N.Lg(N))O(0.01.N.Lg(N) + 42.sin(N) - 1.745 + 1/N)相同......

主导词总是N.Log(N)(对数的基础并不重要)。

答案 2 :(得分:0)

通常,您最好在论坛上提出与Coursera课程相关的问题,其他学生可以帮助您锻炼您自己无法理解的任何内容。

假设我们有一个多项式函数F(n)=5n³+ 8n + 3,n³具有最高指数5n³是多项式的最高阶项。所有其他条款因此都是低阶条款。

现在他们为什么不相关。好吧,这是大O符号的定义

T(n)= O(F(n))如果我们能找到c和n0,例如所有n> = n0 T(n)&lt; = C.F(n)

  1. 我们可以证明对于任何多项式函数F(N)= Cn.N ^ n + Cn-1.N ^(n-1)+ ... + C0 F(N)= O(C.N ^ n)此证明在视频中给出。

  2. 我们还可以证明,对于每个C和K,C.N ^ K = O(N ^ K)(简单地取c = C)

  3. 最后我们可以证明,如果F(n)= O(G(n))和G(n)= O(K(n))那么F(n)= O(K(n)) ,这个属性叫做传递性。

  4. 然后我们得出结论,每个函数T(n)= O(F(n))其中F是多项式也是O(n ^ k)其中k是多项式F的最高指数。

  5. 为简单起见,我们将F降低到最高阶项,并在保持数学正确性的同时降低常数因子。