我懂得如何计算函数的复杂性。这同样适用于确定数学函数的增长顺序。[我可能没有我想的那么理解它,这就是为什么我可能会问这个]例如:an^3 + bn^2 + cn + d
可以用大O表示法写成O(n^3),因为对于足够大的n
而言,bn^2 + cn + d
项的值与an^3
相比是微不足道的(常数系数a、b、c和d也被省略,它们对值的贡献也变得微不足道)。
我不明白的是,当领导任期涉及到某种分工时,这是如何运作的例如:a/n^3 + bn^2
或n^3/a + bn^2
设n=100,a=1000,b=10为前一个公式,那么我们得到n^3/a = 100^3/1000 = 1000
和bn^2 = 10*100^2 = 100,000
或者对后者来说更具戏剧性的是——在这种情况下,领先的任期不仅像上面那样增长缓慢,而且还在萎缩,不是吗?以下内容:a/n^3 = 1000/100^3 = 0.001
和bn^2 = 100,000
如上。
在这两种情况下,第二项的贡献要大得多,那么,决定增长顺序的不是n^2
吗?
当前导项后面跟着减法(a/n^3 - bn^2
)或第二项也是除法(n^3/a + n^2/b)
)或两者都是除法但顺序是混合的(a/n^3 + n^2/b
)时,情况就变得更加复杂(至少对我来说)。
这个列表似乎没完没了,所以我的一般问题是,如何理解和处理涉及除法(和减法)的公式,以确定给定函数的增长顺序?
最佳答案
除法只是乘以multiplicative inverse,所以n^3/a == n^3 * a^-1
,你可以像处理其他系数一样处理它。
关于减量a*n^3 - b*n^2 <= a*n^3
,它也在O(n^3)
中另外,a*n^3 - b*n^2 >= a/2 * n^3
对于足够大的n
值,它也在Omega(n^3)
中有关减量的更详细解释,请参见:Algorithm complexity when faced with substraction in value
大O符号通常用于增加(不必是单调的)函数,而像a/n
这样的减少函数并不适合它,尽管O(1/n)
似乎仍然定义得很好,AFAIK,而且它是O(1)
的子集(除非只考虑离散函数)然而,这对于算法的分析几乎没有价值,因为算法的复杂性不能真正缩小。